From 1f0af84adcefe962d318a657d928963dbfab5853 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Fri, 15 Mar 2019 07:47:46 +0800 Subject: [PATCH] rewrite structure of media groups updates --- .../ChannelPostMediaGroupUpdate.kt | 12 ++-- .../EditChannelPostMediaGroupUpdate.kt | 10 ++- .../EditMessageMediaGroupUpdate.kt | 12 ++-- .../MediaGroupUpdates/MediaGroupUpdate.kt | 6 +- .../MessageMediaGroupUpdate.kt | 10 ++- .../BaseMessageUpdateToMediaGroupUpdate.kt | 7 +- .../utils/extensions/UpdatesFilter.kt | 69 +++++++++---------- .../utils/extensions/UpdatesPoller.kt | 21 +++--- .../utils/extensions/UpdatesPolling.kt | 15 ++-- .../utils/extensions/Webhooks.kt | 13 ++-- 10 files changed, 85 insertions(+), 90 deletions(-) diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/ChannelPostMediaGroupUpdate.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/ChannelPostMediaGroupUpdate.kt index 38d07b2ac9..4e1f82900f 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/ChannelPostMediaGroupUpdate.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/ChannelPostMediaGroupUpdate.kt @@ -4,13 +4,11 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage import com.github.insanusmokrassar.TelegramBotAPI.types.update.ChannelPostUpdate import com.github.insanusmokrassar.TelegramBotAPI.types.update.MessageUpdate +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate data class ChannelPostMediaGroupUpdate( - override val updateId: UpdateIdentifier, - override val data: MediaGroupMessage + override val origins: List ) : MediaGroupUpdate { - constructor(sourceUpdate: ChannelPostUpdate) : this( - sourceUpdate.updateId, - sourceUpdate.data as MediaGroupMessage - ) -} \ No newline at end of file + override val updateId: UpdateIdentifier = origins.last().updateId + override val data: List = origins.mapNotNull { it.data as? MediaGroupMessage } +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/EditChannelPostMediaGroupUpdate.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/EditChannelPostMediaGroupUpdate.kt index dc90196f52..82d9bae6fc 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/EditChannelPostMediaGroupUpdate.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/EditChannelPostMediaGroupUpdate.kt @@ -3,13 +3,11 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdate import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage import com.github.insanusmokrassar.TelegramBotAPI.types.update.* +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate data class EditChannelPostMediaGroupUpdate( - override val updateId: UpdateIdentifier, - override val data: MediaGroupMessage + override val origins: List ) : MediaGroupUpdate { - constructor(sourceUpdate: EditChannelPostUpdate) : this( - sourceUpdate.updateId, - sourceUpdate.data as MediaGroupMessage - ) + override val updateId: UpdateIdentifier = origins.last().updateId + override val data: List = origins.mapNotNull { it.data as? MediaGroupMessage } } \ No newline at end of file diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/EditMessageMediaGroupUpdate.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/EditMessageMediaGroupUpdate.kt index 529703f845..c5c9158e6f 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/EditMessageMediaGroupUpdate.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/EditMessageMediaGroupUpdate.kt @@ -4,13 +4,11 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage import com.github.insanusmokrassar.TelegramBotAPI.types.update.EditMessageUpdate import com.github.insanusmokrassar.TelegramBotAPI.types.update.MessageUpdate +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate data class EditMessageMediaGroupUpdate( - override val updateId: UpdateIdentifier, - override val data: MediaGroupMessage + override val origins: List ) : MediaGroupUpdate { - constructor(sourceUpdate: EditMessageUpdate) : this( - sourceUpdate.updateId, - sourceUpdate.data as MediaGroupMessage - ) -} \ No newline at end of file + override val updateId: UpdateIdentifier = origins.last().updateId + override val data: List = origins.mapNotNull { it.data as? MediaGroupMessage } +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/MediaGroupUpdate.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/MediaGroupUpdate.kt index 1e36a565d0..cccce9247b 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/MediaGroupUpdate.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/MediaGroupUpdate.kt @@ -2,7 +2,9 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdate import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update -interface MediaGroupUpdate: BaseMessageUpdate { - override val data: MediaGroupMessage +interface MediaGroupUpdate: Update { + override val data: List + val origins: List } diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/MessageMediaGroupUpdate.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/MessageMediaGroupUpdate.kt index c10024551a..57fa89c54c 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/MessageMediaGroupUpdate.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/MediaGroupUpdates/MessageMediaGroupUpdate.kt @@ -3,13 +3,11 @@ package com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdate import com.github.insanusmokrassar.TelegramBotAPI.types.UpdateIdentifier import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage import com.github.insanusmokrassar.TelegramBotAPI.types.update.MessageUpdate +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate data class MessageMediaGroupUpdate( - override val updateId: UpdateIdentifier, - override val data: MediaGroupMessage + override val origins: List ) : MediaGroupUpdate { - constructor(sourceUpdate: MessageUpdate) : this( - sourceUpdate.updateId, - sourceUpdate.data as MediaGroupMessage - ) + override val updateId: UpdateIdentifier = origins.last().updateId + override val data: List = origins.mapNotNull { it.data as? MediaGroupMessage } } \ No newline at end of file diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/BaseMessageUpdateToMediaGroupUpdate.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/BaseMessageUpdateToMediaGroupUpdate.kt index 27413b5dd0..e94d4af561 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/BaseMessageUpdateToMediaGroupUpdate.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/BaseMessageUpdateToMediaGroupUpdate.kt @@ -1,16 +1,15 @@ package com.github.insanusmokrassar.TelegramBotAPI.utils -import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage import com.github.insanusmokrassar.TelegramBotAPI.types.update.* import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.* import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate -fun BaseMessageUpdate.toMediaGroupUpdate(): MediaGroupUpdate? = (this as? MediaGroupUpdate) ?: ((data as? MediaGroupMessage) ?.let { - when (this) { +fun List.toMediaGroupUpdate(): MediaGroupUpdate? = (this as? MediaGroupUpdate) ?: let { + when (first()) { is MessageUpdate -> MessageMediaGroupUpdate(this) is EditMessageUpdate -> EditMessageMediaGroupUpdate(this) is ChannelPostUpdate -> ChannelPostMediaGroupUpdate(this) is EditChannelPostUpdate -> EditChannelPostMediaGroupUpdate(this) else -> null } -}) +} diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesFilter.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesFilter.kt index 1892a48460..a15a6a931a 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesFilter.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesFilter.kt @@ -4,24 +4,25 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.update.* import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.* import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update import com.github.insanusmokrassar.TelegramBotAPI.utils.toMediaGroupUpdate data class UpdatesFilter( private val messageCallback: UpdateReceiver? = null, - private val messageMediaGroupCallback: UpdateReceiver>? = null, + private val messageMediaGroupCallback: UpdateReceiver? = null, private val editedMessageCallback: UpdateReceiver? = null, - private val editedMessageMediaGroupCallback: UpdateReceiver>? = null, + private val editedMessageMediaGroupCallback: UpdateReceiver? = null, private val channelPostCallback: UpdateReceiver? = null, - private val channelPostMediaGroupCallback: UpdateReceiver>? = null, + private val channelPostMediaGroupCallback: UpdateReceiver? = null, private val editedChannelPostCallback: UpdateReceiver? = null, - private val editedChannelPostMediaGroupCallback: UpdateReceiver>? = null, + private val editedChannelPostMediaGroupCallback: UpdateReceiver? = null, private val chosenInlineResultCallback: UpdateReceiver? = null, private val inlineQueryCallback: UpdateReceiver? = null, private val callbackQueryCallback: UpdateReceiver? = null, private val shippingQueryCallback: UpdateReceiver? = null, private val preCheckoutQueryCallback: UpdateReceiver? = null ) { - val asUpdateReceiver: UpdateReceiver = this::invoke + val asUpdateReceiver: UpdateReceiver = this::invoke val allowedUpdates = listOfNotNull( (messageCallback ?: messageMediaGroupCallback) ?.let { UPDATE_MESSAGE }, (editedMessageCallback ?: editedMessageMediaGroupCallback) ?.let { UPDATE_EDITED_MESSAGE }, @@ -34,42 +35,40 @@ data class UpdatesFilter( preCheckoutQueryCallback ?.let { UPDATE_PRE_CHECKOUT_QUERY } ) - suspend fun invoke(update: Any) { + suspend fun invoke(update: Update) { when (update) { is MessageUpdate -> messageCallback ?.invoke(update) - is List<*> -> when (update.firstOrNull()) { - is MessageUpdate -> update.mapNotNull { it as? MessageUpdate }.let { mappedList -> - messageMediaGroupCallback ?.also { receiver -> - receiver(mappedList.mapNotNull { it.toMediaGroupUpdate() }) - } ?: messageCallback ?.also { receiver -> - mappedList.forEach { receiver(it) } - } - } - is EditMessageUpdate -> update.mapNotNull { it as? EditMessageUpdate }.let { mappedList -> - editedMessageMediaGroupCallback ?.also { receiver -> - receiver(mappedList.mapNotNull { it.toMediaGroupUpdate() }) - } ?: editedMessageCallback ?.also { receiver -> - mappedList.forEach { receiver(it) } - } - } - is ChannelPostUpdate -> update.mapNotNull { it as? ChannelPostUpdate }.let { mappedList -> - channelPostMediaGroupCallback ?.also { receiver -> - receiver(mappedList.mapNotNull { it.toMediaGroupUpdate() }) - } ?: channelPostCallback ?.also { receiver -> - mappedList.forEach { receiver(it) } - } - } - is EditChannelPostUpdate -> update.mapNotNull { it as? EditChannelPostUpdate }.let { mappedList -> - editedChannelPostMediaGroupCallback ?.also { receiver -> - receiver(mappedList.mapNotNull { it.toMediaGroupUpdate() }) - } ?: editedChannelPostCallback ?.also { receiver -> - mappedList.forEach { receiver(it) } - } + is MessageMediaGroupUpdate -> messageMediaGroupCallback ?.also { receiver -> + receiver(update) + } ?: messageCallback ?.also { receiver -> + update.origins.mapNotNull { it as? MessageUpdate }.forEach { + receiver(it) } } is EditMessageUpdate -> editedMessageCallback ?.invoke(update) + is EditMessageMediaGroupUpdate -> editedMessageMediaGroupCallback ?.also { receiver -> + receiver(update) + } ?: editedMessageCallback ?.also { receiver -> + update.origins.mapNotNull { it as? EditMessageUpdate }.forEach { + receiver(it) + } + } is ChannelPostUpdate -> channelPostCallback ?.invoke(update) + is ChannelPostMediaGroupUpdate -> channelPostMediaGroupCallback ?.also { receiver -> + receiver(update) + } ?: channelPostCallback ?.also { receiver -> + update.origins.mapNotNull { it as? ChannelPostUpdate }.forEach { + receiver(it) + } + } is EditChannelPostUpdate -> editedChannelPostCallback ?.invoke(update) + is EditChannelPostMediaGroupUpdate -> editedChannelPostMediaGroupCallback ?.also { receiver -> + receiver(update) + } ?: editedChannelPostCallback ?.also { receiver -> + update.origins.mapNotNull { it as? EditChannelPostUpdate }.forEach { + receiver(it) + } + } is ChosenInlineResultUpdate -> chosenInlineResultCallback ?.invoke(update) is InlineQueryUpdate -> inlineQueryCallback ?.invoke(update) is CallbackQueryUpdate -> callbackQueryCallback ?.invoke(update) @@ -81,7 +80,7 @@ data class UpdatesFilter( fun createSimpleUpdateFilter( messageCallback: UpdateReceiver? = null, - mediaGroupCallback: UpdateReceiver>? = null, + mediaGroupCallback: UpdateReceiver? = null, editedMessageCallback: UpdateReceiver? = null, channelPostCallback: UpdateReceiver? = null, editedChannelPostCallback: UpdateReceiver? = null, diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesPoller.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesPoller.kt index f32795c25d..3009dced12 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesPoller.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesPoller.kt @@ -7,6 +7,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaG import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update import com.github.insanusmokrassar.TelegramBotAPI.utils.mediaGroupId +import com.github.insanusmokrassar.TelegramBotAPI.utils.toMediaGroupUpdate import kotlinx.coroutines.* import java.util.concurrent.Executors @@ -15,30 +16,26 @@ class UpdatesPoller( private val requestsDelayMillis: Long = 1000, private val scope: CoroutineScope = CoroutineScope(Executors.newFixedThreadPool(4).asCoroutineDispatcher()), private val allowedUpdates: List? = null, - private val block: UpdateReceiver + private val block: UpdateReceiver ) { private var lastHandledUpdate: UpdateIdentifier = 0L private val mediaGroup: MutableList = mutableListOf() private var pollerJob: Job? = null - private suspend fun sendToBlock(data: Any) { + private suspend fun sendToBlock(data: Update) { block(data) - lastHandledUpdate = when (data) { - is Update -> data.updateId - is List<*> -> (data.last() as? Update) ?.updateId ?: throw IllegalStateException( - "Found non-updates oriented list" - ) - else -> throw IllegalStateException( - "Unknown type of data" - ) - } + lastHandledUpdate = data.updateId } private suspend fun pushMediaGroupUpdate(update: BaseMessageUpdate? = null) { val inputMediaGroupId = (update ?.data as? MediaGroupMessage) ?.mediaGroupId if (mediaGroup.isNotEmpty() && inputMediaGroupId ?.equals(mediaGroup.mediaGroupId) != true) { - sendToBlock(listOf(*mediaGroup.toTypedArray())) + listOf(*mediaGroup.toTypedArray()).toMediaGroupUpdate() ?.let { + sendToBlock(it) + } ?: mediaGroup.forEach { + sendToBlock(it) + } mediaGroup.clear() } inputMediaGroupId ?.let { diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesPolling.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesPolling.kt index 81cfa0b971..49ae28603e 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesPolling.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/UpdatesPolling.kt @@ -2,8 +2,9 @@ package com.github.insanusmokrassar.TelegramBotAPI.utils.extensions import com.github.insanusmokrassar.TelegramBotAPI.bot.RequestsExecutor import com.github.insanusmokrassar.TelegramBotAPI.types.update.* -import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.MediaGroupUpdate +import com.github.insanusmokrassar.TelegramBotAPI.types.update.MediaGroupUpdates.* import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate +import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update import kotlinx.coroutines.* import java.util.concurrent.Executors @@ -13,20 +14,20 @@ fun RequestsExecutor.startGettingOfUpdates( requestsDelayMillis: Long = 1000, scope: CoroutineScope = CoroutineScope(Executors.newFixedThreadPool(4).asCoroutineDispatcher()), allowedUpdates: List? = null, - block: UpdateReceiver + block: UpdateReceiver ): Job { return UpdatesPoller(this, requestsDelayMillis, scope, allowedUpdates, block).start() } fun RequestsExecutor.startGettingOfUpdates( messageCallback: UpdateReceiver? = null, - messageMediaGroupCallback: UpdateReceiver>? = null, + messageMediaGroupCallback: UpdateReceiver? = null, editedMessageCallback: UpdateReceiver? = null, - editedMessageMediaGroupCallback: UpdateReceiver>? = null, + editedMessageMediaGroupCallback: UpdateReceiver? = null, channelPostCallback: UpdateReceiver? = null, - channelPostMediaGroupCallback: UpdateReceiver>? = null, + channelPostMediaGroupCallback: UpdateReceiver? = null, editedChannelPostCallback: UpdateReceiver? = null, - editedChannelPostMediaGroupCallback: UpdateReceiver>? = null, + editedChannelPostMediaGroupCallback: UpdateReceiver? = null, chosenInlineResultCallback: UpdateReceiver? = null, inlineQueryCallback: UpdateReceiver? = null, callbackQueryCallback: UpdateReceiver? = null, @@ -60,7 +61,7 @@ fun RequestsExecutor.startGettingOfUpdates( fun RequestsExecutor.startGettingOfUpdates( messageCallback: UpdateReceiver? = null, - mediaGroupCallback: UpdateReceiver>? = null, + mediaGroupCallback: UpdateReceiver? = null, editedMessageCallback: UpdateReceiver? = null, channelPostCallback: UpdateReceiver? = null, editedChannelPostCallback: UpdateReceiver? = null, diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/Webhooks.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/Webhooks.kt index 8201dbf37d..1e848cfa96 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/Webhooks.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/Webhooks.kt @@ -8,6 +8,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaG import com.github.insanusmokrassar.TelegramBotAPI.types.update.* import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.BaseMessageUpdate import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update +import com.github.insanusmokrassar.TelegramBotAPI.utils.toMediaGroupUpdate import io.ktor.application.Application import io.ktor.application.call import io.ktor.request.receiveText @@ -41,7 +42,7 @@ suspend fun RequestsExecutor.setWebhook( allowedUpdates: List? = null, maxAllowedConnections: Int? = null, engineFactory: ApplicationEngineFactory<*, *> = Netty, - block: UpdateReceiver + block: UpdateReceiver ): Job { val executeDeferred = certificate ?.let { executeAsync( @@ -60,7 +61,7 @@ suspend fun RequestsExecutor.setWebhook( ) ) val updatesChannel = Channel(Channel.UNLIMITED) - val mediaGroupChannel = Channel>(Channel.UNLIMITED) + val mediaGroupChannel = Channel>(Channel.UNLIMITED) val mediaGroupAccumulatedChannel = mediaGroupChannel.accumulateByKey( 1000L, scope = scope @@ -113,14 +114,18 @@ suspend fun RequestsExecutor.setWebhook( for (update in updatesChannel) { val data = update.data when (data) { - is MediaGroupMessage -> mediaGroupChannel.send(data.mediaGroupId to update) + is MediaGroupMessage -> mediaGroupChannel.send(data.mediaGroupId to update as BaseMessageUpdate) else -> block(update) } } } launch { for (mediaGroupUpdate in mediaGroupAccumulatedChannel) { - block(mediaGroupUpdate.second.mapNotNull { (it as? BaseMessageUpdate) }) + mediaGroupUpdate.second.toMediaGroupUpdate() ?.let { + block(it) + } ?: mediaGroupUpdate.second.forEach { + block(it) + } } } engine.start(false)