diff --git a/CHANGELOG.md b/CHANGELOG.md index 48e54f5..f3fbbe7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 9.3.0 + +* `Bot`: + * Now bot is not built-in into `PlaguBot` and setted up as all other `Koin` dependencies + * Now it is possible to use `testServer` parameter for bots out of the box +* `Plugin`: + * New method `setupBotClient` with arguments to let plugin setup bot more freely + ## 9.2.0 * `Versions`: diff --git a/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt b/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt index 53312f8..1258264 100644 --- a/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt +++ b/bot/src/main/kotlin/dev/inmo/plagubot/PlaguBot.kt @@ -8,6 +8,7 @@ import dev.inmo.micro_utils.fsm.common.StatesManager import dev.inmo.micro_utils.fsm.common.managers.* import dev.inmo.micro_utils.koin.getAllDistinct import dev.inmo.plagubot.config.* +import dev.inmo.tgbotapi.bot.TelegramBot import dev.inmo.tgbotapi.bot.ktor.KtorRequestsExecutorBuilder import dev.inmo.tgbotapi.bot.ktor.telegramBot import dev.inmo.tgbotapi.extensions.api.webhook.deleteWebhook @@ -15,7 +16,6 @@ import dev.inmo.tgbotapi.extensions.behaviour_builder.* import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.startGettingOfUpdatesByLongPolling import kotlinx.coroutines.* import kotlinx.serialization.Serializable -import kotlinx.serialization.Transient import kotlinx.serialization.json.JsonObject import org.jetbrains.exposed.sql.Database import org.koin.core.Koin @@ -37,14 +37,13 @@ data class PlaguBot( private val json: JsonObject, private val config: Config ) : Plugin { - @Transient - private val bot = telegramBot( - token = config.botToken, - apiUrl = config.botApiServer - ) { - setupBotClient() + override fun KtorRequestsExecutorBuilder.setupBotClient(scope: Scope, params: JsonObject) { + config.botPlugins.forEach { + with(it) { + setupBotClient(scope, params) + } + } } - override fun KtorRequestsExecutorBuilder.setupBotClient() { config.botPlugins.forEach { with(it) { @@ -60,7 +59,16 @@ data class PlaguBot( single { this@PlaguBot.config.databaseConfig.database } single { defaultJsonFormat } single { this@PlaguBot } - single { bot } + single { + val config = get() + telegramBot( + token = config.botToken, + testServer = config.testServer, + apiUrl = config.botApiServer + ) { + setupBotClient(this@single, json) + } + } } override fun Module.setupDI(database: Database, params: JsonObject) { @@ -117,7 +125,7 @@ data class PlaguBot( * This method will create an [Job] which will be the main [Job] of ran instance */ suspend fun start( - scope: CoroutineScope = CoroutineScope(Dispatchers.IO) + scope: CoroutineScope = CoroutineScope(Dispatchers.Default) ): Job { logger.i("Start initialization") val koinApp = KoinApplication.init() @@ -134,6 +142,7 @@ data class PlaguBot( lateinit var behaviourContext: BehaviourContext val onStartContextsConflictResolver by lazy { koinApp.koin.getAllDistinct() } val onUpdateContextsConflictResolver by lazy { koinApp.koin.getAllDistinct() } + val bot = koinApp.koin.get() bot.buildBehaviourWithFSM( scope = scope, defaultExceptionsHandler = { 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 a38ffd2..2344e20 100644 --- a/bot/src/main/kotlin/dev/inmo/plagubot/config/Config.kt +++ b/bot/src/main/kotlin/dev/inmo/plagubot/config/Config.kt @@ -14,7 +14,8 @@ data class Config( val plugins: List, @SerialName("database") val databaseConfig: DatabaseConfig = DatabaseConfig(), - val botApiServer: String = telegramBotAPIDefaultUrl + val botApiServer: String = telegramBotAPIDefaultUrl, + val testServer: Boolean = false ) { val botPlugins = plugins.filterIsInstance() } diff --git a/gradle.properties b/gradle.properties index de3e337..68d24b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ kotlin.js.generate.externals=true kotlin.incremental=true group=dev.inmo -version=9.2.0 +version=9.3.0 diff --git a/plugin/src/main/kotlin/dev/inmo/plagubot/Plugin.kt b/plugin/src/main/kotlin/dev/inmo/plagubot/Plugin.kt index bc5af6c..621e151 100644 --- a/plugin/src/main/kotlin/dev/inmo/plagubot/Plugin.kt +++ b/plugin/src/main/kotlin/dev/inmo/plagubot/Plugin.kt @@ -10,6 +10,7 @@ import kotlinx.serialization.json.JsonObject import org.jetbrains.exposed.sql.Database import org.koin.core.Koin import org.koin.core.module.Module +import org.koin.core.scope.Scope /** * **ANY REALIZATION OF [Plugin] MUST HAVE CONSTRUCTOR WITH ABSENCE OF INCOMING PARAMETERS** @@ -20,8 +21,17 @@ import org.koin.core.module.Module */ @Serializable(PluginSerializer::class) interface Plugin : StartPlugin { + @Deprecated("Deprecated in favor to setupBotClient with arguments") fun KtorRequestsExecutorBuilder.setupBotClient() {} + /** + * Will be called on stage of bot setup + * + * @param scope The scope of [org.koin.core.module.Module.single] of bot definition + * @param params Params (in fact, the whole bot config) + */ + fun KtorRequestsExecutorBuilder.setupBotClient(scope: Scope, params: JsonObject) = setupBotClient() + /** * This method will be called when this plugin should configure di module based on the incoming params */