diff --git a/.gitignore b/.gitignore
index b4ac5dd..dcd26ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
servers.json
admin.json
+twitter.json
service_channels.json
*.hprof
/build
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index dea8515..6622921 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -4,15 +4,16 @@
+
+
+
-
-
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index b3e9cbd..7f03ccb 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -21,5 +21,10 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 29af3ee..e4d363a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 33a3ac4..7c4ce66 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,12 +1,22 @@
+
+
+
-
+
+
+
+
+
+
-
+
+
+
@@ -31,52 +41,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -89,31 +53,37 @@
-
+
+
+
+
-
-
-
+
+
+
+
+
+
@@ -121,12 +91,8 @@
-
-
-
-
-
+
@@ -204,13 +170,14 @@
-
-
-
+
+
+
+
@@ -269,6 +236,10 @@
+
+
+
+
@@ -277,46 +248,50 @@
-
+
-
-
+
+
-
+
+
+
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -337,23 +312,27 @@
+
+
+
+
-
+
-
+
-
+
-
+
diff --git a/build.gradle b/build.gradle
index 67acd02..d3f47a3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,6 @@
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.4.0'
+ id 'org.jetbrains.kotlin.plugin.serialization' version '1.4.0'
}
group 'de.wulkanat'
@@ -9,21 +9,26 @@ version '1.4.1'
repositories {
mavenCentral()
jcenter()
+
+ maven {
+ url 'https://dl.bintray.com/nephyproject/stable'
+ }
}
dependencies {
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
+ implementation 'blue.starry:penicillin:5.0.0'
- compile 'net.dv8tion:JDA:4.2.0_189'
+ compile 'net.dv8tion:JDA:4.2.0_204'
compile 'org.jsoup:jsoup:1.13.1'
- compile "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0"
+ compile 'org.jetbrains.kotlinx:kotlinx-serialization-core:1.0.0-RC'
}
compileKotlin {
- kotlinOptions.jvmTarget = "1.8"
+ kotlinOptions.jvmTarget = '1.8'
}
compileTestKotlin {
- kotlinOptions.jvmTarget = "1.8"
+ kotlinOptions.jvmTarget = '1.8'
}
jar {
@@ -34,7 +39,7 @@ jar {
task fatJar(type: Jar) {
baseName = project.name + '-all'
- from((configurations.compile.findAll { !it.path.endsWith(".pom") }).collect {
+ from((configurations.compile.findAll { !it.path.endsWith('.pom') }).collect {
it.isDirectory() ? it : zipTree(it)
})
with jar
@@ -43,5 +48,3 @@ task fatJar(type: Jar) {
'Implementation-Version': version
}
}
-
-apply plugin: 'kotlinx-serialization'
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 7c12b5f..1b16c34 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.1.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/src/main/kotlin/de/wulkanat/Admin.kt b/src/main/kotlin/de/wulkanat/Admin.kt
index c442d41..1a91a89 100644
--- a/src/main/kotlin/de/wulkanat/Admin.kt
+++ b/src/main/kotlin/de/wulkanat/Admin.kt
@@ -1,10 +1,8 @@
package de.wulkanat
import kotlinx.serialization.json.Json
-import kotlinx.serialization.json.JsonConfiguration
import net.dv8tion.jda.api.EmbedBuilder
import net.dv8tion.jda.api.JDA
-import net.dv8tion.jda.api.entities.Activity
import net.dv8tion.jda.api.entities.MessageEmbed
import net.dv8tion.jda.api.entities.User
import java.awt.Color
@@ -17,7 +15,10 @@ object Admin {
val offlineMessage: String
init {
- val admin = Json(JsonConfiguration.Stable).parse(AdminFile.serializer(), ADMIN_FILE.readText())
+ val admin = Json { allowStructuredMapKeys = true }.decodeFromString(
+ AdminFile.serializer(),
+ ADMIN_FILE.readText()
+ )
userId = admin.adminId
token = admin.token
updateMs = admin.updateMs
diff --git a/src/main/kotlin/de/wulkanat/Channels.kt b/src/main/kotlin/de/wulkanat/Channels.kt
index aaef499..3306669 100644
--- a/src/main/kotlin/de/wulkanat/Channels.kt
+++ b/src/main/kotlin/de/wulkanat/Channels.kt
@@ -1,7 +1,6 @@
package de.wulkanat
-import de.wulkanat.extensions.crosspost
-import kotlinx.serialization.list
+import kotlinx.serialization.builtins.ListSerializer
import net.dv8tion.jda.api.EmbedBuilder
import net.dv8tion.jda.api.JDA
import net.dv8tion.jda.api.Permission
@@ -99,14 +98,14 @@ object Channels {
}
fun refreshChannelsFromDisk(): MutableList {
- return json.parse(
- DiscordChannel.serializer().list, (SERVERS_FILE).readText()
+ return json.decodeFromString(
+ ListSerializer(DiscordChannel.serializer()), (SERVERS_FILE).readText()
).toMutableList()
}
fun refreshServiceChannelsFromDisk(): MutableList {
- return json.parse(
- ServiceChannel.serializer().list, (SERVICE_CHANNELS_FILE).readText()
+ return json.decodeFromString(
+ ListSerializer(ServiceChannel.serializer()), (SERVICE_CHANNELS_FILE).readText()
).toMutableList()
}
@@ -162,14 +161,14 @@ object Channels {
fun saveChannels() {
SERVERS_FILE.writeText(
- json.stringify(
- DiscordChannel.serializer().list,
+ json.encodeToString(
+ ListSerializer(DiscordChannel.serializer()),
channels
)
)
SERVICE_CHANNELS_FILE.writeText(
- json.stringify(
- ServiceChannel.serializer().list,
+ json.encodeToString(
+ ListSerializer(ServiceChannel.serializer()),
serviceChannels
)
)
diff --git a/src/main/kotlin/de/wulkanat/DataIO.kt b/src/main/kotlin/de/wulkanat/DataIO.kt
index d84571a..cdbc147 100644
--- a/src/main/kotlin/de/wulkanat/DataIO.kt
+++ b/src/main/kotlin/de/wulkanat/DataIO.kt
@@ -2,9 +2,12 @@ package de.wulkanat
import de.wulkanat.extensions.ensureExists
import kotlinx.serialization.Serializable
+import kotlinx.serialization.builtins.ListSerializer
+import kotlinx.serialization.builtins.list
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonConfiguration
import kotlinx.serialization.list
+import kotlinx.serialization.stringify
import java.io.File
@Serializable
@@ -35,9 +38,26 @@ data class AdminFile(
val offlineMessage: String = "CONNECTION FAILED"
)
-val json = Json(JsonConfiguration.Stable)
+@Serializable
+data class TwitterFile(
+ val accessToken: String = "",
+ val accessTokenSecret: String = "",
+ val apiKey: String = "",
+ val apiSecretKey: String = "",
+ val bearerToken: String = "",
+ val env: String = "dev",
+)
-val SERVERS_FILE = File("servers.json").ensureExists(json.stringify(DiscordChannel.serializer().list, listOf()))
+val json = Json { allowStructuredMapKeys = true }
+
+val SERVERS_FILE =
+ File("servers.json").ensureExists(json.encodeToString(ListSerializer(DiscordChannel.serializer()), listOf()))
val SERVICE_CHANNELS_FILE =
- File("service_channels.json").ensureExists(json.stringify(ServiceChannel.serializer().list, listOf()))
-val ADMIN_FILE = File("admin.json").ensureExists(json.stringify(AdminFile.serializer(), AdminFile()))
+ File("service_channels.json").ensureExists(
+ json.encodeToString(
+ ListSerializer(ServiceChannel.serializer()),
+ listOf()
+ )
+ )
+val ADMIN_FILE = File("admin.json").ensureExists(json.encodeToString(AdminFile.serializer(), AdminFile()))
+val TWITTER_FILE = File("twitter.json").ensureExists(json.encodeToString(TwitterFile.serializer(), TwitterFile()))
diff --git a/src/main/kotlin/de/wulkanat/Twitter.kt b/src/main/kotlin/de/wulkanat/Twitter.kt
new file mode 100644
index 0000000..548cdbd
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/Twitter.kt
@@ -0,0 +1,34 @@
+package de.wulkanat
+
+import blue.starry.penicillin.PenicillinClient
+import blue.starry.penicillin.core.session.ApiClient
+import blue.starry.penicillin.core.session.config.account
+import blue.starry.penicillin.core.session.config.token
+import blue.starry.penicillin.endpoints.accountActivity
+import blue.starry.penicillin.endpoints.accountactivity.subscribe
+import blue.starry.penicillin.extensions.queue
+import kotlinx.serialization.json.Json
+
+object Twitter {
+ private val twitterFile: TwitterFile = Json { allowStructuredMapKeys = true }.decodeFromString(
+ TwitterFile.serializer(),
+ TWITTER_FILE.readText()
+ )
+ private val apiKey get() = twitterFile.apiKey
+ private val apiSecretKey get() = twitterFile.apiSecretKey
+ private val bearerToken get() = twitterFile.bearerToken
+ private val accessToken get() = twitterFile.accessToken
+ private val accessTokenSecret get() = twitterFile.accessTokenSecret
+ private val env get() = twitterFile.env
+
+ val api: ApiClient = PenicillinClient {
+ account {
+ token(Twitter.accessToken, Twitter.accessTokenSecret)
+ }
+ }
+
+ init {
+ api.accountActivity.subscribe(env).queue()
+ api.
+ }
+}
\ No newline at end of file