2021-01-08 05:02:18 +00:00
|
|
|
package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations
|
|
|
|
|
|
|
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
2022-05-21 17:38:42 +00:00
|
|
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.utils.SimpleFilter
|
2022-08-05 10:31:39 +00:00
|
|
|
import dev.inmo.tgbotapi.extensions.utils.sentMediaGroupUpdateOrNull
|
2022-05-21 17:38:42 +00:00
|
|
|
import dev.inmo.tgbotapi.extensions.utils.withContent
|
2021-01-08 05:02:18 +00:00
|
|
|
import dev.inmo.tgbotapi.requests.abstracts.Request
|
|
|
|
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
2022-05-01 05:52:02 +00:00
|
|
|
import dev.inmo.tgbotapi.types.message.content.*
|
|
|
|
import dev.inmo.tgbotapi.types.message.content.AudioMediaGroupContent
|
|
|
|
import dev.inmo.tgbotapi.types.message.content.DocumentMediaGroupContent
|
|
|
|
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
|
|
|
import dev.inmo.tgbotapi.types.message.content.VisualMediaGroupContent
|
2022-05-21 19:27:52 +00:00
|
|
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
|
|
|
import dev.inmo.tgbotapi.utils.lowLevelRiskFeatureMessage
|
|
|
|
import kotlinx.coroutines.flow.Flow
|
|
|
|
import kotlinx.coroutines.flow.map
|
2021-01-08 05:02:18 +00:00
|
|
|
|
2022-05-21 17:38:42 +00:00
|
|
|
typealias MediaGroupFilter<T> = SimpleFilter<List<MediaGroupMessage<T>>>
|
2021-04-03 08:51:21 +00:00
|
|
|
|
2022-05-21 19:27:52 +00:00
|
|
|
|
|
|
|
@RiskFeature(lowLevelRiskFeatureMessage)
|
|
|
|
suspend inline fun <reified O : MediaGroupContent> BehaviourContext.buildMediaGroupWaiter(
|
2021-01-08 05:02:18 +00:00
|
|
|
initRequest: Request<*>? = null,
|
2022-05-21 19:27:52 +00:00
|
|
|
noinline errorFactory: NullableRequestBuilder<*> = { null }
|
|
|
|
): Flow<List<O>> = buildMediaGroupMessagesWaiter<O>(initRequest, errorFactory).map { it.map { it.content } }
|
2021-01-08 05:02:18 +00:00
|
|
|
|
2021-01-19 12:50:45 +00:00
|
|
|
suspend fun BehaviourContext.waitMediaGroup(
|
|
|
|
initRequest: Request<*>? = null,
|
2022-05-21 19:27:52 +00:00
|
|
|
errorFactory: NullableRequestBuilder<*> = { null }
|
|
|
|
) = buildMediaGroupWaiter<MediaGroupContent>(initRequest, errorFactory)
|
2021-01-08 05:02:18 +00:00
|
|
|
suspend fun BehaviourContext.waitPlaylist(
|
|
|
|
initRequest: Request<*>? = null,
|
2022-05-21 19:27:52 +00:00
|
|
|
errorFactory: NullableRequestBuilder<*> = { null }
|
|
|
|
) = buildMediaGroupWaiter<AudioMediaGroupContent>(initRequest, errorFactory)
|
2021-01-08 05:02:18 +00:00
|
|
|
suspend fun BehaviourContext.waitDocumentsGroup(
|
|
|
|
initRequest: Request<*>? = null,
|
2022-05-21 19:27:52 +00:00
|
|
|
errorFactory: NullableRequestBuilder<*> = { null }
|
|
|
|
) = buildMediaGroupWaiter<DocumentMediaGroupContent>(initRequest, errorFactory)
|
2021-01-08 05:02:18 +00:00
|
|
|
suspend fun BehaviourContext.waitVisualGallery(
|
|
|
|
initRequest: Request<*>? = null,
|
2022-05-21 19:27:52 +00:00
|
|
|
errorFactory: NullableRequestBuilder<*> = { null }
|
|
|
|
) = buildMediaGroupWaiter<VisualMediaGroupContent>(initRequest, errorFactory)
|
2021-01-08 05:02:18 +00:00
|
|
|
suspend fun BehaviourContext.waitPhotoGallery(
|
|
|
|
initRequest: Request<*>? = null,
|
2022-05-21 19:27:52 +00:00
|
|
|
errorFactory: NullableRequestBuilder<*> = { null }
|
|
|
|
) = buildMediaGroupWaiter<PhotoContent>(initRequest, errorFactory)
|
2021-01-08 05:02:18 +00:00
|
|
|
suspend fun BehaviourContext.waitVideoGallery(
|
|
|
|
initRequest: Request<*>? = null,
|
2022-05-21 19:27:52 +00:00
|
|
|
errorFactory: NullableRequestBuilder<*> = { null }
|
|
|
|
) = buildMediaGroupWaiter<VideoContent>(initRequest, errorFactory)
|