Skip to content

Commit b00801f

Browse files
temporal improvements for fsm
1 parent ab85d3a commit b00801f

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

FSMBot/src/main/kotlin/SimpleFSMBot.kt

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import dev.inmo.micro_utils.coroutines.awaitFirst
12
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
23
import dev.inmo.micro_utils.fsm.common.State
34
import dev.inmo.tgbotapi.extensions.api.send.send
45
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitAnyContentMessage
6+
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitCommandMessage
57
import dev.inmo.tgbotapi.extensions.behaviour_builder.telegramBotWithBehaviourAndFSMAndStartLongPolling
68
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.command
79
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onContentMessage
10+
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.containsCommand
811
import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithArgs
912
import dev.inmo.tgbotapi.extensions.utils.extensions.sameThread
1013
import dev.inmo.tgbotapi.extensions.utils.textContentOrNull
@@ -13,10 +16,12 @@ import dev.inmo.tgbotapi.types.IdChatIdentifier
1316
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
1417
import dev.inmo.tgbotapi.types.message.content.TextContent
1518
import dev.inmo.tgbotapi.utils.botCommand
19+
import dev.inmo.tgbotapi.utils.firstOf
1620
import kotlinx.coroutines.CoroutineScope
1721
import kotlinx.coroutines.Dispatchers
1822
import kotlinx.coroutines.flow.filter
1923
import kotlinx.coroutines.flow.first
24+
import kotlinx.coroutines.flow.map
2025

2126
sealed interface BotState : State
2227
data class ExpectContentOrStopState(override val context: IdChatIdentifier, val sourceMessage: CommonMessage<TextContent>) : BotState
@@ -48,19 +53,28 @@ suspend fun main(args: Array<String>) {
4853
+"Send me some content or " + botCommand("stop") + " if you want to stop sending"
4954
}
5055

51-
val contentMessage = waitAnyContentMessage().filter { message ->
52-
message.sameThread(it.sourceMessage)
53-
}.first()
56+
val contentMessage = firstOf(
57+
{
58+
waitCommandMessage("stop").filter { message ->
59+
message.sameThread(it.sourceMessage)
60+
}.first()
61+
null
62+
},
63+
{
64+
waitAnyContentMessage().filter { message ->
65+
message.sameThread(it.sourceMessage)
66+
}.filter {
67+
it.withContentOrNull<TextContent>() ?.content ?.textSources ?.run {
68+
containsCommand("stop")
69+
} != true
70+
}.first()
71+
}
72+
) ?: return@strictlyOn StopState(it.context)
73+
5474
val content = contentMessage.content
5575

56-
when {
57-
content is TextContent && content.text == "/stop"
58-
|| content is TextContent && content.parseCommandsWithArgs().keys.contains("stop") -> StopState(it.context)
59-
else -> {
60-
execute(content.createResend(it.context))
61-
it
62-
}
63-
}
76+
execute(content.createResend(it.context))
77+
it
6478
}
6579
strictlyOn<StopState> {
6680
send(it.context) { +"You have stopped sending of content" }

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ kotlin.daemon.jvmargs=-Xmx3g -Xms500m
66

77

88
kotlin_version=2.2.0
9-
telegram_bot_api_version=27.1.2
10-
micro_utils_version=0.26.1
9+
telegram_bot_api_version=28.0.0-rc5
10+
micro_utils_version=0.26.2
1111
serialization_version=1.9.0
1212
ktor_version=3.2.3
1313
compose_version=1.8.2

0 commit comments

Comments
 (0)