diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/Base.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/Base.kt index 8ad99d900e..1e8927b578 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/Base.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/Base.kt @@ -29,9 +29,8 @@ typealias NullableRequestBuilder = suspend (Update) -> Request? * will be called too), [errorFactory] and then will be returned null */ @RiskFeature(lowLevelRiskFeatureMessage) -suspend fun FlowsUpdatesFilter.expectFlow( +fun FlowsUpdatesFilter.expectFlow( bot: TelegramBot, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, cancelRequestFactory: NullableRequestBuilder<*> = { null }, cancelTrigger: suspend (Update) -> Boolean = { cancelRequestFactory(it) != null }, @@ -58,11 +57,6 @@ suspend fun FlowsUpdatesFilter.expectFlow( result.getOrThrow() } }.flatten() - initRequest ?.also { - runCatching { - bot.execute(initRequest) - } - } return flow } @@ -77,51 +71,9 @@ suspend fun FlowsUpdatesFilter.expectFlow( * will be called too), [errorFactory] and then will be returned null */ @RiskFeature(lowLevelRiskFeatureMessage) -suspend fun BehaviourContext.expectFlow( - initRequest: Request<*>? = null, +fun BehaviourContext.expectFlow( errorFactory: NullableRequestBuilder<*> = { null }, cancelRequestFactory: NullableRequestBuilder<*> = { null }, cancelTrigger: suspend (Update) -> Boolean = { cancelRequestFactory(it) != null }, filter: suspend (Update) -> List -) = flowsUpdatesFilter.expectFlow(bot, initRequest, errorFactory, cancelRequestFactory, cancelTrigger, filter) - -/** - * @param initRequest If not null, this request will be sent by [bot] before returning value - * @param errorFactory If set, this factory will be used to produce requests in case when user have sent incorrect data - * @param cancelRequestFactory If set, this factory will be used to produce requests in case when it is required to say - * user that chain of scenario has been cancelled - * @param cancelTrigger When this trigger returns true, chain is cancelled - * @param filter It is main param, which will be called on each update. When it return not null, result will be returned - * as is, but when it returns null, then will be called [cancelTrigger] (if it will return true - [cancelRequestFactory] - * will be called too), [errorFactory] and then will be returned null - */ -@RiskFeature(lowLevelRiskFeatureMessage) -suspend fun FlowsUpdatesFilter.expectOne( - bot: TelegramBot, - initRequest: Request<*>? = null, - errorFactory: NullableRequestBuilder<*> = { null }, - cancelRequestFactory: NullableRequestBuilder<*> = { null }, - cancelTrigger: suspend (Update) -> Boolean = { cancelRequestFactory(it) != null }, - filter: suspend (Update) -> T? -): T = expectFlow(bot, initRequest, errorFactory, cancelRequestFactory, cancelTrigger) { - listOfNotNull(filter.invoke(it)) -}.first() - -/** - * @param initRequest If not null, this request will be sent by [bot] before returning value - * @param errorFactory If set, this factory will be used to produce requests in case when user have sent incorrect data - * @param cancelRequestFactory If set, this factory will be used to produce requests in case when it is required to say - * user that chain of scenario has been cancelled - * @param cancelTrigger When this trigger returns true, chain is cancelled - * @param filter It is main param, which will be called on each update. When it return not null, result will be returned - * as is, but when it returns null, then will be called [cancelTrigger] (if it will return true - [cancelRequestFactory] - * will be called too), [errorFactory] and then will be returned null - */ -@RiskFeature(lowLevelRiskFeatureMessage) -suspend fun BehaviourContext.expectOne( - initRequest: Request<*>? = null, - errorFactory: NullableRequestBuilder<*> = { null }, - cancelRequestFactory: NullableRequestBuilder<*> = { null }, - cancelTrigger: suspend (Update) -> Boolean = { cancelRequestFactory(it) != null }, - filter: suspend (Update) -> T? -) = flowsUpdatesFilter.expectOne(bot, initRequest, errorFactory, cancelRequestFactory, cancelTrigger, filter) +) = flowsUpdatesFilter.expectFlow(bot, errorFactory, cancelRequestFactory, cancelTrigger, filter) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendBase.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendBase.kt new file mode 100644 index 0000000000..7dd4c708f9 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendBase.kt @@ -0,0 +1,102 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.micro_utils.coroutines.safelyWithResult +import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions +import dev.inmo.tgbotapi.bot.TelegramBot +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.flatten +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.update.abstracts.Update +import dev.inmo.tgbotapi.updateshandlers.FlowsUpdatesFilter +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.flow.* + +/** + * @param initRequest If not null, this request will be sent by [bot] before returning value + * @param errorFactory If set, this factory will be used to produce requests in case when user have sent incorrect data + * @param cancelRequestFactory If set, this factory will be used to produce requests in case when it is required to say + * user that chain of scenario has been cancelled + * @param cancelTrigger When this trigger returns true, chain is cancelled + * @param filter It is main param, which will be called on each update. When it return not null, result will be returned + * as is, but when it returns null, then will be called [cancelTrigger] (if it will return true - [cancelRequestFactory] + * will be called too), [errorFactory] and then will be returned null + */ +@RiskFeature(lowLevelRiskFeatureMessage) +suspend fun FlowsUpdatesFilter.expectFlow( + bot: TelegramBot, + initRequest: Request<*>?, + errorFactory: NullableRequestBuilder<*> = { null }, + cancelRequestFactory: NullableRequestBuilder<*> = { null }, + cancelTrigger: suspend (Update) -> Boolean = { cancelRequestFactory(it) != null }, + filter: suspend (Update) -> List +): Flow { + val flow = expectFlow(bot, errorFactory, cancelRequestFactory, cancelTrigger, filter) + initRequest ?.also { + runCatching { + bot.execute(initRequest) + } + } + return flow +} + +/** + * @param initRequest If not null, this request will be sent by [bot] before returning value + * @param errorFactory If set, this factory will be used to produce requests in case when user have sent incorrect data + * @param cancelRequestFactory If set, this factory will be used to produce requests in case when it is required to say + * user that chain of scenario has been cancelled + * @param cancelTrigger When this trigger returns true, chain is cancelled + * @param filter It is main param, which will be called on each update. When it return not null, result will be returned + * as is, but when it returns null, then will be called [cancelTrigger] (if it will return true - [cancelRequestFactory] + * will be called too), [errorFactory] and then will be returned null + */ +@RiskFeature(lowLevelRiskFeatureMessage) +suspend fun BehaviourContext.expectFlow( + initRequest: Request<*>?, + errorFactory: NullableRequestBuilder<*> = { null }, + cancelRequestFactory: NullableRequestBuilder<*> = { null }, + cancelTrigger: suspend (Update) -> Boolean = { cancelRequestFactory(it) != null }, + filter: suspend (Update) -> List +) = flowsUpdatesFilter.expectFlow(bot, initRequest, errorFactory, cancelRequestFactory, cancelTrigger, filter) + +/** + * @param initRequest If not null, this request will be sent by [bot] before returning value + * @param errorFactory If set, this factory will be used to produce requests in case when user have sent incorrect data + * @param cancelRequestFactory If set, this factory will be used to produce requests in case when it is required to say + * user that chain of scenario has been cancelled + * @param cancelTrigger When this trigger returns true, chain is cancelled + * @param filter It is main param, which will be called on each update. When it return not null, result will be returned + * as is, but when it returns null, then will be called [cancelTrigger] (if it will return true - [cancelRequestFactory] + * will be called too), [errorFactory] and then will be returned null + */ +@RiskFeature(lowLevelRiskFeatureMessage) +suspend fun FlowsUpdatesFilter.expectOne( + bot: TelegramBot, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, + cancelRequestFactory: NullableRequestBuilder<*> = { null }, + cancelTrigger: suspend (Update) -> Boolean = { cancelRequestFactory(it) != null }, + filter: suspend (Update) -> T? +): T = expectFlow(bot, initRequest, errorFactory, cancelRequestFactory, cancelTrigger) { + listOfNotNull(filter.invoke(it)) +}.first() + +/** + * @param initRequest If not null, this request will be sent by [bot] before returning value + * @param errorFactory If set, this factory will be used to produce requests in case when user have sent incorrect data + * @param cancelRequestFactory If set, this factory will be used to produce requests in case when it is required to say + * user that chain of scenario has been cancelled + * @param cancelTrigger When this trigger returns true, chain is cancelled + * @param filter It is main param, which will be called on each update. When it return not null, result will be returned + * as is, but when it returns null, then will be called [cancelTrigger] (if it will return true - [cancelRequestFactory] + * will be called too), [errorFactory] and then will be returned null + */ +@RiskFeature(lowLevelRiskFeatureMessage) +suspend fun BehaviourContext.expectOne( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, + cancelRequestFactory: NullableRequestBuilder<*> = { null }, + cancelTrigger: suspend (Update) -> Boolean = { cancelRequestFactory(it) != null }, + filter: suspend (Update) -> T? +) = flowsUpdatesFilter.expectOne(bot, initRequest, errorFactory, cancelRequestFactory, cancelTrigger, filter) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitBusinessConnection.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitBusinessConnection.kt new file mode 100644 index 0000000000..cd08454b5d --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitBusinessConnection.kt @@ -0,0 +1,41 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.businessConnectionUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.disabledOrNull +import dev.inmo.tgbotapi.extensions.utils.enabledOrNull +import dev.inmo.tgbotapi.extensions.utils.shippingQueryUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.business_connection.BusinessConnection +import dev.inmo.tgbotapi.types.payments.ShippingQuery +import kotlinx.coroutines.flow.Flow + +suspend fun BehaviourContext.waitBusinessConnection( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.businessConnectionUpdateOrNull() ?.data).let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitBusinessConnectionEnabled( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.businessConnectionUpdateOrNull() ?.data ?.enabledOrNull()).let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitBusinessConnectionDisabled( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.businessConnectionUpdateOrNull() ?.data ?.disabledOrNull()).let(::listOfNotNull) +} \ No newline at end of file diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitCallbackQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitCallbackQuery.kt new file mode 100644 index 0000000000..b15320ffdd --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitCallbackQuery.kt @@ -0,0 +1,62 @@ +@file:Suppress("unused") + +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.callbackQueryUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.queries.callback.* +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +typealias CallbackQueryMapper = suspend T.() -> T? + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitCallbackQueries( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.callbackQueryUpdateOrNull() ?.data as? O).let(::listOfNotNull) +} + + +suspend fun BehaviourContext.waitDataCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitGameShortNameCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitInlineMessageIdCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitInlineMessageIdDataCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitInlineMessageIdGameShortNameCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitMessageCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitMessageDataCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitMessageGameShortNameCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitUnknownCallbackQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCallbackQueries(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatBoostRemoved.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatBoostRemoved.kt new file mode 100644 index 0000000000..166da0f708 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatBoostRemoved.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.chatBoostRemovedUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.boosts.ChatBoostRemoved +import kotlinx.coroutines.flow.Flow + +suspend fun BehaviourContext.waitChatBoostRemoved( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + it.chatBoostRemovedUpdateOrNull() ?.data.let(::listOfNotNull) +} diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatBoostUpdated.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatBoostUpdated.kt new file mode 100644 index 0000000000..458512f05d --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatBoostUpdated.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.chatBoostUpdatedUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.boosts.ChatBoostUpdated +import kotlinx.coroutines.flow.Flow + +suspend fun BehaviourContext.waitChatBoostUpdated( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + it.chatBoostUpdatedUpdateOrNull() ?.data.let(::listOfNotNull) +} diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatJoinRequest.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatJoinRequest.kt new file mode 100644 index 0000000000..b373a3f7c1 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatJoinRequest.kt @@ -0,0 +1,31 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.chatJoinRequestUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.chat.ChatJoinRequest +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +typealias ChatJoinRequestsMapper = suspend ChatJoinRequest.() -> ChatJoinRequest? + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.internalWaitChatJoinRequests( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.chatJoinRequestUpdateOrNull() ?.data as? O).let(::listOfNotNull) +} + + +suspend fun BehaviourContext.waitChatJoinRequests( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) : Flow = internalWaitChatJoinRequests( + initRequest, + errorFactory +) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMemberUpdated.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMemberUpdated.kt new file mode 100644 index 0000000000..3c77ad53ff --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMemberUpdated.kt @@ -0,0 +1,257 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.behaviour_builder.filters.* +import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onChatMemberUpdatedInternal +import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter +import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.ByChatChatMemberUpdatedMarkerFactory +import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.marker_factories.MarkerFactory +import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.times +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.chat.member.ChatMemberUpdated +import dev.inmo.tgbotapi.types.update.CommonChatMemberUpdatedUpdate +import dev.inmo.tgbotapi.types.update.MyChatMemberUpdatedUpdate +import dev.inmo.tgbotapi.types.update.abstracts.ChatMemberUpdatedUpdate +import dev.inmo.tgbotapi.types.update.abstracts.Update +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filter + +typealias ChatMemberUpdatedMapper = suspend T.() -> T? + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitChatMemberUpdatedWithFilter( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it as? O) ?.data.let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitChatMemberUpdated( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitChatMemberUpdatedWithFilter(initRequest, errorFactory) + +suspend fun BehaviourContext.waitCommonChatMemberUpdated( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitChatMemberUpdatedWithFilter(initRequest, errorFactory) + +suspend fun BehaviourContext.waitMyChatMemberUpdated( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdatedWithFilter(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatMemberJoined( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberLeft( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberSubscribed( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberSubscriptionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberUnsubscribed( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberGotPromoted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberGotPromotionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberGotDemoted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberBecameOwner( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberCeasedOwnership( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberGotRestricted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberGotRestrictionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberGotUnrestricted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; + +suspend fun BehaviourContext.waitChatMemberKicked( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberJoined( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberLeft( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberSubscribed( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberSubscriptionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberUnsubscribed( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberGotPromoted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberGotPromotionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberGotDemoted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberBecameOwner( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberCeasedOwnership( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberGotRestricted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberGotRestrictionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberGotUnrestricted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; + +suspend fun BehaviourContext.waitCommonChatMemberKicked( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberJoined( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberLeft( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberSubscribed( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberSubscriptionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberUnsubscribed( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberGotPromoted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberGotPromotionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberGotDemoted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberBecameOwner( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberCeasedOwnership( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberGotRestricted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberGotRestrictionChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberGotUnrestricted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; + +suspend fun BehaviourContext.waitMyChatMemberKicked( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) }; diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMessageReactionUpdatedUpdates.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMessageReactionUpdatedUpdates.kt new file mode 100644 index 0000000000..88be72c98d --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMessageReactionUpdatedUpdates.kt @@ -0,0 +1,31 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.chatMessageReactionUpdatedUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.chat.ChatMessageReactionUpdated +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitChatMessageReactionUpdated( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.chatMessageReactionUpdatedUpdateOrNull() ?.data as? O).let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitChatMessageReactionUpdatedByUser( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMessageReactionUpdated(initRequest, errorFactory) + + +suspend fun BehaviourContext.waitChatMessageReactionUpdatedByChat( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChatMessageReactionUpdated(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMessageReactionsCountUpdatedUpdates.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMessageReactionsCountUpdatedUpdates.kt new file mode 100644 index 0000000000..ba2faf8fe7 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChatMessageReactionsCountUpdatedUpdates.kt @@ -0,0 +1,21 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.chatMessageReactionUpdatedUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.chatMessageReactionsCountUpdatedUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.chat.ChatMessageReactionUpdated +import dev.inmo.tgbotapi.types.chat.ChatMessageReactionsCountUpdated +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +suspend inline fun BehaviourContext.waitChatMessageReactionsCountUpdated( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.chatMessageReactionsCountUpdatedUpdateOrNull() ?.data).let(::listOfNotNull) +} diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChosenInlineResult.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChosenInlineResult.kt new file mode 100644 index 0000000000..29507dded9 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitChosenInlineResult.kt @@ -0,0 +1,37 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.chosenInlineResultUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.InlineQueries.ChosenInlineResult.* +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +typealias ChosenInlineResultMapper = suspend T.() -> T? + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitChosenInlineResults( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.chosenInlineResultUpdateOrNull() ?.data as? O).let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitChosenInlineResult( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChosenInlineResults(initRequest, errorFactory) + +suspend fun BehaviourContext.waitLocationChosenInlineResult( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChosenInlineResults(initRequest, errorFactory) + +suspend fun BehaviourContext.waitBaseChosenInlineResult( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitChosenInlineResults(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitCommandsMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitCommandsMessages.kt new file mode 100644 index 0000000000..66b920e91f --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitCommandsMessages.kt @@ -0,0 +1,51 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.handlers_registrar.doWithRegistration +import dev.inmo.tgbotapi.extensions.utils.* +import dev.inmo.tgbotapi.extensions.utils.extensions.TelegramBotCommandsDefaults +import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithArgs +import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithArgsSources +import dev.inmo.tgbotapi.extensions.utils.extensions.parseCommandsWithNamedArgs +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.BotCommand +import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage +import dev.inmo.tgbotapi.types.message.content.TextContent +import dev.inmo.tgbotapi.types.message.textsources.BotCommandTextSource +import dev.inmo.tgbotapi.types.message.textsources.TextSource +import kotlinx.coroutines.flow.* + +/** + * Will filter all the messages and include required commands with [commandRegex]. + * + * * In case you wish to get only the commands at the start of message, use [requireCommandAtStart] + * * In case you wish to exclude messages with more than one command, you may use [requireSingleCommand] + * * In case you wish to exclude messages with commands params, you may use [requireCommandsWithoutParams] + */ +suspend fun BehaviourContext.waitCommandMessage( + commandRegex: Regex, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = channelFlow { + triggersHolder.handleableCommandsHolder.doWithRegistration( + commandRegex + ) { + waitTextMessage(initRequest, errorFactory).filter { + it.content.textSources.any { it.botCommandTextSourceOrNull() ?.command ?.matches(commandRegex) == true } + }.collect { + send(it) + } + } +} + +suspend fun BehaviourContext.waitCommandMessage( + command: String, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommandMessage(Regex(command), initRequest, errorFactory) + +suspend fun BehaviourContext.waitCommandMessage( + botCommand: BotCommand, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitCommandMessage(botCommand.command, initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitContent.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitContent.kt new file mode 100644 index 0000000000..52973a9fe0 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitContent.kt @@ -0,0 +1,159 @@ +@file:Suppress("unused") + +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.giveaway.GiveawayPublicResults +import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage +import dev.inmo.tgbotapi.types.message.content.* +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapNotNull + +typealias CommonMessageToContentMapper = suspend CommonMessage.() -> T? + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitContent( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = waitContentMessage(initRequest, errorFactory).map { it.content } + +suspend fun BehaviourContext.waitAnyContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitTextedContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitContact( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitDice( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitGame( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitLocation( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitLiveLocation( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitStaticLocation( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitPoll( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitText( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitStory( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitVenue( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitAudioMediaGroupContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitDocumentMediaGroupContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitMedia( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitAnyMediaGroupContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitVisualMediaGroupContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitTextedMediaContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitAnimation( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitAudio( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitDocument( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitPhoto( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitSticker( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitVideo( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitVideoNote( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitVoice( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitInvoice( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitVisualContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() +suspend fun BehaviourContext.waitMediaContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() + +suspend fun BehaviourContext.waitGiveawayContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() + +suspend fun BehaviourContext.waitGiveawayPublicResultsContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() + +suspend fun BehaviourContext.waitGiveawayWinners( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitGiveawayPublicResultsContent(initRequest, errorFactory) + +suspend fun BehaviourContext.waitPaidMediaInfoContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent() diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitContentMessage.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitContentMessage.kt new file mode 100644 index 0000000000..0fb433f46f --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitContentMessage.kt @@ -0,0 +1,167 @@ +@file:Suppress("unused") + +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.withContentOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage +import dev.inmo.tgbotapi.types.message.content.* +import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.mapNotNull + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitContentMessage( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow> = expectFlow( + initRequest, + errorFactory +) { + if (it !is BaseSentMessageUpdate) { + return@expectFlow emptyList() + } + listOfNotNull((it.data as? CommonMessage<*>)) +} + +suspend fun BehaviourContext.waitAnyContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitTextedContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitContactMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitDiceMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitGameMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitLocationMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitLiveLocationMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitStaticLocationMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitPollMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitTextMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitStoryMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitVenueMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitAudioMediaGroupContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitDocumentMediaGroupContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitMediaMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitAnyMediaGroupContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitVisualMediaGroupContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitTextedMediaContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitAnimationMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitAudioMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitDocumentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitPhotoMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitStickerMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitVideoMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitVideoNoteMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitVoiceMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() +suspend fun BehaviourContext.waitInvoiceMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() + +suspend fun BehaviourContext.waitVisualContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() + +suspend fun BehaviourContext.waitMediaContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() + +suspend fun BehaviourContext.waitGiveawayContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() + +suspend fun BehaviourContext.waitGiveawayPublicResultsContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() + +suspend fun BehaviourContext.waitGiveawayWinnersMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitGiveawayPublicResultsContentMessage(initRequest, errorFactory) + +suspend fun BehaviourContext.waitPaidMediaInfoContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent() diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitDeepLinks.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitDeepLinks.kt new file mode 100644 index 0000000000..a7c8c1ce52 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitDeepLinks.kt @@ -0,0 +1,37 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.regularTextSourceOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage +import dev.inmo.tgbotapi.types.message.content.TextContent +import dev.inmo.tgbotapi.types.message.textsources.RegularTextSource +import kotlinx.coroutines.flow.* + +suspend fun BehaviourContext.waitDeepLinks( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +): Flow, String>> = waitCommandMessage( + "start", + initRequest, + errorFactory +) + .requireSingleCommand() + .requireCommandAtStart() + .flattenCommandsWithParams().mapNotNull { + it.first to (it.second.second.singleOrNull() ?.regularTextSourceOrNull() ?.source ?.removePrefix(" ") ?: return@mapNotNull null) + } + +suspend fun BehaviourContext.waitDeepLinks( + regex: Regex, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +): Flow, String>> = waitDeepLinks(initRequest, errorFactory).filter { + regex.matches(it.second) +} + +suspend fun BehaviourContext.waitDeepLinks( + deepLink: String, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +): Flow, String>> = waitDeepLinks(Regex("^$deepLink$"), initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitDeletedBusinessMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitDeletedBusinessMessages.kt new file mode 100644 index 0000000000..cbbe1fe988 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitDeletedBusinessMessages.kt @@ -0,0 +1,19 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.* +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.business_connection.BusinessConnection +import dev.inmo.tgbotapi.types.business_connection.BusinessMessagesDeleted +import dev.inmo.tgbotapi.types.payments.ShippingQuery +import kotlinx.coroutines.flow.Flow + +suspend fun BehaviourContext.waitDeletedBusinessMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.deletedBusinessMessageUpdateOrNull() ?.data).let(::listOfNotNull) +} \ No newline at end of file diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEditedContent.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEditedContent.kt new file mode 100644 index 0000000000..2cd71d37ff --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEditedContent.kt @@ -0,0 +1,130 @@ +@file:Suppress("unused") + +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.message.content.* +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitEditedContent( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = waitEditedContentMessage(initRequest, errorFactory).map { it.content } + +suspend fun BehaviourContext.waitEditedMessageContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) + +suspend fun BehaviourContext.waitEditedContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedContact( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedDice( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedGame( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedLocation( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedLiveLocation( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedStaticLocation( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedText( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVenue( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedAudioMediaGroupContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedDocumentMediaGroupContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedMedia( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedAnyMediaGroupContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVisualMediaGroupContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedTextedMediaContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedAnimation( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedAudio( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedDocument( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedPhoto( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedSticker( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVideo( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVideoNote( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVoice( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedInvoice( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) + +suspend fun BehaviourContext.waitEditedGiveawayContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) + +suspend fun BehaviourContext.waitEditedGiveawayPublicResultsContent( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContent(initRequest, errorFactory) + diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEditedContentMessage.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEditedContentMessage.kt new file mode 100644 index 0000000000..580aa32cfb --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEditedContentMessage.kt @@ -0,0 +1,143 @@ +@file:Suppress("unused") + +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.commonMessageOrNull +import dev.inmo.tgbotapi.extensions.utils.withContent +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage +import dev.inmo.tgbotapi.types.message.content.* +import dev.inmo.tgbotapi.types.update.abstracts.BaseEditMessageUpdate +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitEditedContentMessage( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow> = expectFlow( + initRequest, + errorFactory +) { + val messages = when (it) { + is BaseEditMessageUpdate -> { + val commonMessage = it.data.commonMessageOrNull() ?: return@expectFlow emptyList() + listOf(commonMessage) + } + else -> return@expectFlow emptyList() + } + messages.mapNotNull { message -> + (message as CommonMessage<*>).withContent() + } +} + +suspend fun BehaviourContext.waitEditedMessageContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) + +suspend fun BehaviourContext.waitEditedContactMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedDiceMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedGameMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedLocationMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedLiveLocationMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedStaticLocationMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedTextMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVenueMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedAudioMediaGroupContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedDocumentMediaGroupContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedMediaMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedAnyMediaGroupContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVisualMediaGroupContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedTextedMediaContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedAnimationMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedAudioMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedDocumentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedPhotoMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedStickerMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVideoMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null }, +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVideoNoteMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedVoiceMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) +suspend fun BehaviourContext.waitEditedInvoiceMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) + +suspend fun BehaviourContext.waitEditedGiveawayContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) + +suspend fun BehaviourContext.waitEditedGiveawayPublicResultsContentMessage( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEditedContentMessage(initRequest, errorFactory) + diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEventAction.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEventAction.kt new file mode 100644 index 0000000000..d4dcce5ad3 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEventAction.kt @@ -0,0 +1,264 @@ +@file:Suppress("unused") + +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.* +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.PaidMessagePriceChanged +import dev.inmo.tgbotapi.types.chat.ChatBackground +import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceived +import dev.inmo.tgbotapi.types.giveaway.GiveawayCreated +import dev.inmo.tgbotapi.types.giveaway.GiveawayPrivateResults +import dev.inmo.tgbotapi.types.message.ChatEvents.* +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.* +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicClosed +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicCreated +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicEdited +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicReopened +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.GeneralForumTopicHidden +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.GeneralForumTopicUnhidden +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.WriteAccessAllowed +import dev.inmo.tgbotapi.types.message.ChatEvents.voice.* +import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage +import dev.inmo.tgbotapi.types.message.payments.RefundedPaymentEvent +import dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentEvent +import dev.inmo.tgbotapi.types.request.ChatShared +import dev.inmo.tgbotapi.types.request.ChatSharedRequest +import dev.inmo.tgbotapi.types.request.UsersShared +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filter + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitEvents( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + it.baseSentMessageUpdateOrNull() ?.data ?.chatEventMessageOrNull() ?.withEvent() ?.chatEvent.let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitChannelEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitPrivateEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + + +suspend fun BehaviourContext.waitVideoChatEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoChatStartedEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoChatEndedEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoChatParticipantsInvitedEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitMessageAutoDeleteTimerChangedEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + + +suspend fun BehaviourContext.waitPublicChatEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitCommonEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitGroupEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitSupergroupEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChannelChatCreatedEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitDeleteChatPhotoEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitGroupChatCreatedEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitLeftChatMemberEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitNewChatPhotoEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitNewChatMembersEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitNewChatTitleEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitPinnedMessageEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitProximityAlertTriggeredEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitSupergroupChatCreatedEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitSuccessfulPaymentEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitRefundedPaymentEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitUserLoggedInEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitWebAppDataEvents( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitForumTopicClosed( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitForumTopicCreated( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitForumTopicReopened( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitForumTopicEdited( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitGeneralForumTopicHidden( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitGeneralForumTopicUnhidden( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitWriteAccessAllowed( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) +suspend fun BehaviourContext.waitWriteAccessAllowedFromRequest( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitWriteAccessAllowedFromAttachmentMenu( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitWriteAccessAllowedFromWebAppLink( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitWriteAccessAllowedOther( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatSharedRequest( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitUsersShared( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitUserShared( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitUsersShared(initRequest, errorFactory).filter { it.userIds.size == 1 } + +suspend fun BehaviourContext.waitChatShared( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatBoostAdded( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatBackgroundSet( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitGiveawayCreated( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitGiveawayCompleted( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitGiveawayCompletedWithPrivateWinners( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitGiveawayCompleted(initRequest, errorFactory) + +suspend fun BehaviourContext.waitPaidMessagePriceChanged( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitRegularGiftSentOrReceived( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) + +suspend fun BehaviourContext.waitUniqueGiftSentOrReceived( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEvents(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEventActionMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEventActionMessages.kt new file mode 100644 index 0000000000..bfa0e9fe47 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitEventActionMessages.kt @@ -0,0 +1,243 @@ +@file:Suppress("unused") + +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.* +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.PaidMessagePriceChanged +import dev.inmo.tgbotapi.types.chat.ChatBackground +import dev.inmo.tgbotapi.types.gifts.GiftSentOrReceived +import dev.inmo.tgbotapi.types.message.ChatEvents.* +import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.* +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicClosed +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicCreated +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicEdited +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicReopened +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.GeneralForumTopicHidden +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.GeneralForumTopicUnhidden +import dev.inmo.tgbotapi.types.message.ChatEvents.forum.WriteAccessAllowed +import dev.inmo.tgbotapi.types.message.ChatEvents.voice.* +import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage +import dev.inmo.tgbotapi.types.message.payments.RefundedPaymentEvent +import dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentEvent +import dev.inmo.tgbotapi.types.request.ChatShared +import dev.inmo.tgbotapi.types.request.ChatSharedRequest +import dev.inmo.tgbotapi.types.request.UsersShared +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filter + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitEventsMessages( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow> = expectFlow( + initRequest, + errorFactory +) { + it.baseSentMessageUpdateOrNull() ?.data ?.chatEventMessageOrNull() ?.withEvent().let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitChannelEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitPrivateEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitVideoChatEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoChatStartedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoChatEndedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoChatParticipantsInvitedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitMessageAutoDeleteTimerChangedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + + +suspend fun BehaviourContext.waitPublicChatEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitCommonEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitGroupEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitSupergroupEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChannelChatCreatedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitDeleteChatPhotoEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitGroupChatCreatedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitLeftChatMemberEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitNewChatPhotoEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitNewChatMembersEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitNewChatTitleEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitPinnedMessageEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitProximityAlertTriggeredEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitSupergroupChatCreatedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitSuccessfulPaymentEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitRefundedPaymentEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitUserLoggedInEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitWebAppDataEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitForumTopicClosedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitForumTopicCreatedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitForumTopicReopenedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitForumTopicEditedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitGeneralForumTopicHiddenEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitGeneralForumTopicUnhiddenEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitWriteAccessAllowedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitWriteAccessAllowedFromRequestEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitWriteAccessAllowedFromAttachmentMenuEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitWriteAccessAllowedFromWebAppLinkEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) +suspend fun BehaviourContext.waitWriteAccessAllowedOtherEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatSharedRequestEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitUsersSharedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitUserSharedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitUsersSharedEventsMessages(initRequest, errorFactory).filter { it.chatEvent.userIds.size == 1 } + +suspend fun BehaviourContext.waitChatSharedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatBoostAddedEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitChatBackgroundSetEventsMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitPaidMessagePriceChangedMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitRegularGiftSentOrReceivedMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) + +suspend fun BehaviourContext.waitUniqueGiftSentOrReceivedMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitEventsMessages(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitInlineQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitInlineQuery.kt new file mode 100644 index 0000000000..1dc4543e75 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitInlineQuery.kt @@ -0,0 +1,34 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.inlineQueryUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.InlineQueries.query.* +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitInlineQueries( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.inlineQueryUpdateOrNull() ?.data as? O).let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitAnyInlineQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitInlineQueries(initRequest, errorFactory) + +suspend fun BehaviourContext.waitBaseInlineQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitInlineQueries(initRequest, errorFactory) +suspend fun BehaviourContext.waitLocationInlineQuery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitInlineQueries(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMediaGroup.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMediaGroup.kt new file mode 100644 index 0000000000..f2a329fd60 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMediaGroup.kt @@ -0,0 +1,51 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.baseSentMessageUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.commonMessageOrNull +import dev.inmo.tgbotapi.extensions.utils.withContent +import dev.inmo.tgbotapi.extensions.utils.withContentOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.message.content.* +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.buildMediaGroupWaiter( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow> = flowsUpdatesFilter.expectFlow(bot, initRequest, errorFactory) { update -> + update.baseSentMessageUpdateOrNull() ?.data ?.commonMessageOrNull() ?.withContentOrNull>() ?.let { message -> + if (message.content.group.all { it is T }) { + listOf(message.content as MediaGroupContent) + } else { + null + } + } ?: emptyList() +} + +suspend fun BehaviourContext.waitMediaGroup( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitPlaylist( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitDocumentsGroup( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitVisualGallery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitPhotoGallery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoGallery( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupWaiter(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMediaGroupMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMediaGroupMessages.kt new file mode 100644 index 0000000000..e153863e0e --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMediaGroupMessages.kt @@ -0,0 +1,51 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.baseSentMessageUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.commonMessageOrNull +import dev.inmo.tgbotapi.extensions.utils.withContent +import dev.inmo.tgbotapi.extensions.utils.withContentOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.message.content.* +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.buildMediaGroupMessagesWaiter( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow> = flowsUpdatesFilter.expectFlow(bot, initRequest, errorFactory) { update -> + update.baseSentMessageUpdateOrNull() ?.data ?.commonMessageOrNull() ?.withContentOrNull>() ?.let { message -> + if (message.content.group.all { it is T }) { + listOf(message as MediaGroupMessage) + } else { + null + } + } ?: emptyList() +} + +suspend fun BehaviourContext.waitMediaGroupMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitPlaylistMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitDocumentsGroupMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitVisualGalleryMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitPhotoGalleryMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) +suspend fun BehaviourContext.waitVideoGalleryMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMention.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMention.kt new file mode 100644 index 0000000000..2f307384a2 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMention.kt @@ -0,0 +1,52 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.whenMentionTextSource +import dev.inmo.tgbotapi.extensions.utils.whenTextMentionTextSource +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.UserId +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.chat.User +import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage +import dev.inmo.tgbotapi.types.message.content.MessageContent +import dev.inmo.tgbotapi.types.message.content.TextedContent +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filter + +/** + * Creates cold [Flow] with the messages with [TextedContent] where [username] has been mentioned + * + * @see filterMentions + * @see filterTextMentions + */ +suspend fun BehaviourContext.waitContentWithMentions ( + username: Username, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContent(initRequest, errorFactory).mapContent().filterMentions(username) + +/** + * Creates cold [Flow] with the messages with [TextedContent] where [userId] has been mentioned with text + * + * @see filterTextMentions + * @see filterMentions + * @see dev.inmo.tgbotapi.types.message.textsources.TextMentionTextSource + */ +suspend fun BehaviourContext.waitContentWithTextMentions ( + userId: UserId, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitTextedContent(initRequest, errorFactory).filterTextMentions(userId) + +/** + * Creates cold [Flow] with the messages with [TextedContent] where [user] has been mentioned as text or mentioned + * with text + * + * @see filterMentions + * @see filterTextMentions + */ +suspend fun BehaviourContext.waitContentWithMentions ( + user: User, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitTextedContent(initRequest, errorFactory).filterMentions(user) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMentionMessage.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMentionMessage.kt new file mode 100644 index 0000000000..e870b0ef6a --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitMentionMessage.kt @@ -0,0 +1,51 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.whenMentionTextSource +import dev.inmo.tgbotapi.extensions.utils.whenTextMentionTextSource +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.UserId +import dev.inmo.tgbotapi.types.Username +import dev.inmo.tgbotapi.types.chat.User +import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage +import dev.inmo.tgbotapi.types.message.content.TextedContent +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filter + +/** + * Creates cold [Flow] with the messages with [TextedContent] where [username] has been mentioned + * + * @see filterMentions + * @see filterTextMentions + */ +suspend fun BehaviourContext.waitContentMessageWithMentions ( + username: Username, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitContentMessage(initRequest, errorFactory).mapWithContent().filterMentionsMessages(username) + +/** + * Creates cold [Flow] with the messages with [TextedContent] where [userId] has been mentioned with text + * + * @see filterTextMentions + * @see filterMentions + * @see dev.inmo.tgbotapi.types.message.textsources.TextMentionTextSource + */ +suspend fun BehaviourContext.waitContentMessageWithTextMentions ( + userId: UserId, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitTextedContentMessage(initRequest, errorFactory).filterTextMentionsMessages(userId) + +/** + * Creates cold [Flow] with the messages with [TextedContent] where [user] has been mentioned as text or mentioned + * with text + * + * @see filterMentions + * @see filterTextMentions + */ +suspend fun BehaviourContext.waitContentMessageWithMentions ( + user: User, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitTextedContentMessage(initRequest, errorFactory).filterMentionsMessages(user) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPaidMediaPurchased.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPaidMediaPurchased.kt new file mode 100644 index 0000000000..8bf1203003 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPaidMediaPurchased.kt @@ -0,0 +1,44 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.businessConnectionUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.disabledOrNull +import dev.inmo.tgbotapi.extensions.utils.enabledOrNull +import dev.inmo.tgbotapi.extensions.utils.paidMediaPurchasedUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.PaidMediaPayload +import dev.inmo.tgbotapi.types.business_connection.BusinessConnection +import dev.inmo.tgbotapi.types.message.payments.PaidMediaPurchased +import kotlinx.coroutines.flow.Flow + +suspend fun BehaviourContext.waitPaidMediaPurchased( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.paidMediaPurchasedUpdateOrNull() ?.data).let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitPaidMediaPurchased( + paidMediaPayloadRegex: Regex, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.paidMediaPurchasedUpdateOrNull() ?.data ?.takeIf { paidMediaPayloadRegex.matches(it.payload.string) }).let(::listOfNotNull) +} + +suspend fun BehaviourContext.waitPaidMediaPurchased( + paidMediaPayload: PaidMediaPayload, + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.paidMediaPurchasedUpdateOrNull() ?.data ?.takeIf { it.payload == paidMediaPayload }).let(::listOfNotNull) +} diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPassportData.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPassportData.kt new file mode 100644 index 0000000000..c62406d872 --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPassportData.kt @@ -0,0 +1,28 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.messageUpdateOrNull +import dev.inmo.tgbotapi.extensions.utils.passportMessageOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.message.PassportMessage +import dev.inmo.tgbotapi.types.passport.PassportData +import dev.inmo.tgbotapi.types.passport.encrypted.abstracts.EncryptedPassportElement +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitPassportMessagesWith( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + it.messageUpdateOrNull() ?.data ?.passportMessageOrNull() ?.passportData ?.data ?.filterIsInstance() ?: emptyList() +} + +suspend fun BehaviourContext.waitAnyPassportMessages( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitPassportMessagesWith(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPollAnswers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPollAnswers.kt new file mode 100644 index 0000000000..4427aeb69f --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPollAnswers.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.pollAnswerUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.polls.PollAnswer +import kotlinx.coroutines.flow.Flow + +suspend fun BehaviourContext.waitPollAnswers( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + it.pollAnswerUpdateOrNull() ?.data.let(::listOfNotNull) +} diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPollUpdates.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPollUpdates.kt new file mode 100644 index 0000000000..db6392fabf --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPollUpdates.kt @@ -0,0 +1,44 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.pollUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.polls.* +import dev.inmo.tgbotapi.utils.RiskFeature +import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage +import kotlinx.coroutines.flow.Flow + +@RiskFeature(lowLevelRiskFeatureMessage) +suspend inline fun BehaviourContext.waitPolls( + initRequest: Request<*>, + noinline errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.pollUpdateOrNull() ?.data as? O).let(::listOfNotNull) +} + +/** + * This wait will be triggered only for stopped polls and polls, which are sent by the bot + */ +suspend fun BehaviourContext.waitPollUpdates( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitPolls(initRequest, errorFactory) + +/** + * This wait will be triggered only for stopped polls and polls, which are sent by the bot + */ +suspend fun BehaviourContext.waitQuizPollUpdates( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitPolls(initRequest, errorFactory) + +/** + * This wait will be triggered only for stopped polls and polls, which are sent by the bot + */ +suspend fun BehaviourContext.waitRegularPollUpdates( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +) = waitPolls(initRequest, errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPreCheckoutQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPreCheckoutQuery.kt new file mode 100644 index 0000000000..8a53e7444d --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitPreCheckoutQuery.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.preCheckoutQueryUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.payments.PreCheckoutQuery +import kotlinx.coroutines.flow.Flow + +suspend fun BehaviourContext.waitPreCheckoutQueries( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + it.preCheckoutQueryUpdateOrNull() ?.data.let(::listOfNotNull) +} diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitShippingQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitShippingQuery.kt new file mode 100644 index 0000000000..049344a9ed --- /dev/null +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/SuspendWaitShippingQuery.kt @@ -0,0 +1,17 @@ +package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations + +import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext +import dev.inmo.tgbotapi.extensions.utils.shippingQueryUpdateOrNull +import dev.inmo.tgbotapi.requests.abstracts.Request +import dev.inmo.tgbotapi.types.payments.ShippingQuery +import kotlinx.coroutines.flow.Flow + +suspend fun BehaviourContext.waitShippingQueries( + initRequest: Request<*>, + errorFactory: NullableRequestBuilder<*> = { null } +): Flow = expectFlow( + initRequest, + errorFactory +) { + (it.shippingQueryUpdateOrNull() ?.data).let(::listOfNotNull) +} diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitBusinessConnection.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitBusinessConnection.kt index bcf9a02286..54d4a11eaa 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitBusinessConnection.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitBusinessConnection.kt @@ -10,31 +10,25 @@ import dev.inmo.tgbotapi.types.business_connection.BusinessConnection import dev.inmo.tgbotapi.types.payments.ShippingQuery import kotlinx.coroutines.flow.Flow -suspend fun BehaviourContext.waitBusinessConnection( - initRequest: Request<*>? = null, +fun BehaviourContext.waitBusinessConnection( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.businessConnectionUpdateOrNull() ?.data).let(::listOfNotNull) } -suspend fun BehaviourContext.waitBusinessConnectionEnabled( - initRequest: Request<*>? = null, +fun BehaviourContext.waitBusinessConnectionEnabled( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.businessConnectionUpdateOrNull() ?.data ?.enabledOrNull()).let(::listOfNotNull) } -suspend fun BehaviourContext.waitBusinessConnectionDisabled( - initRequest: Request<*>? = null, +fun BehaviourContext.waitBusinessConnectionDisabled( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.businessConnectionUpdateOrNull() ?.data ?.disabledOrNull()).let(::listOfNotNull) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCallbackQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCallbackQuery.kt index 492ed205e5..f868b6f772 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCallbackQuery.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCallbackQuery.kt @@ -13,50 +13,39 @@ import kotlinx.coroutines.flow.Flow typealias CallbackQueryMapper = suspend T.() -> T? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitCallbackQueries( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitCallbackQueries( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.callbackQueryUpdateOrNull() ?.data as? O).let(::listOfNotNull) } -suspend fun BehaviourContext.waitDataCallbackQuery( - initRequest: Request<*>? = null, +fun BehaviourContext.waitDataCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitGameShortNameCallbackQuery( - initRequest: Request<*>? = null, +) = waitCallbackQueries(errorFactory) +fun BehaviourContext.waitGameShortNameCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitInlineMessageIdCallbackQuery( - initRequest: Request<*>? = null, +) = waitCallbackQueries(errorFactory) +fun BehaviourContext.waitInlineMessageIdCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitInlineMessageIdDataCallbackQuery( - initRequest: Request<*>? = null, +) = waitCallbackQueries(errorFactory) +fun BehaviourContext.waitInlineMessageIdDataCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitInlineMessageIdGameShortNameCallbackQuery( - initRequest: Request<*>? = null, +) = waitCallbackQueries(errorFactory) +fun BehaviourContext.waitInlineMessageIdGameShortNameCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitMessageCallbackQuery( - initRequest: Request<*>? = null, +) = waitCallbackQueries(errorFactory) +fun BehaviourContext.waitMessageCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitMessageDataCallbackQuery( - initRequest: Request<*>? = null, +) = waitCallbackQueries(errorFactory) +fun BehaviourContext.waitMessageDataCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitMessageGameShortNameCallbackQuery( - initRequest: Request<*>? = null, +) = waitCallbackQueries(errorFactory) +fun BehaviourContext.waitMessageGameShortNameCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitUnknownCallbackQuery( - initRequest: Request<*>? = null, +) = waitCallbackQueries(errorFactory) +fun BehaviourContext.waitUnknownCallbackQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCallbackQueries(initRequest, errorFactory) +) = waitCallbackQueries(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatBoostRemoved.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatBoostRemoved.kt index aefb0cad80..3a921935d8 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatBoostRemoved.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatBoostRemoved.kt @@ -6,11 +6,9 @@ import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.boosts.ChatBoostRemoved import kotlinx.coroutines.flow.Flow -suspend fun BehaviourContext.waitChatBoostRemoved( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatBoostRemoved( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { it.chatBoostRemovedUpdateOrNull() ?.data.let(::listOfNotNull) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatBoostUpdated.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatBoostUpdated.kt index 926f7ad712..fc89648b0a 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatBoostUpdated.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatBoostUpdated.kt @@ -6,11 +6,9 @@ import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.types.boosts.ChatBoostUpdated import kotlinx.coroutines.flow.Flow -suspend fun BehaviourContext.waitChatBoostUpdated( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatBoostUpdated( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { it.chatBoostUpdatedUpdateOrNull() ?.data.let(::listOfNotNull) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatJoinRequest.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatJoinRequest.kt index 9f1dd58b85..baf329487b 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatJoinRequest.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatJoinRequest.kt @@ -11,21 +11,17 @@ import kotlinx.coroutines.flow.Flow typealias ChatJoinRequestsMapper = suspend ChatJoinRequest.() -> ChatJoinRequest? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.internalWaitChatJoinRequests( - initRequest: Request<*>? = null, +inline fun BehaviourContext.internalWaitChatJoinRequests( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.chatJoinRequestUpdateOrNull() ?.data as? O).let(::listOfNotNull) } -suspend fun BehaviourContext.waitChatJoinRequests( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatJoinRequests( errorFactory: NullableRequestBuilder<*> = { null } ) : Flow = internalWaitChatJoinRequests( - initRequest, errorFactory ) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMemberUpdated.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMemberUpdated.kt index 5d4292a41b..73103c9268 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMemberUpdated.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMemberUpdated.kt @@ -21,237 +21,190 @@ import kotlinx.coroutines.flow.filter typealias ChatMemberUpdatedMapper = suspend T.() -> T? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitChatMemberUpdatedWithFilter( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitChatMemberUpdatedWithFilter( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it as? O) ?.data.let(::listOfNotNull) } -suspend fun BehaviourContext.waitChatMemberUpdated( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberUpdated( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitChatMemberUpdatedWithFilter(initRequest, errorFactory) +) = waitChatMemberUpdatedWithFilter(errorFactory) -suspend fun BehaviourContext.waitCommonChatMemberUpdated( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberUpdated( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitChatMemberUpdatedWithFilter(initRequest, errorFactory) +) = waitChatMemberUpdatedWithFilter(errorFactory) -suspend fun BehaviourContext.waitMyChatMemberUpdated( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberUpdated( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdatedWithFilter(initRequest, errorFactory) +) = waitChatMemberUpdatedWithFilter(errorFactory) -suspend fun BehaviourContext.waitChatMemberJoined( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberJoined( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberJoinedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberLeft( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberLeft( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberLeftFilter(it) }; -suspend fun BehaviourContext.waitChatMemberSubscribed( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberSubscribed( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberSubscribedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberSubscriptionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberSubscriptionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberUnsubscribed( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberUnsubscribed( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberUnsubscribedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberGotPromoted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberGotPromoted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberGotPromotedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberGotPromotionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberGotPromotionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberGotDemoted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberGotDemoted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberGotDemotedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberBecameOwner( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberBecameOwner( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberBecameOwnerFilter(it) }; -suspend fun BehaviourContext.waitChatMemberCeasedOwnership( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberCeasedOwnership( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; -suspend fun BehaviourContext.waitChatMemberGotRestricted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberGotRestricted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberGotRestrictedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberGotRestrictionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberGotRestrictionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberGotUnrestricted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberGotUnrestricted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; -suspend fun BehaviourContext.waitChatMemberKicked( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMemberKicked( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) }; +) = waitChatMemberUpdated(errorFactory).filter { chatMemberKickedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberJoined( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberJoined( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberJoinedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberLeft( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberLeft( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberLeftFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberSubscribed( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberSubscribed( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberSubscribedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberSubscriptionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberSubscriptionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberUnsubscribed( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberUnsubscribed( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberUnsubscribedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberGotPromoted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberGotPromoted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberGotPromotedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberGotPromotionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberGotPromotionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberGotDemoted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberGotDemoted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberGotDemotedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberBecameOwner( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberBecameOwner( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberBecameOwnerFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberCeasedOwnership( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberCeasedOwnership( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberGotRestricted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberGotRestricted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberGotRestrictedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberGotRestrictionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberGotRestrictionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberGotUnrestricted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberGotUnrestricted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; -suspend fun BehaviourContext.waitCommonChatMemberKicked( - initRequest: Request<*>? = null, +fun BehaviourContext.waitCommonChatMemberKicked( errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommonChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) }; +) = waitCommonChatMemberUpdated(errorFactory).filter { chatMemberKickedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberJoined( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberJoined( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberJoinedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberJoinedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberLeft( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberLeft( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberLeftFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberLeftFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberSubscribed( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberSubscribed( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscribedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberSubscribedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberSubscriptionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberSubscriptionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberSubscriptionChangedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberUnsubscribed( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberUnsubscribed( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberUnsubscribedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberUnsubscribedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberGotPromoted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberGotPromoted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberGotPromotedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberGotPromotionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberGotPromotionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberGotPromotionChangedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberGotDemoted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberGotDemoted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotDemotedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberGotDemotedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberBecameOwner( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberBecameOwner( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberBecameOwnerFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberBecameOwnerFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberCeasedOwnership( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberCeasedOwnership( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberCeasedOwnershipFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberGotRestricted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberGotRestricted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberGotRestrictedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberGotRestrictionChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberGotRestrictionChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberGotRestrictionsChangedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberGotUnrestricted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberGotUnrestricted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberGotUnrestrictedFilter(it) }; -suspend fun BehaviourContext.waitMyChatMemberKicked( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMyChatMemberKicked( errorFactory: NullableRequestBuilder<*> = { null } -) = waitMyChatMemberUpdated(initRequest, errorFactory).filter { chatMemberKickedFilter(it) }; +) = waitMyChatMemberUpdated(errorFactory).filter { chatMemberKickedFilter(it) }; diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMessageReactionUpdatedUpdates.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMessageReactionUpdatedUpdates.kt index 70b2307604..5fa58e369a 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMessageReactionUpdatedUpdates.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMessageReactionUpdatedUpdates.kt @@ -9,23 +9,19 @@ import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage import kotlinx.coroutines.flow.Flow @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitChatMessageReactionUpdated( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitChatMessageReactionUpdated( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.chatMessageReactionUpdatedUpdateOrNull() ?.data as? O).let(::listOfNotNull) } -suspend fun BehaviourContext.waitChatMessageReactionUpdatedByUser( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMessageReactionUpdatedByUser( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMessageReactionUpdated(initRequest, errorFactory) +) = waitChatMessageReactionUpdated(errorFactory) -suspend fun BehaviourContext.waitChatMessageReactionUpdatedByChat( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatMessageReactionUpdatedByChat( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChatMessageReactionUpdated(initRequest, errorFactory) +) = waitChatMessageReactionUpdated(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMessageReactionsCountUpdatedUpdates.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMessageReactionsCountUpdatedUpdates.kt index 40292de55e..4870167bd0 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMessageReactionsCountUpdatedUpdates.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChatMessageReactionsCountUpdatedUpdates.kt @@ -10,11 +10,9 @@ import dev.inmo.tgbotapi.utils.RiskFeature import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage import kotlinx.coroutines.flow.Flow -suspend inline fun BehaviourContext.waitChatMessageReactionsCountUpdated( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitChatMessageReactionsCountUpdated( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.chatMessageReactionsCountUpdatedUpdateOrNull() ?.data).let(::listOfNotNull) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChosenInlineResult.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChosenInlineResult.kt index 2c8c812acb..115acdd955 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChosenInlineResult.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitChosenInlineResult.kt @@ -11,27 +11,22 @@ import kotlinx.coroutines.flow.Flow typealias ChosenInlineResultMapper = suspend T.() -> T? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitChosenInlineResults( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitChosenInlineResults( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.chosenInlineResultUpdateOrNull() ?.data as? O).let(::listOfNotNull) } -suspend fun BehaviourContext.waitChosenInlineResult( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChosenInlineResult( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChosenInlineResults(initRequest, errorFactory) +) = waitChosenInlineResults(errorFactory) -suspend fun BehaviourContext.waitLocationChosenInlineResult( - initRequest: Request<*>? = null, +fun BehaviourContext.waitLocationChosenInlineResult( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChosenInlineResults(initRequest, errorFactory) +) = waitChosenInlineResults(errorFactory) -suspend fun BehaviourContext.waitBaseChosenInlineResult( - initRequest: Request<*>? = null, +fun BehaviourContext.waitBaseChosenInlineResult( errorFactory: NullableRequestBuilder<*> = { null } -) = waitChosenInlineResults(initRequest, errorFactory) +) = waitChosenInlineResults(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCommandsMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCommandsMessages.kt index df09bdd4be..1e0b8e9868 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCommandsMessages.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitCommandsMessages.kt @@ -22,15 +22,14 @@ import kotlinx.coroutines.flow.* * * In case you wish to exclude messages with more than one command, you may use [requireSingleCommand] * * In case you wish to exclude messages with commands params, you may use [requireCommandsWithoutParams] */ -suspend fun BehaviourContext.waitCommandMessage( +fun BehaviourContext.waitCommandMessage( commandRegex: Regex, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } ) = channelFlow { triggersHolder.handleableCommandsHolder.doWithRegistration( commandRegex ) { - waitTextMessage(initRequest, errorFactory).filter { + waitTextMessage(errorFactory).filter { it.content.textSources.any { it.botCommandTextSourceOrNull() ?.command ?.matches(commandRegex) == true } }.collect { send(it) @@ -38,17 +37,15 @@ suspend fun BehaviourContext.waitCommandMessage( } } -suspend fun BehaviourContext.waitCommandMessage( +fun BehaviourContext.waitCommandMessage( command: String, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommandMessage(Regex(command), initRequest, errorFactory) +) = waitCommandMessage(Regex(command), errorFactory) -suspend fun BehaviourContext.waitCommandMessage( +fun BehaviourContext.waitCommandMessage( botCommand: BotCommand, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitCommandMessage(botCommand.command, initRequest, errorFactory) +) = waitCommandMessage(botCommand.command, errorFactory) fun Flow>.requireCommandAtStart() = filter { it.content.textSources.firstOrNull() is BotCommandTextSource diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContent.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContent.kt index 7637153dac..f0c4ce0ce7 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContent.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContent.kt @@ -16,146 +16,112 @@ import kotlinx.coroutines.flow.mapNotNull typealias CommonMessageToContentMapper = suspend CommonMessage.() -> T? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitContent( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitContent( noinline errorFactory: NullableRequestBuilder<*> = { null } -): Flow = waitContentMessage(initRequest, errorFactory).map { it.content } +): Flow = waitContentMessage(errorFactory).map { it.content } inline fun Flow.mapContent() = mapNotNull { it as? T } -suspend fun BehaviourContext.waitAnyContent( - initRequest: Request<*>? = null, +fun BehaviourContext.waitAnyContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitTextedContent( - initRequest: Request<*>? = null, +) = waitContent(errorFactory) +fun BehaviourContext.waitTextedContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitContact( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitContact( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitDice( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitDice( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitGame( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitGame( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitLocation( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitLocation( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitLiveLocation( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitLiveLocation( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitStaticLocation( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitStaticLocation( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitPoll( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitPoll( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitText( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitText( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitStory( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitStory( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitVenue( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitVenue( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitAudioMediaGroupContent( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitAudioMediaGroupContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitDocumentMediaGroupContent( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitDocumentMediaGroupContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitMedia( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitMedia( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitAnyMediaGroupContent( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitAnyMediaGroupContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitVisualMediaGroupContent( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitVisualMediaGroupContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitTextedMediaContent( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitTextedMediaContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitAnimation( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitAnimation( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitAudio( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitAudio( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitDocument( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitDocument( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitPhoto( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitPhoto( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitSticker( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitSticker( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitVideo( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitVideo( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitVideoNote( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitVideoNote( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitVoice( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitVoice( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitInvoice( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitInvoice( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitVisualContent( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitVisualContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() -suspend fun BehaviourContext.waitMediaContent( - initRequest: Request<*>? = null, +) = waitContent(errorFactory).mapContent() +fun BehaviourContext.waitMediaContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() +) = waitContent(errorFactory).mapContent() -suspend fun BehaviourContext.waitGiveawayContent( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() +) = waitContent(errorFactory).mapContent() -suspend fun BehaviourContext.waitGiveawayPublicResultsContent( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayPublicResultsContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() +) = waitContent(errorFactory).mapContent() -suspend fun BehaviourContext.waitGiveawayWinners( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayWinners( errorFactory: NullableRequestBuilder<*> = { null } -) = waitGiveawayPublicResultsContent(initRequest, errorFactory) +) = waitGiveawayPublicResultsContent(errorFactory) -suspend fun BehaviourContext.waitPaidMediaInfoContent( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPaidMediaInfoContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent() +) = waitContent(errorFactory).mapContent() 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 4d44daa105..f7654d06fa 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 @@ -16,11 +16,9 @@ import kotlinx.coroutines.flow.mapNotNull typealias CommonMessageToCommonMessageMapper = suspend CommonMessage.() -> CommonMessage? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitContentMessage( - initRequest: Request<*>? = null, - noinline errorFactory: NullableRequestBuilder<*> = { null } +fun BehaviourContext.waitContentMessage( + errorFactory: NullableRequestBuilder<*> = { null } ): Flow> = expectFlow( - initRequest, errorFactory ) { if (it !is BaseSentMessageUpdate) { @@ -31,141 +29,108 @@ suspend inline fun BehaviourContext.waitContentMessage( inline fun Flow>.mapWithContent() = mapNotNull { it.withContentOrNull() } -suspend fun BehaviourContext.waitAnyContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitAnyContentMessage( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitTextedContentMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory) +fun BehaviourContext.waitTextedContentMessage( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitContactMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitContactMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitDiceMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitDiceMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitGameMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitGameMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitLocationMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitLocationMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitLiveLocationMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitLiveLocationMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitStaticLocationMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitStaticLocationMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitPollMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitPollMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitTextMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitTextMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitStoryMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitStoryMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitVenueMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitVenueMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitAudioMediaGroupContentMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitAudioMediaGroupContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitDocumentMediaGroupContentMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitDocumentMediaGroupContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitMediaMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitMediaMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitAnyMediaGroupContentMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitAnyMediaGroupContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitVisualMediaGroupContentMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitVisualMediaGroupContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitTextedMediaContentMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitTextedMediaContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitAnimationMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitAnimationMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitAudioMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitAudioMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitDocumentMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitDocumentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitPhotoMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitPhotoMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitStickerMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitStickerMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitVideoMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitVideoMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitVideoNoteMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitVideoNoteMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitVoiceMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitVoiceMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() -suspend fun BehaviourContext.waitInvoiceMessage( - initRequest: Request<*>? = null, +) = waitContentMessage(errorFactory).mapWithContent() +fun BehaviourContext.waitInvoiceMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() +) = waitContentMessage(errorFactory).mapWithContent() -suspend fun BehaviourContext.waitVisualContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitVisualContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() +) = waitContentMessage(errorFactory).mapWithContent() -suspend fun BehaviourContext.waitMediaContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMediaContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() +) = waitContentMessage(errorFactory).mapWithContent() -suspend fun BehaviourContext.waitGiveawayContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() +) = waitContentMessage(errorFactory).mapWithContent() -suspend fun BehaviourContext.waitGiveawayPublicResultsContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayPublicResultsContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() +) = waitContentMessage(errorFactory).mapWithContent() -suspend fun BehaviourContext.waitGiveawayWinnersMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayWinnersMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitGiveawayPublicResultsContentMessage(initRequest, errorFactory) +) = waitGiveawayPublicResultsContentMessage(errorFactory) -suspend fun BehaviourContext.waitPaidMediaInfoContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPaidMediaInfoContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent() +) = waitContentMessage(errorFactory).mapWithContent() diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitDeepLinks.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitDeepLinks.kt index b494adf0e6..a3602481b4 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitDeepLinks.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitDeepLinks.kt @@ -8,12 +8,10 @@ import dev.inmo.tgbotapi.types.message.content.TextContent import dev.inmo.tgbotapi.types.message.textsources.RegularTextSource import kotlinx.coroutines.flow.* -suspend fun BehaviourContext.waitDeepLinks( - initRequest: Request<*>? = null, +fun BehaviourContext.waitDeepLinks( errorFactory: NullableRequestBuilder<*> = { null }, ): Flow, String>> = waitCommandMessage( "start", - initRequest, errorFactory ) .requireSingleCommand() @@ -22,16 +20,14 @@ suspend fun BehaviourContext.waitDeepLinks( it.first to (it.second.second.singleOrNull() ?.regularTextSourceOrNull() ?.source ?.removePrefix(" ") ?: return@mapNotNull null) } -suspend fun BehaviourContext.waitDeepLinks( +fun BehaviourContext.waitDeepLinks( regex: Regex, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, -): Flow, String>> = waitDeepLinks(initRequest, errorFactory).filter { +): Flow, String>> = waitDeepLinks(errorFactory).filter { regex.matches(it.second) } -suspend fun BehaviourContext.waitDeepLinks( +fun BehaviourContext.waitDeepLinks( deepLink: String, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null }, -): Flow, String>> = waitDeepLinks(Regex("^$deepLink$"), initRequest, errorFactory) +): Flow, String>> = waitDeepLinks(Regex("^$deepLink$"), errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitDeletedBusinessMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitDeletedBusinessMessages.kt index 42edac4233..d21d3d7fb7 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitDeletedBusinessMessages.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitDeletedBusinessMessages.kt @@ -8,11 +8,9 @@ import dev.inmo.tgbotapi.types.business_connection.BusinessMessagesDeleted import dev.inmo.tgbotapi.types.payments.ShippingQuery import kotlinx.coroutines.flow.Flow -suspend fun BehaviourContext.waitDeletedBusinessMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitDeletedBusinessMessages( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.deletedBusinessMessageUpdateOrNull() ?.data).let(::listOfNotNull) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContent.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContent.kt index 15de12b77f..188064ad98 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContent.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContent.kt @@ -11,120 +11,92 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitEditedContent( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitEditedContent( noinline errorFactory: NullableRequestBuilder<*> = { null } -): Flow = waitEditedContentMessage(initRequest, errorFactory).map { it.content } +): Flow = waitEditedContentMessage(errorFactory).map { it.content } -suspend fun BehaviourContext.waitEditedMessageContent( - initRequest: Request<*>? = null, +fun BehaviourContext.waitEditedMessageContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) +) = waitEditedContent(errorFactory) -suspend fun BehaviourContext.waitEditedContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitEditedContentMessage( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedContact( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedContact( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedDice( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedDice( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedGame( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedGame( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedLocation( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedLocation( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedLiveLocation( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedLiveLocation( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedStaticLocation( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedStaticLocation( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedText( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedText( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVenue( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedVenue( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedAudioMediaGroupContent( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedAudioMediaGroupContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedDocumentMediaGroupContent( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedDocumentMediaGroupContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedMedia( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedMedia( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedAnyMediaGroupContent( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedAnyMediaGroupContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVisualMediaGroupContent( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedVisualMediaGroupContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedTextedMediaContent( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedTextedMediaContent( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedAnimation( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedAnimation( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedAudio( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedAudio( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedDocument( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedDocument( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedPhoto( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedPhoto( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedSticker( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedSticker( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVideo( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedVideo( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVideoNote( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedVideoNote( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVoice( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedVoice( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedInvoice( - initRequest: Request<*>? = null, +) = waitEditedContent(errorFactory) +fun BehaviourContext.waitEditedInvoice( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) +) = waitEditedContent(errorFactory) -suspend fun BehaviourContext.waitEditedGiveawayContent( - initRequest: Request<*>? = null, +fun BehaviourContext.waitEditedGiveawayContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) +) = waitEditedContent(errorFactory) -suspend fun BehaviourContext.waitEditedGiveawayPublicResultsContent( - initRequest: Request<*>? = null, +fun BehaviourContext.waitEditedGiveawayPublicResultsContent( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContent(initRequest, errorFactory) +) = waitEditedContent(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContentMessage.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContentMessage.kt index 4a62c65e33..0207c556fa 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContentMessage.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEditedContentMessage.kt @@ -14,11 +14,9 @@ import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage import kotlinx.coroutines.flow.Flow @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitEditedContentMessage( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitEditedContentMessage( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow> = expectFlow( - initRequest, errorFactory ) { val messages = when (it) { @@ -33,111 +31,85 @@ suspend inline fun BehaviourContext.waitEditedConte } } -suspend fun BehaviourContext.waitEditedMessageContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitEditedMessageContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) +) = waitEditedContentMessage(errorFactory) -suspend fun BehaviourContext.waitEditedContactMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitEditedContactMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedDiceMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedDiceMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedGameMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedGameMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedLocationMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedLocationMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedLiveLocationMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedLiveLocationMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedStaticLocationMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedStaticLocationMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedTextMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedTextMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVenueMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedVenueMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedAudioMediaGroupContentMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedAudioMediaGroupContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedDocumentMediaGroupContentMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedDocumentMediaGroupContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedMediaMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedMediaMessage( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedAnyMediaGroupContentMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedAnyMediaGroupContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVisualMediaGroupContentMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedVisualMediaGroupContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedTextedMediaContentMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedTextedMediaContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedAnimationMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedAnimationMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedAudioMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedAudioMessage( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedDocumentMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedDocumentMessage( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedPhotoMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedPhotoMessage( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedStickerMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedStickerMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVideoMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedVideoMessage( errorFactory: NullableRequestBuilder<*> = { null }, -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVideoNoteMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedVideoNoteMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedVoiceMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedVoiceMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) -suspend fun BehaviourContext.waitEditedInvoiceMessage( - initRequest: Request<*>? = null, +) = waitEditedContentMessage(errorFactory) +fun BehaviourContext.waitEditedInvoiceMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) +) = waitEditedContentMessage(errorFactory) -suspend fun BehaviourContext.waitEditedGiveawayContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitEditedGiveawayContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) +) = waitEditedContentMessage(errorFactory) -suspend fun BehaviourContext.waitEditedGiveawayPublicResultsContentMessage( - initRequest: Request<*>? = null, +fun BehaviourContext.waitEditedGiveawayPublicResultsContentMessage( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEditedContentMessage(initRequest, errorFactory) +) = waitEditedContentMessage(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt index 44cb50626d..7a736a8569 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventAction.kt @@ -34,233 +34,182 @@ import kotlinx.coroutines.flow.filter typealias EventMessageToEventMapper = suspend ChatEventMessage.() -> T? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitEvents( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitEvents( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { it.baseSentMessageUpdateOrNull() ?.data ?.chatEventMessageOrNull() ?.withEvent() ?.chatEvent.let(::listOfNotNull) } -suspend fun BehaviourContext.waitChannelEvents( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChannelEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitPrivateEvents( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPrivateEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitChatEvents( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitVideoChatEvents( - initRequest: Request<*>? = null, +fun BehaviourContext.waitVideoChatEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitVideoChatStartedEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitVideoChatStartedEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitVideoChatEndedEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitVideoChatEndedEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitVideoChatParticipantsInvitedEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitVideoChatParticipantsInvitedEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitMessageAutoDeleteTimerChangedEvents( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMessageAutoDeleteTimerChangedEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitPublicChatEvents( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPublicChatEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitCommonEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitCommonEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitGroupEvents( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGroupEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitSupergroupEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitSupergroupEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitChannelChatCreatedEvents( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChannelChatCreatedEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitDeleteChatPhotoEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitDeleteChatPhotoEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitGroupChatCreatedEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitGroupChatCreatedEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitLeftChatMemberEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitLeftChatMemberEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitNewChatPhotoEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitNewChatPhotoEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitNewChatMembersEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitNewChatMembersEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitNewChatTitleEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitNewChatTitleEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitPinnedMessageEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitPinnedMessageEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitProximityAlertTriggeredEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitProximityAlertTriggeredEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitSupergroupChatCreatedEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitSupergroupChatCreatedEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitSuccessfulPaymentEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitSuccessfulPaymentEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitRefundedPaymentEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitRefundedPaymentEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitUserLoggedInEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitUserLoggedInEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitWebAppDataEvents( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitWebAppDataEvents( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitForumTopicClosed( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitForumTopicClosed( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitForumTopicCreated( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitForumTopicCreated( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitForumTopicReopened( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitForumTopicReopened( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitForumTopicEdited( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitForumTopicEdited( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitGeneralForumTopicHidden( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitGeneralForumTopicHidden( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitGeneralForumTopicUnhidden( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitGeneralForumTopicUnhidden( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowed( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitWriteAccessAllowed( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedFromRequest( - initRequest: Request<*>? = null, +) = waitEvents(errorFactory) +fun BehaviourContext.waitWriteAccessAllowedFromRequest( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedFromAttachmentMenu( - initRequest: Request<*>? = null, +fun BehaviourContext.waitWriteAccessAllowedFromAttachmentMenu( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedFromWebAppLink( - initRequest: Request<*>? = null, +fun BehaviourContext.waitWriteAccessAllowedFromWebAppLink( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedOther( - initRequest: Request<*>? = null, +fun BehaviourContext.waitWriteAccessAllowedOther( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitChatSharedRequest( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatSharedRequest( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitUsersShared( - initRequest: Request<*>? = null, +fun BehaviourContext.waitUsersShared( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitUserShared( - initRequest: Request<*>? = null, +fun BehaviourContext.waitUserShared( errorFactory: NullableRequestBuilder<*> = { null } -) = waitUsersShared(initRequest, errorFactory).filter { it.userIds.size == 1 } +) = waitUsersShared(errorFactory).filter { it.userIds.size == 1 } -suspend fun BehaviourContext.waitChatShared( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatShared( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitChatBoostAdded( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatBoostAdded( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitChatBackgroundSet( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatBackgroundSet( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitGiveawayCreated( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayCreated( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitGiveawayCompleted( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayCompleted( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitGiveawayCompletedWithPrivateWinners( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGiveawayCompletedWithPrivateWinners( errorFactory: NullableRequestBuilder<*> = { null } -) = waitGiveawayCompleted(initRequest, errorFactory) +) = waitGiveawayCompleted(errorFactory) -suspend fun BehaviourContext.waitPaidMessagePriceChanged( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPaidMessagePriceChanged( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitRegularGiftSentOrReceived( - initRequest: Request<*>? = null, +fun BehaviourContext.waitRegularGiftSentOrReceived( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) -suspend fun BehaviourContext.waitUniqueGiftSentOrReceived( - initRequest: Request<*>? = null, +fun BehaviourContext.waitUniqueGiftSentOrReceived( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEvents(initRequest, errorFactory) +) = waitEvents(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt index 3ff34cb909..4bbcadc25c 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitEventActionMessages.kt @@ -30,214 +30,166 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filter @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitEventsMessages( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitEventsMessages( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow> = expectFlow( - initRequest, errorFactory ) { it.baseSentMessageUpdateOrNull() ?.data ?.chatEventMessageOrNull() ?.withEvent().let(::listOfNotNull) } -suspend fun BehaviourContext.waitChannelEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChannelEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitPrivateEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPrivateEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitChatEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitVideoChatEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitVideoChatEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitVideoChatStartedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitVideoChatStartedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitVideoChatEndedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitVideoChatEndedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitVideoChatParticipantsInvitedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitVideoChatParticipantsInvitedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitMessageAutoDeleteTimerChangedEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMessageAutoDeleteTimerChangedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitPublicChatEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPublicChatEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitCommonEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitCommonEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitGroupEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitGroupEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitSupergroupEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitSupergroupEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitChannelChatCreatedEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChannelChatCreatedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitDeleteChatPhotoEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitDeleteChatPhotoEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitGroupChatCreatedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitGroupChatCreatedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitLeftChatMemberEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitLeftChatMemberEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitNewChatPhotoEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitNewChatPhotoEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitNewChatMembersEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitNewChatMembersEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitNewChatTitleEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitNewChatTitleEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitPinnedMessageEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitPinnedMessageEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitProximityAlertTriggeredEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitProximityAlertTriggeredEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitSupergroupChatCreatedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitSupergroupChatCreatedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitSuccessfulPaymentEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitSuccessfulPaymentEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitRefundedPaymentEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitRefundedPaymentEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitUserLoggedInEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitUserLoggedInEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitWebAppDataEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitWebAppDataEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitForumTopicClosedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitForumTopicClosedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitForumTopicCreatedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitForumTopicCreatedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitForumTopicReopenedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitForumTopicReopenedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitForumTopicEditedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitForumTopicEditedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitGeneralForumTopicHiddenEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitGeneralForumTopicHiddenEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitGeneralForumTopicUnhiddenEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitGeneralForumTopicUnhiddenEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitWriteAccessAllowedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedFromRequestEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitWriteAccessAllowedFromRequestEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedFromAttachmentMenuEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitWriteAccessAllowedFromAttachmentMenuEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedFromWebAppLinkEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitWriteAccessAllowedFromWebAppLinkEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) -suspend fun BehaviourContext.waitWriteAccessAllowedOtherEventsMessages( - initRequest: Request<*>? = null, +) = waitEventsMessages(errorFactory) +fun BehaviourContext.waitWriteAccessAllowedOtherEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitChatSharedRequestEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatSharedRequestEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitUsersSharedEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitUsersSharedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitUserSharedEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitUserSharedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitUsersSharedEventsMessages(initRequest, errorFactory).filter { it.chatEvent.userIds.size == 1 } +) = waitUsersSharedEventsMessages(errorFactory).filter { it.chatEvent.userIds.size == 1 } -suspend fun BehaviourContext.waitChatSharedEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatSharedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitChatBoostAddedEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatBoostAddedEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitChatBackgroundSetEventsMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitChatBackgroundSetEventsMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitPaidMessagePriceChangedMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPaidMessagePriceChangedMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitRegularGiftSentOrReceivedMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitRegularGiftSentOrReceivedMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) -suspend fun BehaviourContext.waitUniqueGiftSentOrReceivedMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitUniqueGiftSentOrReceivedMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitEventsMessages(initRequest, errorFactory) +) = waitEventsMessages(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitInlineQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitInlineQuery.kt index 59bb45108c..c3af02bbe3 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitInlineQuery.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitInlineQuery.kt @@ -11,26 +11,21 @@ import kotlinx.coroutines.flow.Flow typealias InlineQueryMapper = suspend T.() -> T? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitInlineQueries( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitInlineQueries( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.inlineQueryUpdateOrNull() ?.data as? O).let(::listOfNotNull) } -suspend fun BehaviourContext.waitAnyInlineQuery( - initRequest: Request<*>? = null, +fun BehaviourContext.waitAnyInlineQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitInlineQueries(initRequest, errorFactory) +) = waitInlineQueries(errorFactory) -suspend fun BehaviourContext.waitBaseInlineQuery( - initRequest: Request<*>? = null, +fun BehaviourContext.waitBaseInlineQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitInlineQueries(initRequest, errorFactory) -suspend fun BehaviourContext.waitLocationInlineQuery( - initRequest: Request<*>? = null, +) = waitInlineQueries(errorFactory) +fun BehaviourContext.waitLocationInlineQuery( errorFactory: NullableRequestBuilder<*> = { null } -) = waitInlineQueries(initRequest, errorFactory) +) = waitInlineQueries(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroup.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroup.kt index 111c400f4a..f135f06f6c 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroup.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroup.kt @@ -12,10 +12,9 @@ import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage import kotlinx.coroutines.flow.Flow @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.buildMediaGroupWaiter( - initRequest: Request<*>? = null, +inline fun BehaviourContext.buildMediaGroupWaiter( noinline errorFactory: NullableRequestBuilder<*> = { null } -): Flow> = flowsUpdatesFilter.expectFlow(bot, initRequest, errorFactory) { update -> +): Flow> = flowsUpdatesFilter.expectFlow(bot, errorFactory) { update -> update.baseSentMessageUpdateOrNull() ?.data ?.commonMessageOrNull() ?.withContentOrNull>() ?.let { message -> if (message.content.group.all { it is T }) { listOf(message.content as MediaGroupContent) @@ -25,27 +24,21 @@ suspend inline fun BehaviourContext.buildMed } ?: emptyList() } -suspend fun BehaviourContext.waitMediaGroup( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMediaGroup( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitPlaylist( - initRequest: Request<*>? = null, +) = buildMediaGroupWaiter(errorFactory) +fun BehaviourContext.waitPlaylist( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitDocumentsGroup( - initRequest: Request<*>? = null, +) = buildMediaGroupWaiter(errorFactory) +fun BehaviourContext.waitDocumentsGroup( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitVisualGallery( - initRequest: Request<*>? = null, +) = buildMediaGroupWaiter(errorFactory) +fun BehaviourContext.waitVisualGallery( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitPhotoGallery( - initRequest: Request<*>? = null, +) = buildMediaGroupWaiter(errorFactory) +fun BehaviourContext.waitPhotoGallery( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitVideoGallery( - initRequest: Request<*>? = null, +) = buildMediaGroupWaiter(errorFactory) +fun BehaviourContext.waitVideoGallery( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupWaiter(initRequest, errorFactory) +) = buildMediaGroupWaiter(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroupMessages.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroupMessages.kt index 2b592a355e..df23a34787 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroupMessages.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMediaGroupMessages.kt @@ -12,10 +12,9 @@ import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage import kotlinx.coroutines.flow.Flow @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.buildMediaGroupMessagesWaiter( - initRequest: Request<*>? = null, +inline fun BehaviourContext.buildMediaGroupMessagesWaiter( noinline errorFactory: NullableRequestBuilder<*> = { null } -): Flow> = flowsUpdatesFilter.expectFlow(bot, initRequest, errorFactory) { update -> +): Flow> = flowsUpdatesFilter.expectFlow(bot, errorFactory) { update -> update.baseSentMessageUpdateOrNull() ?.data ?.commonMessageOrNull() ?.withContentOrNull>() ?.let { message -> if (message.content.group.all { it is T }) { listOf(message as MediaGroupMessage) @@ -25,27 +24,21 @@ suspend inline fun BehaviourContext.buildMed } ?: emptyList() } -suspend fun BehaviourContext.waitMediaGroupMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitMediaGroupMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitPlaylistMessages( - initRequest: Request<*>? = null, +) = buildMediaGroupMessagesWaiter(errorFactory) +fun BehaviourContext.waitPlaylistMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitDocumentsGroupMessages( - initRequest: Request<*>? = null, +) = buildMediaGroupMessagesWaiter(errorFactory) +fun BehaviourContext.waitDocumentsGroupMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitVisualGalleryMessages( - initRequest: Request<*>? = null, +) = buildMediaGroupMessagesWaiter(errorFactory) +fun BehaviourContext.waitVisualGalleryMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitPhotoGalleryMessages( - initRequest: Request<*>? = null, +) = buildMediaGroupMessagesWaiter(errorFactory) +fun BehaviourContext.waitPhotoGalleryMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) -suspend fun BehaviourContext.waitVideoGalleryMessages( - initRequest: Request<*>? = null, +) = buildMediaGroupMessagesWaiter(errorFactory) +fun BehaviourContext.waitVideoGalleryMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = buildMediaGroupMessagesWaiter(initRequest, errorFactory) +) = buildMediaGroupMessagesWaiter(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMention.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMention.kt index 817251f08b..0cdbec3d8d 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMention.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMention.kt @@ -74,11 +74,10 @@ fun Flow.filterMentions(user: User) = filter { * @see filterMentions * @see filterTextMentions */ -suspend fun BehaviourContext.waitContentWithMentions ( +fun BehaviourContext.waitContentWithMentions ( username: Username, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContent(initRequest, errorFactory).mapContent().filterMentions(username) +) = waitContent(errorFactory).mapContent().filterMentions(username) /** * Creates cold [Flow] with the messages with [TextedContent] where [userId] has been mentioned with text @@ -87,11 +86,10 @@ suspend fun BehaviourContext.waitContentWithMentions ( * @see filterMentions * @see dev.inmo.tgbotapi.types.message.textsources.TextMentionTextSource */ -suspend fun BehaviourContext.waitContentWithTextMentions ( +fun BehaviourContext.waitContentWithTextMentions ( userId: UserId, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitTextedContent(initRequest, errorFactory).filterTextMentions(userId) +) = waitTextedContent(errorFactory).filterTextMentions(userId) /** * Creates cold [Flow] with the messages with [TextedContent] where [user] has been mentioned as text or mentioned @@ -100,8 +98,7 @@ suspend fun BehaviourContext.waitContentWithTextMentions ( * @see filterMentions * @see filterTextMentions */ -suspend fun BehaviourContext.waitContentWithMentions ( +fun BehaviourContext.waitContentWithMentions ( user: User, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitTextedContent(initRequest, errorFactory).filterMentions(user) +) = waitTextedContent(errorFactory).filterMentions(user) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMentionMessage.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMentionMessage.kt index 27e61ae457..02d89e6ac8 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMentionMessage.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitMentionMessage.kt @@ -49,11 +49,10 @@ fun Flow>.filterMentionsMessages(user: User) = filt * @see filterMentions * @see filterTextMentions */ -suspend fun BehaviourContext.waitContentMessageWithMentions ( +fun BehaviourContext.waitContentMessageWithMentions ( username: Username, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitContentMessage(initRequest, errorFactory).mapWithContent().filterMentionsMessages(username) +) = waitContentMessage(errorFactory).mapWithContent().filterMentionsMessages(username) /** * Creates cold [Flow] with the messages with [TextedContent] where [userId] has been mentioned with text @@ -62,11 +61,10 @@ suspend fun BehaviourContext.waitContentMessageWithMentions ( * @see filterMentions * @see dev.inmo.tgbotapi.types.message.textsources.TextMentionTextSource */ -suspend fun BehaviourContext.waitContentMessageWithTextMentions ( +fun BehaviourContext.waitContentMessageWithTextMentions ( userId: UserId, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitTextedContentMessage(initRequest, errorFactory).filterTextMentionsMessages(userId) +) = waitTextedContentMessage(errorFactory).filterTextMentionsMessages(userId) /** * Creates cold [Flow] with the messages with [TextedContent] where [user] has been mentioned as text or mentioned @@ -75,8 +73,7 @@ suspend fun BehaviourContext.waitContentMessageWithTextMentions ( * @see filterMentions * @see filterTextMentions */ -suspend fun BehaviourContext.waitContentMessageWithMentions ( +fun BehaviourContext.waitContentMessageWithMentions ( user: User, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } -) = waitTextedContentMessage(initRequest, errorFactory).filterMentionsMessages(user) +) = waitTextedContentMessage(errorFactory).filterMentionsMessages(user) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPaidMediaPurchased.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPaidMediaPurchased.kt index d7c65b1296..71cc4c9b0f 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPaidMediaPurchased.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPaidMediaPurchased.kt @@ -11,33 +11,27 @@ import dev.inmo.tgbotapi.types.business_connection.BusinessConnection import dev.inmo.tgbotapi.types.message.payments.PaidMediaPurchased import kotlinx.coroutines.flow.Flow -suspend fun BehaviourContext.waitPaidMediaPurchased( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPaidMediaPurchased( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.paidMediaPurchasedUpdateOrNull() ?.data).let(::listOfNotNull) } -suspend fun BehaviourContext.waitPaidMediaPurchased( +fun BehaviourContext.waitPaidMediaPurchased( paidMediaPayloadRegex: Regex, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.paidMediaPurchasedUpdateOrNull() ?.data ?.takeIf { paidMediaPayloadRegex.matches(it.payload.string) }).let(::listOfNotNull) } -suspend fun BehaviourContext.waitPaidMediaPurchased( +fun BehaviourContext.waitPaidMediaPurchased( paidMediaPayload: PaidMediaPayload, - initRequest: Request<*>? = null, errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.paidMediaPurchasedUpdateOrNull() ?.data ?.takeIf { it.payload == paidMediaPayload }).let(::listOfNotNull) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPassportData.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPassportData.kt index e428bbee5d..0e724b391d 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPassportData.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPassportData.kt @@ -14,17 +14,14 @@ import kotlinx.coroutines.flow.Flow typealias PassportMessageMapper = suspend PassportMessage.() -> PassportData @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitPassportMessagesWith( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitPassportMessagesWith( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { it.messageUpdateOrNull() ?.data ?.passportMessageOrNull() ?.passportData ?.data ?.filterIsInstance() ?: emptyList() } -suspend fun BehaviourContext.waitAnyPassportMessages( - initRequest: Request<*>? = null, +fun BehaviourContext.waitAnyPassportMessages( errorFactory: NullableRequestBuilder<*> = { null } -) = waitPassportMessagesWith(initRequest, errorFactory) +) = waitPassportMessagesWith(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollAnswers.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollAnswers.kt index a04232acfe..36ddd00b3d 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollAnswers.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollAnswers.kt @@ -8,11 +8,9 @@ import kotlinx.coroutines.flow.Flow typealias PollAnswerMapper = suspend PollAnswer.() -> PollAnswer? -suspend fun BehaviourContext.waitPollAnswers( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPollAnswers( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { it.pollAnswerUpdateOrNull() ?.data.let(::listOfNotNull) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollUpdates.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollUpdates.kt index 23ef770caa..6ff455ef65 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollUpdates.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPollUpdates.kt @@ -11,11 +11,9 @@ import kotlinx.coroutines.flow.Flow typealias PollMapper = suspend T.() -> T? @RiskFeature(lowLevelRiskFeatureMessage) -suspend inline fun BehaviourContext.waitPolls( - initRequest: Request<*>? = null, +inline fun BehaviourContext.waitPolls( noinline errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.pollUpdateOrNull() ?.data as? O).let(::listOfNotNull) @@ -24,23 +22,20 @@ suspend inline fun BehaviourContext.waitPolls( /** * This wait will be triggered only for stopped polls and polls, which are sent by the bot */ -suspend fun BehaviourContext.waitPollUpdates( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPollUpdates( errorFactory: NullableRequestBuilder<*> = { null } -) = waitPolls(initRequest, errorFactory) +) = waitPolls(errorFactory) /** * This wait will be triggered only for stopped polls and polls, which are sent by the bot */ -suspend fun BehaviourContext.waitQuizPollUpdates( - initRequest: Request<*>? = null, +fun BehaviourContext.waitQuizPollUpdates( errorFactory: NullableRequestBuilder<*> = { null } -) = waitPolls(initRequest, errorFactory) +) = waitPolls(errorFactory) /** * This wait will be triggered only for stopped polls and polls, which are sent by the bot */ -suspend fun BehaviourContext.waitRegularPollUpdates( - initRequest: Request<*>? = null, +fun BehaviourContext.waitRegularPollUpdates( errorFactory: NullableRequestBuilder<*> = { null } -) = waitPolls(initRequest, errorFactory) +) = waitPolls(errorFactory) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPreCheckoutQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPreCheckoutQuery.kt index c3a12896c0..5aa38a3e03 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPreCheckoutQuery.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitPreCheckoutQuery.kt @@ -8,11 +8,9 @@ import kotlinx.coroutines.flow.Flow typealias PreCheckoutQueryMapper = suspend PreCheckoutQuery.() -> PreCheckoutQuery? -suspend fun BehaviourContext.waitPreCheckoutQueries( - initRequest: Request<*>? = null, +fun BehaviourContext.waitPreCheckoutQueries( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { it.preCheckoutQueryUpdateOrNull() ?.data.let(::listOfNotNull) diff --git a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitShippingQuery.kt b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitShippingQuery.kt index 493c6d7beb..6c04b356af 100644 --- a/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitShippingQuery.kt +++ b/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitShippingQuery.kt @@ -8,11 +8,9 @@ import kotlinx.coroutines.flow.Flow typealias ShippingQueryMapper = suspend ShippingQuery.() -> ShippingQuery? -suspend fun BehaviourContext.waitShippingQueries( - initRequest: Request<*>? = null, +fun BehaviourContext.waitShippingQueries( errorFactory: NullableRequestBuilder<*> = { null } ): Flow = expectFlow( - initRequest, errorFactory ) { (it.shippingQueryUpdateOrNull() ?.data).let(::listOfNotNull)