1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-06-03 00:15:27 +00:00
tgbotapi/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/updateshandlers/FlowsUpdatesFilter.kt

140 lines
7.3 KiB
Kotlin
Raw Normal View History

2020-10-04 11:06:30 +00:00
package dev.inmo.tgbotapi.updateshandlers
2019-05-10 03:54:57 +00:00
2020-10-04 11:06:30 +00:00
import dev.inmo.tgbotapi.types.ALL_UPDATES_LIST
import dev.inmo.tgbotapi.types.update.*
import dev.inmo.tgbotapi.types.update.MediaGroupUpdates.*
import dev.inmo.tgbotapi.types.update.abstracts.UnknownUpdate
import dev.inmo.tgbotapi.types.update.abstracts.Update
2021-06-27 19:00:20 +00:00
import kotlinx.coroutines.channels.BufferOverflow
2020-06-27 03:43:24 +00:00
import kotlinx.coroutines.flow.*
2019-05-10 03:54:57 +00:00
2021-01-19 12:50:45 +00:00
interface FlowsUpdatesFilter : UpdatesFilter {
override val allowedUpdates: List<String>
get() = ALL_UPDATES_LIST
val allUpdatesFlow: Flow<Update>
val allUpdatesWithoutMediaGroupsGroupingFlow: Flow<Update>
2021-08-22 17:14:56 +00:00
val messagesFlow: Flow<MessageUpdate>
val messageMediaGroupsFlow: Flow<MessageMediaGroupUpdate>
val editedMessagesFlow: Flow<EditMessageUpdate>
val editedMessageMediaGroupsFlow: Flow<EditMessageMediaGroupUpdate>
val channelPostsFlow: Flow<ChannelPostUpdate>
val channelPostMediaGroupsFlow: Flow<ChannelPostMediaGroupUpdate>
val editedChannelPostsFlow: Flow<EditChannelPostUpdate>
val editedChannelPostMediaGroupsFlow: Flow<EditChannelPostMediaGroupUpdate>
val chosenInlineResultsFlow: Flow<ChosenInlineResultUpdate>
val inlineQueriesFlow: Flow<InlineQueryUpdate>
val callbackQueriesFlow: Flow<CallbackQueryUpdate>
val shippingQueriesFlow: Flow<ShippingQueryUpdate>
val preCheckoutQueriesFlow: Flow<PreCheckoutQueryUpdate>
val pollsFlow: Flow<PollUpdate>
val pollAnswersFlow: Flow<PollAnswerUpdate>
val chatMemberUpdatesFlow: Flow<CommonChatMemberUpdatedUpdate>
val myChatMemberUpdatesFlow: Flow<MyChatMemberUpdatedUpdate>
val unknownUpdatesFlow: Flow<UnknownUpdate>
@Deprecated("Renamed", ReplaceWith("messagesFlow"))
2021-01-19 12:50:45 +00:00
val messageFlow: Flow<MessageUpdate>
2021-08-22 17:14:56 +00:00
get() = messagesFlow
@Deprecated("Renamed", ReplaceWith("messageMediaGroupsFlow"))
2021-01-19 12:50:45 +00:00
val messageMediaGroupFlow: Flow<MessageMediaGroupUpdate>
2021-08-22 17:14:56 +00:00
get() = messageMediaGroupsFlow
@Deprecated("Renamed", ReplaceWith("editedMessagesFlow"))
2021-01-19 12:50:45 +00:00
val editedMessageFlow: Flow<EditMessageUpdate>
2021-08-22 17:14:56 +00:00
get() = editedMessagesFlow
@Deprecated("Renamed", ReplaceWith("editedMessageMediaGroupsFlow"))
2021-01-19 12:50:45 +00:00
val editedMessageMediaGroupFlow: Flow<EditMessageMediaGroupUpdate>
2021-08-22 17:14:56 +00:00
get() = editedMessageMediaGroupsFlow
@Deprecated("Renamed", ReplaceWith("channelPostsFlow"))
2021-01-19 12:50:45 +00:00
val channelPostFlow: Flow<ChannelPostUpdate>
2021-08-22 17:14:56 +00:00
get() = channelPostsFlow
@Deprecated("Renamed", ReplaceWith("channelPostMediaGroupsFlow"))
2021-01-19 12:50:45 +00:00
val channelPostMediaGroupFlow: Flow<ChannelPostMediaGroupUpdate>
2021-08-22 17:14:56 +00:00
get() = channelPostMediaGroupsFlow
@Deprecated("Renamed", ReplaceWith("editedChannelPostsFlow"))
2021-01-19 12:50:45 +00:00
val editedChannelPostFlow: Flow<EditChannelPostUpdate>
2021-08-22 17:14:56 +00:00
get() = editedChannelPostsFlow
@Deprecated("Renamed", ReplaceWith("editedChannelPostMediaGroupsFlow"))
2021-01-19 12:50:45 +00:00
val editedChannelPostMediaGroupFlow: Flow<EditChannelPostMediaGroupUpdate>
2021-08-22 17:14:56 +00:00
get() = editedChannelPostMediaGroupsFlow
@Deprecated("Renamed", ReplaceWith("chosenInlineResultsFlow"))
2021-01-19 12:50:45 +00:00
val chosenInlineResultFlow: Flow<ChosenInlineResultUpdate>
2021-08-22 17:14:56 +00:00
get() = chosenInlineResultsFlow
@Deprecated("Renamed", ReplaceWith("inlineQueriesFlow"))
2021-01-19 12:50:45 +00:00
val inlineQueryFlow: Flow<InlineQueryUpdate>
2021-08-22 17:14:56 +00:00
get() = inlineQueriesFlow
@Deprecated("Renamed", ReplaceWith("callbackQueriesFlow"))
2021-01-19 12:50:45 +00:00
val callbackQueryFlow: Flow<CallbackQueryUpdate>
2021-08-22 17:14:56 +00:00
get() = callbackQueriesFlow
@Deprecated("Renamed", ReplaceWith("shippingQueriesFlow"))
2021-01-19 12:50:45 +00:00
val shippingQueryFlow: Flow<ShippingQueryUpdate>
2021-08-22 17:14:56 +00:00
get() = shippingQueriesFlow
@Deprecated("Renamed", ReplaceWith("preCheckoutQueriesFlow"))
2021-01-19 12:50:45 +00:00
val preCheckoutQueryFlow: Flow<PreCheckoutQueryUpdate>
2021-08-22 17:14:56 +00:00
get() = preCheckoutQueriesFlow
@Deprecated("Renamed", ReplaceWith("pollsFlow"))
2021-01-19 12:50:45 +00:00
val pollFlow: Flow<PollUpdate>
2021-08-22 17:14:56 +00:00
get() = pollsFlow
@Deprecated("Renamed", ReplaceWith("pollAnswersFlow"))
2021-01-19 12:50:45 +00:00
val pollAnswerFlow: Flow<PollAnswerUpdate>
2021-08-22 17:14:56 +00:00
get() = pollAnswersFlow
@Deprecated("Renamed", ReplaceWith("chatMemberUpdatesFlow"))
2021-03-11 15:36:29 +00:00
val chatMemberUpdatedFlow: Flow<CommonChatMemberUpdatedUpdate>
2021-08-22 17:14:56 +00:00
get() = chatMemberUpdatesFlow
@Deprecated("Renamed", ReplaceWith("myChatMemberUpdatesFlow"))
2021-03-11 15:36:29 +00:00
val myChatMemberUpdatedFlow: Flow<MyChatMemberUpdatedUpdate>
2021-08-22 17:14:56 +00:00
get() = myChatMemberUpdatesFlow
@Deprecated("Renamed", ReplaceWith("unknownUpdatesFlow"))
2021-01-19 12:50:45 +00:00
val unknownUpdateTypeFlow: Flow<UnknownUpdate>
2021-08-22 17:14:56 +00:00
get() = unknownUpdatesFlow
2021-01-19 12:50:45 +00:00
}
/**
* Creates [DefaultFlowsUpdatesFilter]
*/
@Suppress("FunctionName")
fun FlowsUpdatesFilter(
broadcastChannelsSize: Int = 100
) = DefaultFlowsUpdatesFilter(broadcastChannelsSize)
@Suppress("unused")
2021-01-19 12:50:45 +00:00
class DefaultFlowsUpdatesFilter(
2021-06-27 19:00:20 +00:00
broadcastChannelsSize: Int = 100,
onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND
2021-01-19 12:50:45 +00:00
): FlowsUpdatesFilter {
2021-06-27 19:00:20 +00:00
private val updatesSharedFlow = MutableSharedFlow<Update>(extraBufferCapacity = broadcastChannelsSize, onBufferOverflow = onBufferOverflow)
2020-06-27 03:43:24 +00:00
@Suppress("MemberVisibilityCanBePrivate")
2021-01-19 12:50:45 +00:00
override val allUpdatesFlow: Flow<Update> = updatesSharedFlow.asSharedFlow()
@Suppress("MemberVisibilityCanBePrivate")
2021-01-19 12:50:45 +00:00
override val allUpdatesWithoutMediaGroupsGroupingFlow: Flow<Update> = allUpdatesFlow.flatMapConcat {
2021-01-07 13:02:35 +00:00
when (it) {
is SentMediaGroupUpdate -> it.origins.asFlow()
is EditMediaGroupUpdate -> flowOf(it.origin)
else -> flowOf(it)
}
}
2019-05-10 03:54:57 +00:00
2020-06-27 03:43:24 +00:00
override val asUpdateReceiver: UpdateReceiver<Update> = {
updatesSharedFlow.emit(it)
2020-06-27 03:43:24 +00:00
}
2019-05-10 03:54:57 +00:00
2021-08-22 17:14:56 +00:00
override val messagesFlow: Flow<MessageUpdate> = allUpdatesFlow.filterIsInstance()
override val messageMediaGroupsFlow: Flow<MessageMediaGroupUpdate> = allUpdatesFlow.filterIsInstance()
override val editedMessagesFlow: Flow<EditMessageUpdate> = allUpdatesFlow.filterIsInstance()
override val editedMessageMediaGroupsFlow: Flow<EditMessageMediaGroupUpdate> = allUpdatesFlow.filterIsInstance()
override val channelPostsFlow: Flow<ChannelPostUpdate> = allUpdatesFlow.filterIsInstance()
override val channelPostMediaGroupsFlow: Flow<ChannelPostMediaGroupUpdate> = allUpdatesFlow.filterIsInstance()
override val editedChannelPostsFlow: Flow<EditChannelPostUpdate> = allUpdatesFlow.filterIsInstance()
override val editedChannelPostMediaGroupsFlow: Flow<EditChannelPostMediaGroupUpdate> = allUpdatesFlow.filterIsInstance()
override val chosenInlineResultsFlow: Flow<ChosenInlineResultUpdate> = allUpdatesFlow.filterIsInstance()
override val inlineQueriesFlow: Flow<InlineQueryUpdate> = allUpdatesFlow.filterIsInstance()
override val callbackQueriesFlow: Flow<CallbackQueryUpdate> = allUpdatesFlow.filterIsInstance()
override val shippingQueriesFlow: Flow<ShippingQueryUpdate> = allUpdatesFlow.filterIsInstance()
override val preCheckoutQueriesFlow: Flow<PreCheckoutQueryUpdate> = allUpdatesFlow.filterIsInstance()
override val pollsFlow: Flow<PollUpdate> = allUpdatesFlow.filterIsInstance()
override val pollAnswersFlow: Flow<PollAnswerUpdate> = allUpdatesFlow.filterIsInstance()
override val chatMemberUpdatesFlow: Flow<CommonChatMemberUpdatedUpdate> = allUpdatesFlow.filterIsInstance()
override val myChatMemberUpdatesFlow: Flow<MyChatMemberUpdatedUpdate> = allUpdatesFlow.filterIsInstance()
override val unknownUpdatesFlow: Flow<UnknownUpdate> = allUpdatesFlow.filterIsInstance()
2021-06-27 19:00:20 +00:00
}