1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-06-26 11:38:09 +00:00
tgbotapi/tgbotapi.extensions.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/triggers_handling/CommandHandling.kt

60 lines
2.9 KiB
Kotlin
Raw Normal View History

package dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling
2021-01-06 17:06:48 +00:00
2021-04-28 13:59:30 +00:00
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextAndTypeReceiver
import dev.inmo.tgbotapi.extensions.utils.asBotCommandTextSource
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
2021-01-06 17:06:48 +00:00
import dev.inmo.tgbotapi.types.message.content.TextContent
import kotlinx.coroutines.Job
2021-01-06 17:06:48 +00:00
2021-01-07 12:11:01 +00:00
suspend fun BehaviourContext.command(
2021-01-06 17:06:48 +00:00
commandRegex: Regex,
requireOnlyCommandInMessage: Boolean = true,
2021-01-07 12:11:01 +00:00
includeFilterByChatInBehaviourSubContext: Boolean = true,
2021-04-03 08:51:21 +00:00
additionalFilter: CommonMessageFilter<TextContent>? = null,
performInParallel: Boolean = true,
scenarioReceiver: BehaviourContextAndTypeReceiver<Unit, CommonMessage<TextContent>>
): Job = onText(
2021-01-07 12:11:01 +00:00
includeFilterByChatInBehaviourSubContext,
{ message ->
val content = message.content
val textSources = content.textSources
val sizeRequirement = if (requireOnlyCommandInMessage) {
textSources.size == 1
} else {
true
2021-01-06 17:06:48 +00:00
}
2021-04-03 08:51:21 +00:00
sizeRequirement && textSources.any {
commandRegex.matches(it.asBotCommandTextSource() ?.command ?: return@any false)
} && (additionalFilter ?.invoke(message) != false)
},
performInParallel,
scenarioReceiver
)
2021-01-19 12:50:45 +00:00
suspend fun BehaviourContext.command(
command: String,
requireOnlyCommandInMessage: Boolean = true,
includeFilterByChatInBehaviourSubContext: Boolean = true,
2021-04-03 08:51:21 +00:00
additionalFilter: CommonMessageFilter<TextContent>? = null,
performInParallel: Boolean = true,
2021-01-19 12:50:45 +00:00
scenarioReceiver: BehaviourContextAndTypeReceiver<Unit, CommonMessage<TextContent>>
) = command(command.toRegex(), requireOnlyCommandInMessage, includeFilterByChatInBehaviourSubContext, additionalFilter, performInParallel, scenarioReceiver)
2021-01-06 17:06:48 +00:00
2021-01-07 12:11:01 +00:00
suspend inline fun BehaviourContext.onCommand(
commandRegex: Regex,
requireOnlyCommandInMessage: Boolean = true,
includeFilterByChatInBehaviourSubContext: Boolean = true,
2021-04-03 08:51:21 +00:00
noinline additionalFilter: CommonMessageFilter<TextContent>? = null,
performInParallel: Boolean = true,
noinline scenarioReceiver: BehaviourContextAndTypeReceiver<Unit, CommonMessage<TextContent>>
): Job = command(commandRegex, requireOnlyCommandInMessage, includeFilterByChatInBehaviourSubContext, additionalFilter, performInParallel, scenarioReceiver)
2021-01-19 12:50:45 +00:00
suspend inline fun BehaviourContext.onCommand(
command: String,
requireOnlyCommandInMessage: Boolean = true,
includeFilterByChatInBehaviourSubContext: Boolean = true,
2021-04-03 08:51:21 +00:00
noinline additionalFilter: CommonMessageFilter<TextContent>? = null,
performInParallel: Boolean = true,
2021-01-19 12:50:45 +00:00
noinline scenarioReceiver: BehaviourContextAndTypeReceiver<Unit, CommonMessage<TextContent>>
): Job = onCommand(command.toRegex(), requireOnlyCommandInMessage, includeFilterByChatInBehaviourSubContext, additionalFilter, performInParallel, scenarioReceiver)