mirror of
				https://github.com/InsanusMokrassar/TelegramBotAPI.git
				synced 2025-10-30 19:50:12 +00:00 
			
		
		
		
	| @@ -1,5 +1,13 @@ | |||||||
| # TelegramBotAPI changelog | # TelegramBotAPI changelog | ||||||
|  |  | ||||||
|  | ## 0.38.20 | ||||||
|  |  | ||||||
|  | * `BehaviourBuilder FSM`: | ||||||
|  |     * Hotfixes | ||||||
|  | * `WebApps`: | ||||||
|  |     * New extension `TelegramBot#answerWebAppQuery` | ||||||
|  |     * New function `handleResult` | ||||||
|  |  | ||||||
| ## 0.38.19 | ## 0.38.19 | ||||||
|  |  | ||||||
| * `BehaviourBuilder`: | * `BehaviourBuilder`: | ||||||
|   | |||||||
| @@ -20,6 +20,6 @@ javax_activation_version=1.1.1 | |||||||
| dokka_version=1.6.10 | dokka_version=1.6.10 | ||||||
|  |  | ||||||
| library_group=dev.inmo | library_group=dev.inmo | ||||||
| library_version=0.38.19 | library_version=0.38.20 | ||||||
|  |  | ||||||
| github_release_plugin_version=2.3.7 | github_release_plugin_version=2.3.7 | ||||||
|   | |||||||
| @@ -28,7 +28,9 @@ interface BehaviourContextWithFSM<T : State> : BehaviourContext, StatesMachine<T | |||||||
|         handlers: List<BehaviourWithFSMStateHandlerHolder<*, T>> |         handlers: List<BehaviourWithFSMStateHandlerHolder<*, T>> | ||||||
|     ): T? { |     ): T? { | ||||||
|         return handlers.firstOrNull { it.checkHandleable(state) } ?.run { |         return handlers.firstOrNull { it.checkHandleable(state) } ?.run { | ||||||
|             handleState(contextUpdatesFlow, state) |             doInSubContext(updatesUpstreamFlow = contextUpdatesFlow) { | ||||||
|  |                 handleState(state) | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -34,22 +34,13 @@ class BehaviourWithFSMStateHandlerHolder<I : O, O : State>( | |||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Handling of state :) |      * Handling of state :) | ||||||
|      * |  | ||||||
|      * @param contextUpdatesFlow This [Flow] will be used as source of updates. By contract, this [Flow] must be common |  | ||||||
|      * for all [State]s of incoming [state] [State.context] and for the whole chain inside of [BehaviourContextWithFSM] |  | ||||||
|      */ |      */ | ||||||
|     suspend fun BehaviourContextWithFSM<in O>.handleState( |     suspend fun BehaviourContextWithFSM<in O>.handleState( | ||||||
|         contextUpdatesFlow: Flow<Update>, |  | ||||||
|         state: O |         state: O | ||||||
|     ): O? { |     ): O? = with(delegateTo) { | ||||||
|         val subscope = scope.LinkedSupervisorScope() |  | ||||||
|         return with(copy(scope = subscope, upstreamUpdatesFlow = contextUpdatesFlow)) { |  | ||||||
|             with(delegateTo) { |  | ||||||
|         handleState(state as I) |         handleState(state as I) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| inline fun <reified I : O, O : State> BehaviourWithFSMStateHandlerHolder( | inline fun <reified I : O, O : State> BehaviourWithFSMStateHandlerHolder( | ||||||
|     strict: Boolean = false, |     strict: Boolean = false, | ||||||
|   | |||||||
| @@ -6,6 +6,9 @@ import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.InlineQ | |||||||
| import dev.inmo.tgbotapi.types.webapps.query.SentWebAppMessage | import dev.inmo.tgbotapi.types.webapps.query.SentWebAppMessage | ||||||
| import kotlinx.serialization.* | import kotlinx.serialization.* | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @param webAppQueryId [dev.inmo.tgbotapi.webapps.WebAppInitData.queryId] | ||||||
|  |  */ | ||||||
| @Serializable | @Serializable | ||||||
| data class AnswerWebAppQuery( | data class AnswerWebAppQuery( | ||||||
|     @SerialName(webAppQueryIdField) |     @SerialName(webAppQueryIdField) | ||||||
|   | |||||||
| @@ -0,0 +1,11 @@ | |||||||
|  | package dev.inmo.tgbotapi.webapps | ||||||
|  |  | ||||||
|  | import dev.inmo.tgbotapi.bot.TelegramBot | ||||||
|  | import dev.inmo.tgbotapi.requests.answers.AnswerWebAppQuery | ||||||
|  | import dev.inmo.tgbotapi.types.InlineQueries.InlineQueryResult.abstracts.InlineQueryResult | ||||||
|  |  | ||||||
|  | suspend fun TelegramBot.answerWebAppQuery( | ||||||
|  |     result: InlineQueryResult | ||||||
|  | ) = webApp.initDataUnsafe.queryId ?.let { | ||||||
|  |     execute(AnswerWebAppQuery(it, result)) | ||||||
|  | } | ||||||
| @@ -0,0 +1,18 @@ | |||||||
|  | package dev.inmo.tgbotapi.webapps | ||||||
|  |  | ||||||
|  | import dev.inmo.tgbotapi.types.WebAppQueryId | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @param onSendData Should return the data which must be used in [WebApp.sendData]. If returns null, data will not be sent | ||||||
|  |  * @param onAnswerWebAppQuery In case if [WebAppInitData.queryId] is presented in [WebApp.initDataUnsafe], will be called | ||||||
|  |  * that callback. Before and after calling of this callback will not be used any method of answering to the telegram | ||||||
|  |  * system, so, you must use something like [answerWebAppQuery] by yourself to send the result | ||||||
|  |  */ | ||||||
|  | inline fun handleResult( | ||||||
|  |     onSendData: () -> String?, | ||||||
|  |     onAnswerWebAppQuery: (WebAppQueryId) -> Unit | ||||||
|  | ) { | ||||||
|  |     webApp.initDataUnsafe.queryId ?.let { | ||||||
|  |         onAnswerWebAppQuery(it) | ||||||
|  |     } ?: webApp.sendData(onSendData() ?: return) | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user