diff --git a/CHANGELOG.md b/CHANGELOG.md index dc13c4c456..98e10f58f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ * `Core`: * Fix of [#272](https://github.com/InsanusMokrassar/TelegramBotAPI/issues/272) +* `Utils`: + * Fix of [#273](https://github.com/InsanusMokrassar/TelegramBotAPI/issues/273) ## 0.32.0 diff --git a/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/CommonMessageConversations.kt b/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/CommonMessageConversations.kt index 2909aa9637..dfda0819a1 100644 --- a/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/CommonMessageConversations.kt +++ b/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/CommonMessageConversations.kt @@ -5,6 +5,17 @@ import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent import dev.inmo.tgbotapi.types.message.content.abstracts.PossiblySentViaBotCommonMessage import kotlinx.coroutines.flow.* + +@Suppress("UNCHECKED_CAST") +inline fun CommonMessage<*>.withContent() = if (content is T) { + this as CommonMessage +} else { + null +} + +@Suppress("UNCHECKED_CAST") +inline fun CommonMessage<*>.requireWithContent() = this as CommonMessage + /** * Simple factory to convert [ContentMessage] to a [CommonMessage] */ diff --git a/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ContentMessageConversations.kt b/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ContentMessageConversations.kt index ce980fe93a..0bec218656 100644 --- a/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ContentMessageConversations.kt +++ b/tgbotapi.extensions.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ContentMessageConversations.kt @@ -9,6 +9,21 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.mapNotNull import kotlin.reflect.KClass +@Suppress("UNCHECKED_CAST") +inline fun ContentMessage<*>.withContent() = if (content is T) { + this as ContentMessage +} else { + null +} + +@Suppress("UNCHECKED_CAST") +inline fun ContentMessage<*>.requireWithContent() = this as ContentMessage + +private inline fun Flow>.withContentType() = mapNotNull { + it.withContent() +} + +@Deprecated("This method will be removed in next major update") fun Flow>.withContentType(contentType: KClass) = mapNotNull { if (contentType.isInstance(it.content)) { @Suppress("UNCHECKED_CAST") @@ -18,19 +33,19 @@ fun Flow>.withContentType(contentType: KC } } -fun Flow>.onlyAnimationContentMessages() = withContentType(AnimationContent::class) -fun Flow>.onlyAudioContentMessages() = withContentType(AudioContent::class) -fun Flow>.onlyContactContentMessages() = withContentType(ContactContent::class) -fun Flow>.onlyDiceContentMessages() = withContentType(DiceContent::class) -fun Flow>.onlyDocumentContentMessages() = withContentType(DocumentContent::class) -fun Flow>.onlyGameContentMessages() = withContentType(GameContent::class) -fun Flow>.onlyInvoiceContentMessages() = withContentType(InvoiceContent::class) -fun Flow>.onlyLocationContentMessages() = withContentType(LocationContent::class) -fun Flow>.onlyPhotoContentMessages() = withContentType(PhotoContent::class) -fun Flow>.onlyPollContentMessages() = withContentType(PollContent::class) -fun Flow>.onlyStickerContentMessages() = withContentType(StickerContent::class) -fun Flow>.onlyTextContentMessages() = withContentType(TextContent::class) -fun Flow>.onlyVenueContentMessages() = withContentType(VenueContent::class) -fun Flow>.onlyVideoContentMessages() = withContentType(VideoContent::class) -fun Flow>.onlyVideoNoteContentMessages() = withContentType(VideoNoteContent::class) -fun Flow>.onlyVoiceContentMessages() = withContentType(VoiceContent::class) +fun Flow>.onlyAnimationContentMessages() = withContentType() +fun Flow>.onlyAudioContentMessages() = withContentType() +fun Flow>.onlyContactContentMessages() = withContentType() +fun Flow>.onlyDiceContentMessages() = withContentType() +fun Flow>.onlyDocumentContentMessages() = withContentType() +fun Flow>.onlyGameContentMessages() = withContentType() +fun Flow>.onlyInvoiceContentMessages() = withContentType() +fun Flow>.onlyLocationContentMessages() = withContentType() +fun Flow>.onlyPhotoContentMessages() = withContentType() +fun Flow>.onlyPollContentMessages() = withContentType() +fun Flow>.onlyStickerContentMessages() = withContentType() +fun Flow>.onlyTextContentMessages() = withContentType() +fun Flow>.onlyVenueContentMessages() = withContentType() +fun Flow>.onlyVideoContentMessages() = withContentType() +fun Flow>.onlyVideoNoteContentMessages() = withContentType() +fun Flow>.onlyVoiceContentMessages() = withContentType()