mirror of
https://github.com/InsanusMokrassar/PlaguBot.git
synced 2026-01-01 10:59:16 +00:00
Compare commits
4 Commits
81ca68dc06
...
2.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
| ec2852beb0 | |||
| 6c2cfbf06f | |||
| caa028b799 | |||
| 53667fa8b8 |
@@ -3,9 +3,13 @@
|
|||||||
## 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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -102,7 +101,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" }
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ kt-serialization = "1.4.0-RC"
|
|||||||
kt-coroutines = "1.6.4"
|
kt-coroutines = "1.6.4"
|
||||||
|
|
||||||
microutils = "0.12.1"
|
microutils = "0.12.1"
|
||||||
tgbotapi = "3.1.0"
|
tgbotapi = "3.1.1"
|
||||||
kslog = "0.5.0"
|
kslog = "0.5.0"
|
||||||
|
|
||||||
jb-exposed = "0.39.2"
|
jb-exposed = "0.39.2"
|
||||||
|
|||||||
Reference in New Issue
Block a user