From 2778315aed83a0321680e2b10c23311e980dbb0e Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Mon, 17 Apr 2023 15:50:04 +0600 Subject: [PATCH] add support of fallback handlers in behaviour builder with fsm --- .../behaviour_builder/BehaviourContextWithFSM.kt | 8 ++++++-- .../behaviour_builder/BehaviourContextWithFSMBuilder.kt | 8 ++++++++ .../extensions/behaviour_builder/TelegramBotWithFSM.kt | 4 ++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/BehaviourContextWithFSM.kt b/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/BehaviourContextWithFSM.kt index 28463fe89b..a6df8c5018 100644 --- a/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/BehaviourContextWithFSM.kt +++ b/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/BehaviourContextWithFSM.kt @@ -93,8 +93,9 @@ interface BehaviourContextWithFSM : BehaviourContext, StatesMachine>, statesManager: StatesManager, + fallbackHandler: BehaviourWithFSMStateHandlerHolder? = null, onStateHandlingErrorHandler: StateHandlingErrorHandler = defaultStateHandlingErrorHandler() - ) = DefaultBehaviourContextWithFSM(behaviourContext, statesManager, handlers, onStateHandlingErrorHandler) + ) = DefaultBehaviourContextWithFSM(behaviourContext, statesManager, handlers, fallbackHandler, onStateHandlingErrorHandler) } } @@ -129,11 +130,12 @@ class DefaultBehaviourContextWithFSM( private val behaviourContext: BehaviourContext, private val statesManager: StatesManager, private val handlers: List>, + private val fallbackHandler: BehaviourWithFSMStateHandlerHolder? = null, private val onStateHandlingErrorHandler: StateHandlingErrorHandler = defaultStateHandlingErrorHandler() ) : BehaviourContext by behaviourContext, BehaviourContextWithFSM { private val updatesFlows = mutableMapOf>() private val additionalHandlers = mutableListOf>() - private var actualHandlersList = additionalHandlers + handlers + private var actualHandlersList = additionalHandlers + handlers + listOfNotNull(fallbackHandler) protected val statesJobs = mutableMapOf() protected val statesJobsMutex = Mutex() @@ -250,6 +252,7 @@ class DefaultBehaviourContextWithFSM( behaviourContext.copy(bot, scope, broadcastChannelsSize, onBufferOverflow, upstreamUpdatesFlow, triggersHolder), handlers, statesManager, + fallbackHandler, onStateHandlingErrorHandler ) @@ -265,6 +268,7 @@ class DefaultBehaviourContextWithFSM( behaviourContext.copy(bot, scope, broadcastChannelsSize, onBufferOverflow, upstreamUpdatesFlow, triggersHolder), handlers, statesManager, + fallbackHandler, onStateHandlingErrorHandler ) } diff --git a/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/BehaviourContextWithFSMBuilder.kt b/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/BehaviourContextWithFSMBuilder.kt index 03750af9b8..f861bd75b4 100644 --- a/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/BehaviourContextWithFSMBuilder.kt +++ b/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/BehaviourContextWithFSMBuilder.kt @@ -31,6 +31,7 @@ suspend fun TelegramBot.buildBehaviourWithFSM( defaultExceptionsHandler: ExceptionHandler? = null, statesManager: StatesManager = DefaultStatesManager(InMemoryDefaultStatesManagerRepo()), presetHandlers: List> = listOf(), + fallbackHandler: BehaviourWithFSMStateHandlerHolder? = null, onStateHandlingErrorHandler: StateHandlingErrorHandler = defaultStateHandlingErrorHandler(), block: CustomBehaviourContextReceiver, Unit> ): DefaultBehaviourContextWithFSM = BehaviourContextWithFSM( @@ -41,6 +42,7 @@ suspend fun TelegramBot.buildBehaviourWithFSM( ), presetHandlers, statesManager, + fallbackHandler, onStateHandlingErrorHandler ).apply { block() } @@ -59,6 +61,7 @@ suspend fun TelegramBot.buildBehaviourWithFSMAndStartLongPolling( defaultExceptionsHandler: ExceptionHandler? = null, statesManager: StatesManager = DefaultStatesManager(InMemoryDefaultStatesManagerRepo()), presetHandlers: List> = listOf(), + fallbackHandler: BehaviourWithFSMStateHandlerHolder? = null, onStateHandlingErrorHandler: StateHandlingErrorHandler = defaultStateHandlingErrorHandler(), timeoutSeconds: Seconds = 30, autoDisableWebhooks: Boolean = true, @@ -71,6 +74,7 @@ suspend fun TelegramBot.buildBehaviourWithFSMAndStartLongPolling( defaultExceptionsHandler, statesManager, presetHandlers, + fallbackHandler, onStateHandlingErrorHandler, block ).run { @@ -104,6 +108,7 @@ suspend fun TelegramBot.buildBehaviourWithFSM( defaultExceptionsHandler: ExceptionHandler? = null, statesManager: StatesManager = DefaultStatesManager(InMemoryDefaultStatesManagerRepo()), presetHandlers: List> = listOf(), + fallbackHandler: BehaviourWithFSMStateHandlerHolder? = null, onStateHandlingErrorHandler: StateHandlingErrorHandler = defaultStateHandlingErrorHandler(), block: CustomBehaviourContextReceiver, Unit> ): DefaultBehaviourContextWithFSM = BehaviourContextWithFSM( @@ -114,6 +119,7 @@ suspend fun TelegramBot.buildBehaviourWithFSM( ), presetHandlers, statesManager, + fallbackHandler, onStateHandlingErrorHandler ).apply { block() } @@ -137,6 +143,7 @@ suspend fun TelegramBot.buildBehaviourWithFSMAndStartLongPolling( defaultExceptionsHandler: ExceptionHandler? = null, statesManager: StatesManager = DefaultStatesManager(InMemoryDefaultStatesManagerRepo()), presetHandlers: List> = listOf(), + fallbackHandler: BehaviourWithFSMStateHandlerHolder? = null, onStateHandlingErrorHandler: StateHandlingErrorHandler = defaultStateHandlingErrorHandler(), timeoutSeconds: Seconds = 30, autoDisableWebhooks: Boolean = true, @@ -150,6 +157,7 @@ suspend fun TelegramBot.buildBehaviourWithFSMAndStartLongPolling( defaultExceptionsHandler, statesManager, presetHandlers, + fallbackHandler, onStateHandlingErrorHandler, block ).run { diff --git a/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/TelegramBotWithFSM.kt b/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/TelegramBotWithFSM.kt index 85a5f0d402..713a547e52 100644 --- a/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/TelegramBotWithFSM.kt +++ b/tgbotapi.behaviour_builder.fsm/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/behaviour_builder/TelegramBotWithFSM.kt @@ -46,6 +46,7 @@ suspend fun telegramBotWithBehaviourAndFSM( defaultExceptionsHandler: ExceptionHandler? = null, statesManager: StatesManager = DefaultStatesManager(InMemoryDefaultStatesManagerRepo()), presetHandlers: List> = listOf(), + fallbackHandler: BehaviourWithFSMStateHandlerHolder? = null, testServer: Boolean = false, onStateHandlingErrorHandler: StateHandlingErrorHandler = defaultStateHandlingErrorHandler(), timeoutSeconds: Seconds = 30, @@ -65,6 +66,7 @@ suspend fun telegramBotWithBehaviourAndFSM( defaultExceptionsHandler, statesManager, presetHandlers, + fallbackHandler, onStateHandlingErrorHandler, timeoutSeconds, autoDisableWebhooks, @@ -97,6 +99,7 @@ suspend fun telegramBotWithBehaviourAndFSMAndStartLongPolling( defaultExceptionsHandler: ExceptionHandler? = null, statesManager: StatesManager = DefaultStatesManager(InMemoryDefaultStatesManagerRepo()), presetHandlers: List> = listOf(), + fallbackHandler: BehaviourWithFSMStateHandlerHolder? = null, testServer: Boolean = false, onStateHandlingErrorHandler: StateHandlingErrorHandler = defaultStateHandlingErrorHandler(), timeoutSeconds: Seconds = 30, @@ -116,6 +119,7 @@ suspend fun telegramBotWithBehaviourAndFSMAndStartLongPolling( defaultExceptionsHandler, statesManager, presetHandlers, + fallbackHandler, onStateHandlingErrorHandler, timeoutSeconds, autoDisableWebhooks,