Compare commits

...

10 Commits

5 changed files with 56 additions and 14 deletions

View File

@@ -1,11 +1,28 @@
# Changelog # Changelog
## 2.2.0
* `Versions`:
* `serialization`: `1.4.0`
* `tgbotapi`: `3.2.0`
* `microutils`: `0.12.4`
* `kslog`: `0.5.1`
## 2.1.1
* `Bot`:
* Now it is possible to get bot from `koin`
## 2.1.0 ## 2.1.0
* `Versions`: * `Versions`:
* `tgbotapi`: `3.1.0` * `tgbotapi`: `3.1.1`
* `ktor`: `2.1.0` * `ktor`: `2.1.0`
* `microutils`: `0.12.1` * `microutils`: `0.12.1`
* `Plugins`:
* New fum of `Plugin` with `BehaviourContextWithFSM` receiver
* `Bot`:
* Now bot uses `buildBehaviourWithFSM` to be able to setup bot with FSM
## 2.0.0 ## 2.0.0

View File

@@ -5,10 +5,14 @@ import dev.inmo.micro_utils.fsm.common.State
import dev.inmo.plagubot.HelloPlugin.setupBotPlugin import dev.inmo.plagubot.HelloPlugin.setupBotPlugin
import dev.inmo.tgbotapi.extensions.api.bot.getMe import dev.inmo.tgbotapi.extensions.api.bot.getMe
import dev.inmo.tgbotapi.extensions.api.send.reply import dev.inmo.tgbotapi.extensions.api.send.reply
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext import dev.inmo.tgbotapi.extensions.api.send.sendMessage
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextWithFSM import dev.inmo.tgbotapi.extensions.behaviour_builder.*
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitText
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitTextMessage
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onUnhandledCommand import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onUnhandledCommand
import dev.inmo.tgbotapi.types.ChatId
import kotlinx.coroutines.flow.first
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
@@ -28,14 +32,34 @@ object HelloPlugin : Plugin {
override fun Module.setupDI(database: Database, params: JsonObject) { override fun Module.setupDI(database: Database, params: JsonObject) {
single { single {
get<Json>().decodeFromJsonElement(HelloPluginConfig.serializer(), params["helloPlugin"] ?: return@single null) get<Json>().decodeFromJsonElement(HelloPluginConfig.serializer(), params["helloPlugin"] ?: return@single null)
} }
} }
override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) { private sealed interface InternalFSMState : State {
logger.d { koin.get<HelloPluginConfig>().print } override val context: ChatId
data class DidntSaidHello(override val context: ChatId) : InternalFSMState
data class SaidHelloOnce(override val context: ChatId) : InternalFSMState
}
override suspend fun BehaviourContextWithFSM<State>.setupBotPlugin(koin: Koin) {
val toPrint = koin.getOrNull<HelloPluginConfig>() ?.print ?: "Hello :)"
logger.d { toPrint }
logger.dS { getMe().toString() } logger.dS { getMe().toString() }
onCommand("hello_world") { onCommand("hello_world") {
reply(it, "Hello :)") startChain(InternalFSMState.DidntSaidHello(it.chat.id))
}
strictlyOn { state: InternalFSMState.DidntSaidHello ->
sendMessage(state.context, toPrint)
InternalFSMState.SaidHelloOnce(state.context)
}
strictlyOn { state: InternalFSMState.SaidHelloOnce ->
val message = waitTextMessage().first()
reply(message, "Sorry, I can answer only this: $toPrint")
InternalFSMState.SaidHelloOnce(state.context)
} }
} }
} }

View File

@@ -5,8 +5,7 @@ import dev.inmo.micro_utils.common.Warning
import dev.inmo.micro_utils.coroutines.runCatchingSafely import dev.inmo.micro_utils.coroutines.runCatchingSafely
import dev.inmo.micro_utils.fsm.common.State import dev.inmo.micro_utils.fsm.common.State
import dev.inmo.micro_utils.fsm.common.StatesManager import dev.inmo.micro_utils.fsm.common.StatesManager
import dev.inmo.micro_utils.fsm.common.managers.DefaultStatesManager import dev.inmo.micro_utils.fsm.common.managers.*
import dev.inmo.micro_utils.fsm.common.managers.InMemoryDefaultStatesManagerRepo
import dev.inmo.plagubot.config.* import dev.inmo.plagubot.config.*
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
@@ -46,6 +45,7 @@ data class PlaguBot(
single { config.databaseConfig.database } single { config.databaseConfig.database }
single { defaultJsonFormat } single { defaultJsonFormat }
single { this@PlaguBot } single { this@PlaguBot }
single { bot }
includes( includes(
config.plugins.mapNotNull { config.plugins.mapNotNull {
@@ -102,7 +102,8 @@ data class PlaguBot(
logger.e("Something went wrong", it) logger.e("Something went wrong", it)
}, },
statesManager = koinApp.koin.getOrNull<StatesManager<State>>() ?: DefaultStatesManager( statesManager = koinApp.koin.getOrNull<StatesManager<State>>() ?: DefaultStatesManager(
InMemoryDefaultStatesManagerRepo<State>() koinApp.koin.getOrNull<DefaultStatesManagerRepo<State>>() ?: InMemoryDefaultStatesManagerRepo<State>(),
onStartContextsConflictResolver = { _, _ -> false }
), ),
onStateHandlingErrorHandler = koinApp.koin.getOrNull<StateHandlingErrorHandler<State>>() ?: { state, e -> onStateHandlingErrorHandler = koinApp.koin.getOrNull<StateHandlingErrorHandler<State>>() ?: { state, e ->
logger.eS(e) { "Unable to handle state $state" } logger.eS(e) { "Unable to handle state $state" }

View File

@@ -5,4 +5,4 @@ kotlin.js.generate.externals=true
kotlin.incremental=true kotlin.incremental=true
group=dev.inmo group=dev.inmo
version=2.1.0 version=2.2.0

View File

@@ -1,12 +1,12 @@
[versions] [versions]
kt = "1.7.10" kt = "1.7.10"
kt-serialization = "1.4.0-RC" kt-serialization = "1.4.0"
kt-coroutines = "1.6.4" kt-coroutines = "1.6.4"
microutils = "0.12.1" microutils = "0.12.4"
tgbotapi = "3.1.0" tgbotapi = "3.2.0"
kslog = "0.5.0" kslog = "0.5.1"
jb-exposed = "0.39.2" jb-exposed = "0.39.2"
jb-dokka = "1.7.10" jb-dokka = "1.7.10"