mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-29 21:48:43 +00:00
fill Behaviour Builder for ChatMemberUpdated
This commit is contained in:
parent
0adee13cba
commit
72cf38d3bb
@ -0,0 +1,65 @@
|
|||||||
|
package dev.inmo.tgbotapi.extensions.behaviour_builder.expectations
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
|
||||||
|
import dev.inmo.tgbotapi.extensions.utils.asCallbackQueryUpdate
|
||||||
|
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||||
|
import dev.inmo.tgbotapi.types.CallbackQuery.CallbackQuery
|
||||||
|
import dev.inmo.tgbotapi.types.CallbackQuery.DataCallbackQuery
|
||||||
|
import dev.inmo.tgbotapi.types.ChatMemberUpdated
|
||||||
|
import dev.inmo.tgbotapi.types.update.CommonChatMemberUpdatedUpdate
|
||||||
|
import dev.inmo.tgbotapi.types.update.MyChatMemberUpdatedUpdate
|
||||||
|
import dev.inmo.tgbotapi.types.update.abstracts.ChatMemberUpdatedUpdate
|
||||||
|
import kotlinx.coroutines.flow.toList
|
||||||
|
|
||||||
|
typealias ChatMemberUpdatedMapper<T> = T.() -> T?
|
||||||
|
|
||||||
|
private suspend inline fun <reified T : ChatMemberUpdatedUpdate> BehaviourContext.waitChatMemberUpdated(
|
||||||
|
count: Int = 1,
|
||||||
|
initRequest: Request<*>? = null,
|
||||||
|
noinline errorFactory: NullableRequestBuilder<*> = { null },
|
||||||
|
noinline mapper: ChatMemberUpdatedMapper<ChatMemberUpdated>
|
||||||
|
): List<ChatMemberUpdated> = expectFlow(
|
||||||
|
initRequest,
|
||||||
|
count,
|
||||||
|
errorFactory
|
||||||
|
) {
|
||||||
|
(it as? T) ?.data.let(::listOfNotNull)
|
||||||
|
}.toList().toList()
|
||||||
|
|
||||||
|
private suspend inline fun <reified T : ChatMemberUpdatedUpdate> BehaviourContext.waitChatMemberUpdated(
|
||||||
|
count: Int = 1,
|
||||||
|
initRequest: Request<*>? = null,
|
||||||
|
noinline errorFactory: NullableRequestBuilder<*> = { null },
|
||||||
|
noinline filter: ChatMemberUpdatedMapper<ChatMemberUpdated>? = null
|
||||||
|
) : List<ChatMemberUpdated> = waitChatMemberUpdated<T>(
|
||||||
|
count,
|
||||||
|
initRequest,
|
||||||
|
errorFactory
|
||||||
|
) {
|
||||||
|
if (filter == null) {
|
||||||
|
this
|
||||||
|
} else {
|
||||||
|
filter(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun BehaviourContext.waitChatMemberUpdated(
|
||||||
|
initRequest: Request<*>? = null,
|
||||||
|
errorFactory: NullableRequestBuilder<*> = { null },
|
||||||
|
count: Int = 1,
|
||||||
|
filter: ChatMemberUpdatedMapper<ChatMemberUpdated>? = null
|
||||||
|
) = waitChatMemberUpdated<ChatMemberUpdatedUpdate>(count, initRequest, errorFactory, filter)
|
||||||
|
|
||||||
|
suspend fun BehaviourContext.waitCommonChatMemberUpdated(
|
||||||
|
initRequest: Request<*>? = null,
|
||||||
|
errorFactory: NullableRequestBuilder<*> = { null },
|
||||||
|
count: Int = 1,
|
||||||
|
filter: ChatMemberUpdatedMapper<ChatMemberUpdated>? = null
|
||||||
|
) = waitChatMemberUpdated<CommonChatMemberUpdatedUpdate>(count, initRequest, errorFactory, filter)
|
||||||
|
|
||||||
|
suspend fun BehaviourContext.waitMyChatMemberUpdated(
|
||||||
|
initRequest: Request<*>? = null,
|
||||||
|
errorFactory: NullableRequestBuilder<*> = { null },
|
||||||
|
count: Int = 1,
|
||||||
|
filter: ChatMemberUpdatedMapper<ChatMemberUpdated>? = null
|
||||||
|
) = waitChatMemberUpdated<MyChatMemberUpdatedUpdate>(count, initRequest, errorFactory, filter)
|
@ -0,0 +1,61 @@
|
|||||||
|
package dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling
|
||||||
|
|
||||||
|
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
|
||||||
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
|
||||||
|
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.expectFlow
|
||||||
|
import dev.inmo.tgbotapi.extensions.utils.asChatMemberUpdatedUpdate
|
||||||
|
import dev.inmo.tgbotapi.extensions.utils.extensions.sourceChat
|
||||||
|
import dev.inmo.tgbotapi.types.ChatMemberUpdated
|
||||||
|
import dev.inmo.tgbotapi.types.update.CommonChatMemberUpdatedUpdate
|
||||||
|
import dev.inmo.tgbotapi.types.update.MyChatMemberUpdatedUpdate
|
||||||
|
import dev.inmo.tgbotapi.types.update.abstracts.ChatMemberUpdatedUpdate
|
||||||
|
|
||||||
|
internal suspend inline fun <reified U : ChatMemberUpdatedUpdate> BehaviourContext.onChatMemberUpdated(
|
||||||
|
includeFilterByChatInBehaviourSubContext: Boolean = true,
|
||||||
|
noinline additionalFilter: (suspend (ChatMemberUpdated) -> Boolean)? = null,
|
||||||
|
noinline scenarioReceiver: BehaviourContextAndTypeReceiver<Unit, ChatMemberUpdated>
|
||||||
|
) = flowsUpdatesFilter.expectFlow(bot) {
|
||||||
|
(it as? U) ?.data ?.let { chatMemberUpdated ->
|
||||||
|
if (additionalFilter == null || additionalFilter(chatMemberUpdated)) chatMemberUpdated else null
|
||||||
|
}.let(::listOfNotNull)
|
||||||
|
}.subscribeSafelyWithoutExceptions(scope) { triggerChatMemberUpdated ->
|
||||||
|
doInSubContextWithUpdatesFilter(
|
||||||
|
updatesFilter = if (includeFilterByChatInBehaviourSubContext) {
|
||||||
|
{ it.sourceChat() ?.id ?.chatId == triggerChatMemberUpdated.chat.id.chatId }
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
scenarioReceiver(triggerChatMemberUpdated)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun BehaviourContext.onChatMemberUpdated(
|
||||||
|
includeFilterByChatInBehaviourSubContext: Boolean = true,
|
||||||
|
additionalFilter: (suspend (ChatMemberUpdated) -> Boolean)? = null,
|
||||||
|
scenarioReceiver: BehaviourContextAndTypeReceiver<Unit, ChatMemberUpdated>
|
||||||
|
) = onChatMemberUpdated<ChatMemberUpdatedUpdate>(
|
||||||
|
includeFilterByChatInBehaviourSubContext,
|
||||||
|
additionalFilter,
|
||||||
|
scenarioReceiver
|
||||||
|
)
|
||||||
|
|
||||||
|
suspend fun BehaviourContext.onCommonChatMemberUpdated(
|
||||||
|
includeFilterByChatInBehaviourSubContext: Boolean = true,
|
||||||
|
additionalFilter: (suspend (ChatMemberUpdated) -> Boolean)? = null,
|
||||||
|
scenarioReceiver: BehaviourContextAndTypeReceiver<Unit, ChatMemberUpdated>
|
||||||
|
) = onChatMemberUpdated<CommonChatMemberUpdatedUpdate>(
|
||||||
|
includeFilterByChatInBehaviourSubContext,
|
||||||
|
additionalFilter,
|
||||||
|
scenarioReceiver
|
||||||
|
)
|
||||||
|
|
||||||
|
suspend fun BehaviourContext.onMyChatMemberUpdated(
|
||||||
|
includeFilterByChatInBehaviourSubContext: Boolean = true,
|
||||||
|
additionalFilter: (suspend (ChatMemberUpdated) -> Boolean)? = null,
|
||||||
|
scenarioReceiver: BehaviourContextAndTypeReceiver<Unit, ChatMemberUpdated>
|
||||||
|
) = onChatMemberUpdated<MyChatMemberUpdatedUpdate>(
|
||||||
|
includeFilterByChatInBehaviourSubContext,
|
||||||
|
additionalFilter,
|
||||||
|
scenarioReceiver
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user