diff --git a/CHANGELOG.md b/CHANGELOG.md index 407c1b9a55..cf6154cc1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,15 @@ ### 0.27.4 +* `TelegramBotAPI-extensions-utils`: + * Several extensions for updates was added: + * `onlyBaseMessageUpdates` + * `onlySentMessageUpdates` + * `onlyEditMessageUpdates` + * `onlyMediaGroupsUpdates` + * `onlySentMediaGroupUpdates` + * `onlyEditMediaGroupUpdates` + ### 0.27.3 * `TelegramBotAPI`: diff --git a/TelegramBotAPI-extensions-utils/README.md b/TelegramBotAPI-extensions-utils/README.md index e2078e7f8b..b5b17083d1 100644 --- a/TelegramBotAPI-extensions-utils/README.md +++ b/TelegramBotAPI-extensions-utils/README.md @@ -166,6 +166,32 @@ application without creating of new one server (as it is happening in `startList There are several filters for flows. +#### Updates + +In the next table it is supposed that you are using some `Flow` with type from `Base type of update` and apply +extension `Extension` and will get `Flow` with type from `Result type of update` column. + +| Base type of update | Extension | Result type of update | +| ------------------- | --------- | --------------------- | +| `Update` | `onlyBaseMessageUpdates` | `BaseMessageUpdate` | +| | | | +| `BaseMessageUpdate` | `onlySentMessageUpdates` | `BaseSentMessageUpdate` | +| `BaseMessageUpdate` | `onlyEditMessageUpdates` | `BaseEditMessageUpdate` | +| `BaseMessageUpdate` | `onlyMediaGroupsUpdates` | `MediaGroupUpdate` | +| | | | +| `MediaGroupUpdate` | `onlySentMediaGroupUpdates` | `SentMediaGroupUpdate` | +| `MediaGroupUpdate` | `onlyEditMediaGroupUpdates` | `EditMediaGroupUpdate` | + +All of these extensions was made for more simple work with the others: + +```kotlin +val flow: Flow = ...; // here we are getting flow from somewhere, + // for example, FlowsUpdatesFilter#messageFlow +flow.onlySentMessageUpdates().filterExactCommands(Regex("start")) +``` + +Here we have used filter `filterExactCommands` which will pass only `ContentMessage` with only one command `start` + #### Sent messages All sent messages can be filtered for three types: diff --git a/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/updates/BaseMessagesUpdatesConversations.kt b/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/updates/BaseMessagesUpdatesConversations.kt new file mode 100644 index 0000000000..1280b4a397 --- /dev/null +++ b/TelegramBotAPI-extensions-utils/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/extensions/utils/updates/BaseMessagesUpdatesConversations.kt @@ -0,0 +1,49 @@ +package com.github.insanusmokrassar.TelegramBotAPI.extensions.utils.updates + +import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.* +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.mapNotNull + +fun Flow.onlyBaseMessageUpdates(): Flow = mapNotNull { + it as? BaseMessageUpdate +} + +/** + * Converts flow to [Flow] of [BaseSentMessageUpdate] + */ +fun Flow.onlySentMessageUpdates(): Flow = mapNotNull { + it as? BaseSentMessageUpdate +} + +/** + * Converts flow to [Flow] of [BaseSentMessageUpdate] + */ +fun Flow.onlyEditMessageUpdates(): Flow = mapNotNull { + it as? BaseEditMessageUpdate +} + +/** + * Converts flow to [Flow] of [MediaGroupUpdate]. Please, remember that it could be either [EditMediaGroupUpdate] + * or [SentMediaGroupUpdate] + * + * @see onlySentMediaGroupUpdates + * @see onlyEditMediaGroupUpdates + */ +fun Flow.onlyMediaGroupsUpdates(): Flow = mapNotNull { + it as? MediaGroupUpdate +} + +/** + * Converts flow to [Flow] of [SentMediaGroupUpdate] + */ +fun Flow.onlySentMediaGroupUpdates(): Flow = mapNotNull { + it as? SentMediaGroupUpdate +} + +/** + * Converts flow to [Flow] of [EditMediaGroupUpdate] + */ +fun Flow.onlyEditMediaGroupUpdates(): Flow = mapNotNull { + it as? EditMediaGroupUpdate +}