From e0a19bb5e554867d96548b16db0c9443e6f1e976 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 20 Jun 2022 20:52:42 +0600 Subject: [PATCH 1/2] start 1.1.2 + add opportunity to load object plugins --- CHANGELOG.md | 5 +++++ bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt | 2 +- bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt | 10 +++++----- bot/src/main/kotlin/dev/inmo/plagubot/config/Config.kt | 2 ++ gradle.properties | 2 +- .../main/kotlin/dev/inmo/plagubot/PluginSerializer.kt | 3 ++- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb04dbf..a9b2987 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 1.1.2 + +* `Plugin`: + * Now it is possible to use `object`s of plugins instead of classes + ## 1.1.1 * `Versions` diff --git a/bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt b/bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt index 77dba0d..15f45bc 100644 --- a/bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt +++ b/bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt @@ -18,7 +18,7 @@ import org.koin.dsl.module @Serializable @SerialName("Hello") -class HelloPlugin : Plugin { +object HelloPlugin : Plugin { @Serializable data class HelloPluginConfig( val print: String diff --git a/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt b/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt index 59b1cdb..513f561 100644 --- a/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt +++ b/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt @@ -56,17 +56,17 @@ data class PlaguBot( } override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) { - config.plugins.map { + config.plugins.map { plugin -> launch { runCatchingSafely { - logger.i("Start loading of $it") - with(it) { + logger.i("Start loading of $plugin") + with(plugin) { setupBotPlugin(koin) } }.onFailure { e -> - logger.w("Unable to load bot part of $it", e) + logger.w("Unable to load bot part of $plugin", e) }.onSuccess { - logger.i("Complete loading of $it") + logger.i("Complete loading of $plugin") } } }.joinAll() diff --git a/bot/src/main/kotlin/dev/inmo/plagubot/config/Config.kt b/bot/src/main/kotlin/dev/inmo/plagubot/config/Config.kt index 5135e5b..88c1769 100644 --- a/bot/src/main/kotlin/dev/inmo/plagubot/config/Config.kt +++ b/bot/src/main/kotlin/dev/inmo/plagubot/config/Config.kt @@ -1,9 +1,11 @@ package dev.inmo.plagubot.config +import dev.inmo.micro_utils.common.Warning import dev.inmo.plagubot.Plugin import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +@Warning("This API is internal and can be changed without notifications of mentions of changes") @Serializable data class Config( val botToken: String, diff --git a/gradle.properties b/gradle.properties index 5158144..39a275e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ kotlin.js.generate.externals=true kotlin.incremental=true group=dev.inmo -version=1.1.1 +version=1.1.2 diff --git a/plugin/src/main/kotlin/dev/inmo/plagubot/PluginSerializer.kt b/plugin/src/main/kotlin/dev/inmo/plagubot/PluginSerializer.kt index ad2252d..d3d89a4 100644 --- a/plugin/src/main/kotlin/dev/inmo/plagubot/PluginSerializer.kt +++ b/plugin/src/main/kotlin/dev/inmo/plagubot/PluginSerializer.kt @@ -13,7 +13,8 @@ class PluginSerializer : KSerializer { get() = String.serializer().descriptor override fun deserialize(decoder: Decoder): Plugin { - return Class.forName(decoder.decodeString()).getDeclaredConstructor().newInstance() as Plugin + val kclass = Class.forName(decoder.decodeString()).kotlin + return (kclass.objectInstance ?: kclass.constructors.first { it.parameters.isEmpty() }.call()) as Plugin } override fun serialize(encoder: Encoder, value: Plugin) { From 0dff596926bdd113f77a058cde4f9bf13a56be74 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 20 Jun 2022 20:58:38 +0600 Subject: [PATCH 2/2] update dependencies and optimize imports --- CHANGELOG.md | 4 ++++ bot/src/main/kotlin/dev/inmo/plagubot/App.kt | 6 ++++-- .../main/kotlin/dev/inmo/plagubot/HelloPlugin.kt | 7 ++----- bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt | 13 +++++++++---- gradle/libs.versions.toml | 6 +++--- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9b2987..e5d6a47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 1.1.2 +* `Versions` + * `tgbotapi`: `2.0.3` + * `microutils`: `0.11.3` + * `kslog`: `0.3.1` * `Plugin`: * Now it is possible to use `object`s of plugins instead of classes diff --git a/bot/src/main/kotlin/dev/inmo/plagubot/App.kt b/bot/src/main/kotlin/dev/inmo/plagubot/App.kt index d364515..6f28c13 100644 --- a/bot/src/main/kotlin/dev/inmo/plagubot/App.kt +++ b/bot/src/main/kotlin/dev/inmo/plagubot/App.kt @@ -1,7 +1,9 @@ package dev.inmo.plagubot -import dev.inmo.kslog.common.* -import dev.inmo.plagubot.config.* +import dev.inmo.kslog.common.KSLog +import dev.inmo.kslog.common.i +import dev.inmo.plagubot.config.Config +import dev.inmo.plagubot.config.defaultJsonFormat import kotlinx.serialization.InternalSerializationApi import kotlinx.serialization.json.jsonObject import java.io.File diff --git a/bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt b/bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt index 15f45bc..89cb216 100644 --- a/bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt +++ b/bot/src/main/kotlin/dev/inmo/plagubot/HelloPlugin.kt @@ -5,16 +5,13 @@ import dev.inmo.tgbotapi.extensions.api.bot.getMe import dev.inmo.tgbotapi.extensions.api.send.reply import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand -import kotlinx.serialization.* +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject import org.jetbrains.exposed.sql.Database import org.koin.core.Koin -import org.koin.core.KoinApplication -import org.koin.core.component.KoinComponent -import org.koin.core.component.get import org.koin.core.module.Module -import org.koin.dsl.module @Serializable @SerialName("Hello") diff --git a/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt b/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt index 513f561..b850b49 100644 --- a/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt +++ b/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt @@ -1,11 +1,14 @@ package dev.inmo.plagubot import dev.inmo.kslog.common.* +import dev.inmo.micro_utils.common.Warning import dev.inmo.micro_utils.coroutines.runCatchingSafely -import dev.inmo.plagubot.config.* +import dev.inmo.plagubot.config.Config +import dev.inmo.plagubot.config.defaultJsonFormat import dev.inmo.tgbotapi.bot.ktor.telegramBot import dev.inmo.tgbotapi.extensions.api.webhook.deleteWebhook -import dev.inmo.tgbotapi.extensions.behaviour_builder.* +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviour import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.startGettingOfUpdatesByLongPolling import kotlinx.coroutines.* import kotlinx.serialization.Serializable @@ -18,12 +21,14 @@ import org.koin.core.context.GlobalContext import org.koin.core.module.Module import org.koin.core.scope.Scope import org.koin.dsl.module -import java.util.logging.Level -import java.util.logging.Logger val Scope.plagubot: PlaguBot get() = get() +val Koin.plagubot: PlaguBot + get() = get() + +@OptIn(Warning::class) @Serializable data class PlaguBot( private val json: JsonObject, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4bb0c19..1b225d8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,9 +4,9 @@ kt = "1.6.21" kt-serialization = "1.3.3" kt-coroutines = "1.6.2" -microutils = "0.11.0" -tgbotapi = "2.0.2" -kslog = "0.3.0" +microutils = "0.11.3" +tgbotapi = "2.0.3" +kslog = "0.3.1" jb-exposed = "0.38.2" jb-dokka = "1.6.21"