diff --git a/CHANGELOG.md b/CHANGELOG.md index 878dba441f..faa8596f01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ * `Core`: * Add opportunity to get user link with `makeUserLink` +* `BehaviourBuilder`: + * Fixes in content waiting expectators ## 5.1.0 diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContentMessage.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContentMessage.kt index d908e016dd..fd569a204a 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContentMessage.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContentMessage.kt @@ -18,12 +18,14 @@ typealias CommonMessageToCommonMessageMapper = suspend CommonMessage.() -> @RiskFeature(lowLevelRiskFeatureMessage) suspend inline fun BehaviourContext.waitContentMessage( initRequest: Request<*>? = null, - includeMediaGroups: Boolean = true, noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow> = expectFlow( initRequest, errorFactory ) { + if (it !is BaseSentMessageUpdate) { + return@expectFlow emptyList() + } listOfNotNull((it.data as? CommonMessage<*>) ?.withContent()) } @@ -44,114 +46,169 @@ internal inline fun contentMessageConverter( if (content is T) this as CommonMessage else null } +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitContentMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = true -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitContentMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitContactMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitDiceMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitGameMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitLocationMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitLiveLocationMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitStaticLocationMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitPollMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitTextMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitVenueMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitAudioMediaGroupContentMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = true -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitAudioMediaGroupContentMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitDocumentMediaGroupContentMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = true -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitDocumentMediaGroupContentMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitMediaMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = false -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitMediaMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitAnyMediaGroupContentMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = true -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitAnyMediaGroupContentMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitVisualMediaGroupContentMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = true -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitVisualMediaGroupContentMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitTextedMediaContentMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = true -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitTextedMediaContentMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitAnimationMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitAudioMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = false -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitAudioMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitDocumentMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = false -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitDocumentMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitPhotoMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = false -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitPhotoMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitStickerMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) +@Deprecated("includeMediaGroups is deprecated and its usage will not lead to any changes") suspend fun BehaviourContext.waitVideoMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, - includeMediaGroups: Boolean = false -) = waitContentMessage(initRequest, includeMediaGroups, errorFactory) + includeMediaGroups: Boolean +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoMessage( + initRequest: Request<*>? = null, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitVideoNoteMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitVoiceMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) suspend fun BehaviourContext.waitInvoiceMessage( initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, false, errorFactory) +) = waitContentMessage(initRequest, errorFactory) diff --git a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/CommonMessageConversations.kt b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/CommonMessageConversations.kt index 172dab74cc..541de0bea5 100644 --- a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/CommonMessageConversations.kt +++ b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/CommonMessageConversations.kt @@ -1,6 +1,7 @@ package dev.inmo.tgbotapi.extensions.utils import dev.inmo.tgbotapi.types.message.abstracts.* +import dev.inmo.tgbotapi.types.message.content.MediaGroupContent import dev.inmo.tgbotapi.types.message.content.MessageContent import kotlinx.coroutines.flow.* @@ -34,3 +35,10 @@ fun > Flow.onlySentViaBot() = map fun > Flow.withoutSentViaBot() = filter { it !is PossiblySentViaBot || it.senderBot == null } + +/** + * Filter the messages and checking that incoming [ContentMessage.content] is not [MediaGroupContent] + */ +fun > Flow.withoutMediaGroups() = filter { + it.content !is MediaGroupContent<*> +}