mirror of
https://github.com/InsanusMokrassar/PlaguBot.git
synced 2024-11-21 23:23:47 +00:00
a lot of improvements
This commit is contained in:
parent
bb06ba1ca7
commit
3b507a5668
@ -2,7 +2,11 @@
|
|||||||
|
|
||||||
## 9.3.0
|
## 9.3.0
|
||||||
|
|
||||||
* Add opportunity to use config in setup bot client
|
* `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
|
## 9.2.0
|
||||||
|
|
||||||
|
@ -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.fsm.common.managers.*
|
||||||
import dev.inmo.micro_utils.koin.getAllDistinct
|
import dev.inmo.micro_utils.koin.getAllDistinct
|
||||||
import dev.inmo.plagubot.config.*
|
import dev.inmo.plagubot.config.*
|
||||||
|
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||||
import dev.inmo.tgbotapi.bot.ktor.KtorRequestsExecutorBuilder
|
import dev.inmo.tgbotapi.bot.ktor.KtorRequestsExecutorBuilder
|
||||||
import dev.inmo.tgbotapi.bot.ktor.telegramBot
|
import dev.inmo.tgbotapi.bot.ktor.telegramBot
|
||||||
import dev.inmo.tgbotapi.extensions.api.webhook.deleteWebhook
|
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 dev.inmo.tgbotapi.extensions.utils.updates.retrieving.startGettingOfUpdatesByLongPolling
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlinx.serialization.Transient
|
|
||||||
import kotlinx.serialization.json.JsonObject
|
import kotlinx.serialization.json.JsonObject
|
||||||
import org.jetbrains.exposed.sql.Database
|
import org.jetbrains.exposed.sql.Database
|
||||||
import org.koin.core.Koin
|
import org.koin.core.Koin
|
||||||
@ -37,18 +37,10 @@ data class PlaguBot(
|
|||||||
private val json: JsonObject,
|
private val json: JsonObject,
|
||||||
private val config: Config
|
private val config: Config
|
||||||
) : Plugin {
|
) : Plugin {
|
||||||
@Transient
|
override fun KtorRequestsExecutorBuilder.setupBotClient(scope: Scope, params: JsonObject) {
|
||||||
private val bot = telegramBot(
|
|
||||||
token = config.botToken,
|
|
||||||
apiUrl = config.botApiServer
|
|
||||||
) {
|
|
||||||
setupBotClient(json)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun KtorRequestsExecutorBuilder.setupBotClient(params: JsonObject) {
|
|
||||||
config.botPlugins.forEach {
|
config.botPlugins.forEach {
|
||||||
with(it) {
|
with(it) {
|
||||||
setupBotClient(params)
|
setupBotClient(scope, params)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,7 +59,16 @@ data class PlaguBot(
|
|||||||
single { this@PlaguBot.config.databaseConfig.database }
|
single { this@PlaguBot.config.databaseConfig.database }
|
||||||
single { defaultJsonFormat }
|
single { defaultJsonFormat }
|
||||||
single { this@PlaguBot }
|
single { this@PlaguBot }
|
||||||
single { bot }
|
single {
|
||||||
|
val config = get<Config>()
|
||||||
|
telegramBot(
|
||||||
|
token = config.botToken,
|
||||||
|
testServer = config.testServer,
|
||||||
|
apiUrl = config.botApiServer
|
||||||
|
) {
|
||||||
|
setupBotClient(this@single, json)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun Module.setupDI(database: Database, params: JsonObject) {
|
override fun Module.setupDI(database: Database, params: JsonObject) {
|
||||||
@ -124,7 +125,7 @@ data class PlaguBot(
|
|||||||
* This method will create an [Job] which will be the main [Job] of ran instance
|
* This method will create an [Job] which will be the main [Job] of ran instance
|
||||||
*/
|
*/
|
||||||
suspend fun start(
|
suspend fun start(
|
||||||
scope: CoroutineScope = CoroutineScope(Dispatchers.IO)
|
scope: CoroutineScope = CoroutineScope(Dispatchers.Default)
|
||||||
): Job {
|
): Job {
|
||||||
logger.i("Start initialization")
|
logger.i("Start initialization")
|
||||||
val koinApp = KoinApplication.init()
|
val koinApp = KoinApplication.init()
|
||||||
@ -141,6 +142,7 @@ data class PlaguBot(
|
|||||||
lateinit var behaviourContext: BehaviourContext
|
lateinit var behaviourContext: BehaviourContext
|
||||||
val onStartContextsConflictResolver by lazy { koinApp.koin.getAllDistinct<OnStartContextsConflictResolver>() }
|
val onStartContextsConflictResolver by lazy { koinApp.koin.getAllDistinct<OnStartContextsConflictResolver>() }
|
||||||
val onUpdateContextsConflictResolver by lazy { koinApp.koin.getAllDistinct<OnUpdateContextsConflictResolver>() }
|
val onUpdateContextsConflictResolver by lazy { koinApp.koin.getAllDistinct<OnUpdateContextsConflictResolver>() }
|
||||||
|
val bot = koinApp.koin.get<TelegramBot>()
|
||||||
bot.buildBehaviourWithFSM(
|
bot.buildBehaviourWithFSM(
|
||||||
scope = scope,
|
scope = scope,
|
||||||
defaultExceptionsHandler = {
|
defaultExceptionsHandler = {
|
||||||
|
@ -14,7 +14,8 @@ data class Config(
|
|||||||
val plugins: List<StartPlugin>,
|
val plugins: List<StartPlugin>,
|
||||||
@SerialName("database")
|
@SerialName("database")
|
||||||
val databaseConfig: DatabaseConfig = DatabaseConfig(),
|
val databaseConfig: DatabaseConfig = DatabaseConfig(),
|
||||||
val botApiServer: String = telegramBotAPIDefaultUrl
|
val botApiServer: String = telegramBotAPIDefaultUrl,
|
||||||
|
val testServer: Boolean = false
|
||||||
) {
|
) {
|
||||||
val botPlugins = plugins.filterIsInstance<Plugin>()
|
val botPlugins = plugins.filterIsInstance<Plugin>()
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import kotlinx.serialization.json.JsonObject
|
|||||||
import org.jetbrains.exposed.sql.Database
|
import org.jetbrains.exposed.sql.Database
|
||||||
import org.koin.core.Koin
|
import org.koin.core.Koin
|
||||||
import org.koin.core.module.Module
|
import org.koin.core.module.Module
|
||||||
|
import org.koin.core.scope.Scope
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **ANY REALIZATION OF [Plugin] MUST HAVE CONSTRUCTOR WITH ABSENCE OF INCOMING PARAMETERS**
|
* **ANY REALIZATION OF [Plugin] MUST HAVE CONSTRUCTOR WITH ABSENCE OF INCOMING PARAMETERS**
|
||||||
@ -20,8 +21,16 @@ import org.koin.core.module.Module
|
|||||||
*/
|
*/
|
||||||
@Serializable(PluginSerializer::class)
|
@Serializable(PluginSerializer::class)
|
||||||
interface Plugin : StartPlugin {
|
interface Plugin : StartPlugin {
|
||||||
|
@Deprecated("Deprecated in favor to setupBotClient with arguments")
|
||||||
fun KtorRequestsExecutorBuilder.setupBotClient() {}
|
fun KtorRequestsExecutorBuilder.setupBotClient() {}
|
||||||
fun KtorRequestsExecutorBuilder.setupBotClient(params: JsonObject) = 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
|
* This method will be called when this plugin should configure di module based on the incoming params
|
||||||
|
Loading…
Reference in New Issue
Block a user