diff --git a/CHANGELOG.md b/CHANGELOG.md index 7390ed2954..fe957764ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # TelegramBotAPI changelog +## 0.38.21 + +* `WebApps`: + * `WebAppInitData#queryId` now have correct js name of field + * New function `sendDataOrWorkWithQueryId` + ## 0.38.20 * `BehaviourBuilder FSM`: diff --git a/gradle.properties b/gradle.properties index f9b76a73b9..41eec25c51 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,6 +20,6 @@ javax_activation_version=1.1.1 dokka_version=1.6.10 library_group=dev.inmo -library_version=0.38.20 +library_version=0.38.21 github_release_plugin_version=2.3.7 diff --git a/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/SendData.kt b/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/SendData.kt index 5f469cfd0f..bd6ebb191f 100644 --- a/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/SendData.kt +++ b/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/SendData.kt @@ -8,11 +8,26 @@ import dev.inmo.tgbotapi.types.WebAppQueryId * 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( +inline fun sendDataOrWorkWithQueryId( onSendData: () -> String?, onAnswerWebAppQuery: (WebAppQueryId) -> Unit ) { - webApp.initDataUnsafe.queryId ?.let { - onAnswerWebAppQuery(it) - } ?: webApp.sendData(onSendData() ?: return) + val queryId = webApp.initDataUnsafe.queryId + + if (queryId == null) { + webApp.sendData(onSendData() ?: return) + } else { + onAnswerWebAppQuery(queryId) + } } + +/** + * @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 +) = sendDataOrWorkWithQueryId(onSendData, onAnswerWebAppQuery) diff --git a/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/WebAppInitData.kt b/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/WebAppInitData.kt index a00181ab91..a561cfb89a 100644 --- a/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/WebAppInitData.kt +++ b/tgbotapi.webapps/src/jsMain/kotlin/dev/inmo/tgbotapi/webapps/WebAppInitData.kt @@ -1,9 +1,9 @@ package dev.inmo.tgbotapi.webapps -import dev.inmo.tgbotapi.types.MilliSeconds -import dev.inmo.tgbotapi.types.WebAppQueryId +import dev.inmo.tgbotapi.types.* external interface WebAppInitData { + @JsName("query_id") val queryId: WebAppQueryId? val user: WebAppUser?