From f4fe680cacf0eda908b676d2b736cc2aa112a638 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 23 Jan 2020 03:59:59 +0600 Subject: [PATCH] UnknownCallbackQueryType --- CHANGELOG.md | 1 + .../types/CallbackQuery/CallbackQuery.kt | 9 ++++++++- .../types/CallbackQuery/RawCallbackQuery.kt | 14 +++++++++++--- .../TelegramBotAPI/types/update/RawUpdate.kt | 10 +++++++--- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd724cf7fc..5ba0d30ce3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -84,6 +84,7 @@ while they can work incorrectly * `UnknownUpdateType` * `UnknownMessageType` * `UnknownChatType` + * `UnknownCallbackQueryType` ## 0.21.0 TelegramBotAPI 4.5 diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/CallbackQuery/CallbackQuery.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/CallbackQuery/CallbackQuery.kt index a46fba7a1d..e19cadffbd 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/CallbackQuery/CallbackQuery.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/CallbackQuery/CallbackQuery.kt @@ -7,4 +7,11 @@ interface CallbackQuery { val id: CallbackQueryIdentifier val user: User val chatInstance: String -} \ No newline at end of file +} + +data class UnknownCallbackQueryType( + override val id: CallbackQueryIdentifier, + override val user: User, + override val chatInstance: String, + val raw: String +) : CallbackQuery diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/CallbackQuery/RawCallbackQuery.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/CallbackQuery/RawCallbackQuery.kt index ba08a8eaaa..5153c2d71d 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/CallbackQuery/RawCallbackQuery.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/CallbackQuery/RawCallbackQuery.kt @@ -22,13 +22,21 @@ internal data class RawCallbackQuery( @SerialName("game_short_name") val gameShortName: String? = null ) { - val asCallbackQuery: CallbackQuery by lazy { - when { + private var inited: CallbackQuery? = null + fun asCallbackQuery(raw: String): CallbackQuery { + return inited ?: when { message != null && data != null -> MessageDataCallbackQuery(id, from, chatInstance, message, data) message != null && gameShortName != null -> MessageGameShortNameCallbackQuery(id, from, chatInstance, message, gameShortName) inlineMessageId != null && data != null -> InlineMessageIdDataCallbackQuery(id, from, chatInstance, inlineMessageId, data) inlineMessageId != null && gameShortName != null -> InlineMessageIdGameShortNameCallbackQuery(id, from, chatInstance, inlineMessageId, gameShortName) - else -> throw IllegalStateException("Strange answer from server, can't create callback query") + else -> UnknownCallbackQueryType( + id, + from, + chatInstance, + raw + ) + }.also { + inited = it } } } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/RawUpdate.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/RawUpdate.kt index 26c986bc31..287dbeb4d8 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/RawUpdate.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/update/RawUpdate.kt @@ -14,6 +14,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.update.abstracts.Update import com.github.insanusmokrassar.TelegramBotAPI.types.updateIdField import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonElement @Serializable internal data class RawUpdate constructor( @@ -38,7 +39,7 @@ internal data class RawUpdate constructor( /** * @return One of children of [Update] interface or null in case of unknown type of update */ - fun asUpdate(raw: String): Update { + fun asUpdate(raw: JsonElement): Update { return initedUpdate ?: when { edited_message != null -> EditMessageUpdate(updateId, edited_message) message != null -> MessageUpdate(updateId, message) @@ -47,13 +48,16 @@ internal data class RawUpdate constructor( chosen_inline_result != null -> ChosenInlineResultUpdate(updateId, chosen_inline_result.asChosenInlineResult) inline_query != null -> InlineQueryUpdate(updateId, inline_query.asInlineQuery) - callback_query != null -> CallbackQueryUpdate(updateId, callback_query.asCallbackQuery) + callback_query != null -> CallbackQueryUpdate( + updateId, + callback_query.asCallbackQuery(raw.jsonObject["callback_query"].toString()) + ) shipping_query != null -> ShippingQueryUpdate(updateId, shipping_query) pre_checkout_query != null -> PreCheckoutQueryUpdate(updateId, pre_checkout_query) poll != null -> PollUpdate(updateId, poll) else -> UnknownUpdateType( updateId, - raw + raw.toString() ) }.also { initedUpdate = it