diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..cc4a791
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+HytaleUpdateBot
\ No newline at end of file
diff --git a/.idea/libraries-with-intellij-classes.xml b/.idea/libraries-with-intellij-classes.xml
new file mode 100644
index 0000000..9fa3156
--- /dev/null
+++ b/.idea/libraries-with-intellij-classes.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index f3ed3c5..2e722da 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,8 +5,14 @@
+
+
+
+
+
-
+
+
@@ -31,6 +37,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -72,10 +117,10 @@
-
+
-
+
@@ -90,7 +135,7 @@
-
+
@@ -159,14 +204,8 @@
-
-
-
-
-
-
-
+
diff --git a/build.gradle b/build.gradle
index c135228..9008d53 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,10 +1,10 @@
plugins {
- id 'org.jetbrains.kotlin.jvm' version '1.3.61'
- id 'org.jetbrains.kotlin.plugin.serialization' version '1.3.61'
+ id 'org.jetbrains.kotlin.jvm' version '1.5.10'
+ id 'org.jetbrains.kotlin.plugin.serialization' version '1.5.10'
}
group 'de.wulkanat'
-version '1.4.3'
+version '2.0.0'
repositories {
mavenCentral()
@@ -14,9 +14,9 @@ repositories {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- compile 'net.dv8tion:JDA:4.2.0_189'
- compile 'org.jsoup:jsoup:1.13.1'
- compile "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0"
+ implementation 'net.dv8tion:JDA:4.2.0_189'
+ implementation 'org.jsoup:jsoup:1.13.1'
+ implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0"
}
compileKotlin {
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7c12b5f..9938269 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Thu Aug 13 18:41:46 CEST 2020
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
\ No newline at end of file
diff --git a/src/main/kotlin/de/wulkanat/extensions/Jsoup.kt b/src/main/kotlin/de/wulkanat/extensions/Jsoup.kt
new file mode 100644
index 0000000..7f5d2a5
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/extensions/Jsoup.kt
@@ -0,0 +1,10 @@
+package de.wulkanat.extensions
+
+import org.jsoup.nodes.Element
+import org.jsoup.select.Elements
+
+operator fun Element.get(className: String): Elements =
+ this.getElementsByClass(className)
+
+val Elements.text get() = text().trim()
+val Element.absUrl get(): String = child(0).absUrl("href")
\ No newline at end of file
diff --git a/src/main/kotlin/de/wulkanat/model/JobListingPreview.kt b/src/main/kotlin/de/wulkanat/model/JobListingPreview.kt
new file mode 100644
index 0000000..1cab4d1
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/model/JobListingPreview.kt
@@ -0,0 +1,21 @@
+package de.wulkanat.model
+
+import de.wulkanat.extensions.hex2Rgb
+import net.dv8tion.jda.api.EmbedBuilder
+import net.dv8tion.jda.api.entities.MessageEmbed
+
+class JobListingPreview(
+ val title: String,
+ val department: String,
+ val location: String,
+ val fullListingUrl: String
+) {
+ fun toMessageEmbed(): MessageEmbed {
+ return EmbedBuilder()
+ .setTitle(this.title, this.fullListingUrl)
+ .setDescription(this.department)
+ .setAuthor(this.location)
+ .setColor(hex2Rgb("#337fb0"))
+ .build()
+ }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/de/wulkanat/web/JobListingParser.kt b/src/main/kotlin/de/wulkanat/web/JobListingParser.kt
new file mode 100644
index 0000000..88dfcfd
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/web/JobListingParser.kt
@@ -0,0 +1,21 @@
+package de.wulkanat.web
+
+import de.wulkanat.extensions.get
+import de.wulkanat.extensions.text
+import de.wulkanat.extensions.absUrl
+import de.wulkanat.model.JobListingPreview
+import org.jsoup.nodes.Document
+
+fun parseJobListings(doc: Document) =
+ doc["current-jobs__departments"].flatMap { jobDepartment ->
+ val jobDepartmentName = jobDepartment["current-jobs__department-name"].text
+
+ jobDepartment["current-jobs__job"].map { job ->
+ JobListingPreview(
+ title = job["current-jobs__job-title"].text,
+ department = jobDepartmentName,
+ location = job["current-jobs__job-location"].text,
+ fullListingUrl = job.absUrl
+ )
+ }
+ }
\ No newline at end of file