From 6c0d9613395e6380df9ad792c1868349a6f144b5 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 11 Aug 2025 01:08:55 +0600 Subject: [PATCH 1/3] temporal improvements for fsm --- FSMBot/src/main/kotlin/SimpleFSMBot.kt | 36 ++++++++++++++++++-------- gradle.properties | 4 +-- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/FSMBot/src/main/kotlin/SimpleFSMBot.kt b/FSMBot/src/main/kotlin/SimpleFSMBot.kt index 53751f8..0ec7fb7 100644 --- a/FSMBot/src/main/kotlin/SimpleFSMBot.kt +++ b/FSMBot/src/main/kotlin/SimpleFSMBot.kt @@ -1,10 +1,13 @@ +import dev.inmo.micro_utils.coroutines.awaitFirst import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions import dev.inmo.micro_utils.fsm.common.State import dev.inmo.tgbotapi.extensions.api.send.send import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitAnyContentMessage +import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitCommandMessage import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndFSMAndStartLongPolling import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.command import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage +import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.containsCommand import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithArgs import dev.inmo.tgbotapi.extensions.utils.extensions.sameThread import dev.inmo.tgbotapi.extensions.utils.textContentOrNull @@ -13,10 +16,12 @@ import dev.inmo.tgbotapi.types.IdChatIdentifier import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage import dev.inmo.tgbotapi.types.message.content.TextContent import dev.inmo.tgbotapi.utils.botCommand +import dev.inmo.tgbotapi.utils.firstOf import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map sealed interface BotState : State data class ExpectContentOrStopState(override val context: IdChatIdentifier, val sourceMessage: CommonMessage) : BotState @@ -48,19 +53,28 @@ suspend fun main(args: Array) { +"Send me some content or " + botCommand("stop") + " if you want to stop sending" } - val contentMessage = waitAnyContentMessage().filter { message -> - message.sameThread(it.sourceMessage) - }.first() + val contentMessage = firstOf( + { + waitCommandMessage("stop").filter { message -> + message.sameThread(it.sourceMessage) + }.first() + null + }, + { + waitAnyContentMessage().filter { message -> + message.sameThread(it.sourceMessage) + }.filter { + it.withContentOrNull() ?.content ?.textSources ?.run { + containsCommand("stop") + } != true + }.first() + } + ) ?: return@strictlyOn StopState(it.context) + val content = contentMessage.content - when { - content is TextContent && content.text == "/stop" - || content is TextContent && content.parseCommandsWithArgs().keys.contains("stop") -> StopState(it.context) - else -> { - execute(content.createResend(it.context)) - it - } - } + execute(content.createResend(it.context)) + it } strictlyOn { send(it.context) { +"You have stopped sending of content" } diff --git a/gradle.properties b/gradle.properties index b6a28ee..e0c3df5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,8 +6,8 @@ kotlin.daemon.jvmargs=-Xmx3g -Xms500m kotlin_version=2.2.0 -telegram_bot_api_version=27.1.2 -micro_utils_version=0.26.1 +telegram_bot_api_version=28.0.0-rc5 +micro_utils_version=0.26.2 serialization_version=1.9.0 ktor_version=3.2.3 compose_version=1.8.2 From 70aca529609fe9fd1e0cf55f95bab7967cb0adb3 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 11 Aug 2025 15:21:28 +0600 Subject: [PATCH 2/3] update dependency --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index e0c3df5..1445ef1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ kotlin.daemon.jvmargs=-Xmx3g -Xms500m kotlin_version=2.2.0 -telegram_bot_api_version=28.0.0-rc5 +telegram_bot_api_version=28.0.0-branch_28.0.0-build2916 micro_utils_version=0.26.2 serialization_version=1.9.0 ktor_version=3.2.3 From e2d56a4d80809449e27bd39485bbe8341e652516 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 11 Aug 2025 15:56:20 +0600 Subject: [PATCH 3/3] finalize changes --- FSMBot/src/main/kotlin/SimpleFSMBot.kt | 7 ++++--- gradle.properties | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/FSMBot/src/main/kotlin/SimpleFSMBot.kt b/FSMBot/src/main/kotlin/SimpleFSMBot.kt index 0ec7fb7..0607274 100644 --- a/FSMBot/src/main/kotlin/SimpleFSMBot.kt +++ b/FSMBot/src/main/kotlin/SimpleFSMBot.kt @@ -64,9 +64,10 @@ suspend fun main(args: Array) { waitAnyContentMessage().filter { message -> message.sameThread(it.sourceMessage) }.filter { - it.withContentOrNull() ?.content ?.textSources ?.run { - containsCommand("stop") - } != true + containsCommand( + "stop", + it.withContentOrNull() ?.content ?.textSources ?: return@filter false + ) == false }.first() } ) ?: return@strictlyOn StopState(it.context) diff --git a/gradle.properties b/gradle.properties index 1445ef1..8df69e8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ kotlin.daemon.jvmargs=-Xmx3g -Xms500m kotlin_version=2.2.0 -telegram_bot_api_version=28.0.0-branch_28.0.0-build2916 +telegram_bot_api_version=28.0.0 micro_utils_version=0.26.2 serialization_version=1.9.0 ktor_version=3.2.3