mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-22 16:23:48 +00:00
add filterCommandsWithArgs
This commit is contained in:
parent
7183634fd6
commit
08d9d183f4
@ -48,7 +48,7 @@
|
|||||||
* `TelegramBotAPI-extensions-utils`:
|
* `TelegramBotAPI-extensions-utils`:
|
||||||
* Subproject was added
|
* Subproject was added
|
||||||
* `filterBaseMessageUpdates`, `filterSentMediaGroupUpdates` and `filterEditMediaGroupUpdates` extensions was added
|
* `filterBaseMessageUpdates`, `filterSentMediaGroupUpdates` and `filterEditMediaGroupUpdates` extensions was added
|
||||||
* `filterExactCommands` and `filterCommandsInsideTextMessages` extensions was added
|
* `filterCommandsWithArgs`, `filterExactCommands` and `filterCommandsInsideTextMessages` extensions was added
|
||||||
* `asContentMessagesFlow`, `asChatEventsFlow` and `asUnknownMessagesFlow` extensions was added
|
* `asContentMessagesFlow`, `asChatEventsFlow` and `asUnknownMessagesFlow` extensions was added
|
||||||
* `withContentType` extension was added
|
* `withContentType` extension was added
|
||||||
* `onlyAnimationContentMessages` extension was added
|
* `onlyAnimationContentMessages` extension was added
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates
|
package com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates
|
||||||
|
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.TextSource
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.onlyTextContentMessages
|
import com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.onlyTextContentMessages
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.textsources.BotCommandTextSource
|
import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.textsources.BotCommandTextSource
|
||||||
|
import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.textsources.RegularTextSource
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.fullEntitiesList
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.fullEntitiesList
|
||||||
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseSentMessageUpdate
|
import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseSentMessageUpdate
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.*
|
||||||
import kotlinx.coroutines.flow.filter
|
|
||||||
|
|
||||||
fun <T : BaseSentMessageUpdate> Flow<T>.filterExactCommands(
|
fun <T : BaseSentMessageUpdate> Flow<T>.filterExactCommands(
|
||||||
commandRegex: Regex
|
commandRegex: Regex
|
||||||
@ -20,3 +21,33 @@ fun <T : BaseSentMessageUpdate> Flow<T>.filterCommandsInsideTextMessages(
|
|||||||
(it as? BotCommandTextSource) ?.let { commandRegex.matches(it.command) } == true
|
(it as? BotCommandTextSource) ?.let { commandRegex.matches(it.command) } == true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Result [Flow] will emit all [TextSource]s to the collector ONLY IN CASE if first [TextSource] is
|
||||||
|
* [BotCommandTextSource] and its [BotCommandTextSource.command] is [Regex.matches] to incoming [commandRegex]. Internal
|
||||||
|
* behaviour contains next rules: all incoming text sources will be passed as is, [RegularTextSource] will be divided
|
||||||
|
* by " " for several [RegularTextSource] which will contains not empty args without spaces
|
||||||
|
*/
|
||||||
|
fun <T : BaseSentMessageUpdate> Flow<T>.filterCommandsWithArgs(
|
||||||
|
commandRegex: Regex
|
||||||
|
): Flow<List<TextSource>> = asContentMessagesFlow().onlyTextContentMessages().mapNotNull { contentMessage ->
|
||||||
|
val allEntities = contentMessage.content.fullEntitiesList()
|
||||||
|
(allEntities.firstOrNull() as? BotCommandTextSource) ?.let {
|
||||||
|
if (commandRegex.matches(it.command)) {
|
||||||
|
allEntities.flatMap {
|
||||||
|
when (it) {
|
||||||
|
is RegularTextSource -> it.source.split(" ").mapNotNull { regularTextSourcePart ->
|
||||||
|
if (regularTextSourcePart.isNotBlank()) {
|
||||||
|
RegularTextSource(regularTextSourcePart)
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> listOf(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user