1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-06-01 23:45:25 +00:00
tgbotapi/tgbotapi.behaviour_builder/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/expectations/WaitContentMessage.kt

151 lines
7.7 KiB
Kotlin
Raw Normal View History

2022-04-16 18:22:00 +00:00
@file:Suppress("unused")
package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations
import dev.inmo.micro_utils.coroutines.safelyWithoutExceptions
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.utils.withContent
2023-05-18 06:59:35 +00:00
import dev.inmo.tgbotapi.extensions.utils.withContentOrNull
2022-04-16 18:22:00 +00:00
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
2022-04-16 18:22:00 +00:00
import kotlinx.coroutines.flow.Flow
2023-05-18 06:59:35 +00:00
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.mapNotNull
2022-04-16 18:22:00 +00:00
typealias CommonMessageToCommonMessageMapper<T> = suspend CommonMessage<T>.() -> CommonMessage<T>?
@RiskFeature(lowLevelRiskFeatureMessage)
2023-05-18 06:59:35 +00:00
suspend inline fun BehaviourContext.waitContentMessage(
2022-04-16 18:22:00 +00:00
initRequest: Request<*>? = null,
noinline errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
): Flow<CommonMessage<MessageContent>> = expectFlow(
2022-04-16 18:22:00 +00:00
initRequest,
errorFactory
) {
2023-02-13 05:49:36 +00:00
if (it !is BaseSentMessageUpdate) {
return@expectFlow emptyList()
}
2023-05-18 06:59:35 +00:00
listOfNotNull((it.data as? CommonMessage<*>))
2022-04-16 18:22:00 +00:00
}
2023-05-18 06:59:35 +00:00
inline fun <reified T : MessageContent> Flow<CommonMessage<MessageContent>>.mapWithContent() = mapNotNull { it.withContentOrNull<T>() }
2022-04-16 18:22:00 +00:00
2023-02-13 06:03:17 +00:00
suspend fun BehaviourContext.waitAnyContentMessage(
2023-02-13 05:49:36 +00:00
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null },
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory)
suspend fun BehaviourContext.waitTextedContentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null },
) = waitContentMessage(initRequest, errorFactory).mapWithContent<TextedContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitContactMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<ContactContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitDiceMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<DiceContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitGameMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<GameContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitLocationMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<LocationContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitLiveLocationMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<LiveLocationContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitStaticLocationMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<StaticLocationContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitPollMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<PollContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitTextMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<TextContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitVenueMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<VenueContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitAudioMediaGroupContentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<AudioMediaGroupPartContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitDocumentMediaGroupContentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<DocumentMediaGroupPartContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitMediaMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<MediaContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitAnyMediaGroupContentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<MediaGroupPartContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitVisualMediaGroupContentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<VisualMediaGroupPartContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitTextedMediaContentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<TextedMediaContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitAnimationMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<AnimationContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitAudioMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<AudioContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitDocumentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<DocumentContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitPhotoMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<PhotoContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitStickerMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<StickerContent>()
2023-02-13 05:49:36 +00:00
suspend fun BehaviourContext.waitVideoMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<VideoContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitVideoNoteMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<VideoNoteContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitVoiceMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<VoiceContent>()
2022-04-16 18:22:00 +00:00
suspend fun BehaviourContext.waitInvoiceMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<InvoiceContent>()
suspend fun BehaviourContext.waitVisualContentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<VisualMediaGroupPartContent>()
suspend fun BehaviourContext.waitMediaContentMessage(
initRequest: Request<*>? = null,
errorFactory: NullableRequestBuilder<*> = { null }
2023-05-18 06:59:35 +00:00
) = waitContentMessage(initRequest, errorFactory).mapWithContent<MediaContent>()