mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-23 02:28:45 +00:00
add support of WebAppInfo
This commit is contained in:
parent
2c71377058
commit
c19bccc7d1
@ -2,6 +2,7 @@ package dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons
|
|||||||
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
import dev.inmo.tgbotapi.types.*
|
||||||
import dev.inmo.tgbotapi.types.games.CallbackGame
|
import dev.inmo.tgbotapi.types.games.CallbackGame
|
||||||
|
import dev.inmo.tgbotapi.types.webapps.WebAppInfo
|
||||||
import kotlinx.serialization.*
|
import kotlinx.serialization.*
|
||||||
import kotlinx.serialization.json.*
|
import kotlinx.serialization.json.*
|
||||||
|
|
||||||
@ -120,3 +121,14 @@ data class URLInlineKeyboardButton(
|
|||||||
@SerialName(urlField)
|
@SerialName(urlField)
|
||||||
val url: String
|
val url: String
|
||||||
) : InlineKeyboardButton
|
) : InlineKeyboardButton
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Button with [WebAppInfo]. Web App will be launched when the button is pressed. The Web App will be able to send a
|
||||||
|
* `web_app_data` service message. **Available in private chats only**.
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class WebAppInlineKeyboardButton(
|
||||||
|
override val text: String,
|
||||||
|
@SerialName(webAppField)
|
||||||
|
val webApp: WebAppInfo
|
||||||
|
) : InlineKeyboardButton
|
||||||
|
@ -48,6 +48,7 @@ object InlineKeyboardButtonSerializer : KSerializer<InlineKeyboardButton> {
|
|||||||
is SwitchInlineQueryInlineKeyboardButton -> SwitchInlineQueryInlineKeyboardButton.serializer().serialize(encoder, value)
|
is SwitchInlineQueryInlineKeyboardButton -> SwitchInlineQueryInlineKeyboardButton.serializer().serialize(encoder, value)
|
||||||
is SwitchInlineQueryCurrentChatInlineKeyboardButton -> SwitchInlineQueryCurrentChatInlineKeyboardButton.serializer().serialize(encoder, value)
|
is SwitchInlineQueryCurrentChatInlineKeyboardButton -> SwitchInlineQueryCurrentChatInlineKeyboardButton.serializer().serialize(encoder, value)
|
||||||
is URLInlineKeyboardButton -> URLInlineKeyboardButton.serializer().serialize(encoder, value)
|
is URLInlineKeyboardButton -> URLInlineKeyboardButton.serializer().serialize(encoder, value)
|
||||||
|
is WebAppInlineKeyboardButton -> WebAppInlineKeyboardButton.serializer().serialize(encoder, value)
|
||||||
is CallbackGameInlineKeyboardButton -> CallbackGameInlineKeyboardButton.serializer().serialize(encoder, value)
|
is CallbackGameInlineKeyboardButton -> CallbackGameInlineKeyboardButton.serializer().serialize(encoder, value)
|
||||||
is UnknownInlineKeyboardButton -> JsonElement.serializer().serialize(encoder, value.rawData)
|
is UnknownInlineKeyboardButton -> JsonElement.serializer().serialize(encoder, value.rawData)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package dev.inmo.tgbotapi.types.buttons
|
package dev.inmo.tgbotapi.types.buttons
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.*
|
import dev.inmo.tgbotapi.types.*
|
||||||
|
import dev.inmo.tgbotapi.types.webapps.WebAppInfo
|
||||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||||
import dev.inmo.tgbotapi.utils.nonstrictJsonFormat
|
import dev.inmo.tgbotapi.utils.nonstrictJsonFormat
|
||||||
import kotlinx.serialization.*
|
import kotlinx.serialization.*
|
||||||
@ -63,10 +64,22 @@ data class RequestLocationKeyboardButton(
|
|||||||
override val text: String
|
override val text: String
|
||||||
) : KeyboardButton {
|
) : KeyboardButton {
|
||||||
@SerialName(requestLocationField)
|
@SerialName(requestLocationField)
|
||||||
@EncodeDefault
|
@Required
|
||||||
val requestLocation: Boolean = true
|
val requestLocation: Boolean = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private chats only. Description of the Web App that will be launched when the user presses the button. The Web App
|
||||||
|
* will be able to send an arbitrary message on behalf of the user using the method `answerWebAppQuery`. Available only
|
||||||
|
* in private chats between a user and the bot.
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class WebAppKeyboardButton(
|
||||||
|
override val text: String,
|
||||||
|
@SerialName(webAppField)
|
||||||
|
val webApp: WebAppInfo
|
||||||
|
) : KeyboardButton
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private chats only. When user will tap on this button, he will be asked for the poll with [requestPoll] options. You will be able
|
* Private chats only. When user will tap on this button, he will be asked for the poll with [requestPoll] options. You will be able
|
||||||
* to catch this poll in updates and data using [dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onPoll] in
|
* to catch this poll in updates and data using [dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onPoll] in
|
||||||
@ -97,6 +110,13 @@ object KeyboardButtonSerializer : KSerializer<KeyboardButton> {
|
|||||||
asJson is JsonObject && asJson[requestLocationField] != null -> RequestLocationKeyboardButton(
|
asJson is JsonObject && asJson[requestLocationField] != null -> RequestLocationKeyboardButton(
|
||||||
asJson[textField]!!.jsonPrimitive.content
|
asJson[textField]!!.jsonPrimitive.content
|
||||||
)
|
)
|
||||||
|
asJson is JsonObject && asJson[webAppField] != null -> WebAppKeyboardButton(
|
||||||
|
asJson[textField]!!.jsonPrimitive.content,
|
||||||
|
nonstrictJsonFormat.decodeFromJsonElement(
|
||||||
|
WebAppInfo.serializer(),
|
||||||
|
asJson[webAppField]!!
|
||||||
|
)
|
||||||
|
)
|
||||||
asJson is JsonObject && asJson[requestPollField] != null -> RequestPollKeyboardButton(
|
asJson is JsonObject && asJson[requestPollField] != null -> RequestPollKeyboardButton(
|
||||||
asJson[textField]!!.jsonPrimitive.content,
|
asJson[textField]!!.jsonPrimitive.content,
|
||||||
nonstrictJsonFormat.decodeFromJsonElement(
|
nonstrictJsonFormat.decodeFromJsonElement(
|
||||||
@ -119,6 +139,7 @@ object KeyboardButtonSerializer : KSerializer<KeyboardButton> {
|
|||||||
when (value) {
|
when (value) {
|
||||||
is RequestContactKeyboardButton -> RequestContactKeyboardButton.serializer().serialize(encoder, value)
|
is RequestContactKeyboardButton -> RequestContactKeyboardButton.serializer().serialize(encoder, value)
|
||||||
is RequestLocationKeyboardButton -> RequestLocationKeyboardButton.serializer().serialize(encoder, value)
|
is RequestLocationKeyboardButton -> RequestLocationKeyboardButton.serializer().serialize(encoder, value)
|
||||||
|
is WebAppKeyboardButton -> WebAppKeyboardButton.serializer().serialize(encoder, value)
|
||||||
is RequestPollKeyboardButton -> RequestPollKeyboardButton.serializer().serialize(encoder, value)
|
is RequestPollKeyboardButton -> RequestPollKeyboardButton.serializer().serialize(encoder, value)
|
||||||
is SimpleKeyboardButton -> encoder.encodeString(value.text)
|
is SimpleKeyboardButton -> encoder.encodeString(value.text)
|
||||||
is UnknownKeyboardButton -> JsonElement.serializer().serialize(encoder, nonstrictJsonFormat.parseToJsonElement(value.raw))
|
is UnknownKeyboardButton -> JsonElement.serializer().serialize(encoder, nonstrictJsonFormat.parseToJsonElement(value.raw))
|
||||||
|
@ -2516,6 +2516,16 @@ inline fun InlineKeyboardButton.asURLInlineKeyboardButton(): URLInlineKeyboardBu
|
|||||||
inline fun InlineKeyboardButton.requireURLInlineKeyboardButton(): URLInlineKeyboardButton =
|
inline fun InlineKeyboardButton.requireURLInlineKeyboardButton(): URLInlineKeyboardButton =
|
||||||
this as URLInlineKeyboardButton
|
this as URLInlineKeyboardButton
|
||||||
|
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun <T> InlineKeyboardButton.whenWebAppKeyboardButton(block: (WebAppKeyboardButton) -> T) = asWebAppKeyboardButton() ?.let(block)
|
||||||
|
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun InlineKeyboardButton.asWebAppKeyboardButton(): WebAppKeyboardButton? = this as? WebAppKeyboardButton
|
||||||
|
|
||||||
|
@PreviewFeature
|
||||||
|
inline fun InlineKeyboardButton.requireWebAppKeyboardButton(): WebAppKeyboardButton =
|
||||||
|
this as WebAppKeyboardButton
|
||||||
|
|
||||||
@PreviewFeature
|
@PreviewFeature
|
||||||
inline fun <T> InlineKeyboardButton.whenUnknownInlineKeyboardButton(block: (UnknownInlineKeyboardButton) -> T) = asUnknownInlineKeyboardButton() ?.let(block)
|
inline fun <T> InlineKeyboardButton.whenUnknownInlineKeyboardButton(block: (UnknownInlineKeyboardButton) -> T) = asUnknownInlineKeyboardButton() ?.let(block)
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package dev.inmo.tgbotapi.extensions.utils.types.buttons
|
|||||||
import dev.inmo.tgbotapi.types.LoginURL
|
import dev.inmo.tgbotapi.types.LoginURL
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.*
|
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.*
|
||||||
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||||
|
import dev.inmo.tgbotapi.types.webapps.WebAppInfo
|
||||||
import dev.inmo.tgbotapi.utils.MatrixBuilder
|
import dev.inmo.tgbotapi.utils.MatrixBuilder
|
||||||
import dev.inmo.tgbotapi.utils.RowBuilder
|
import dev.inmo.tgbotapi.utils.RowBuilder
|
||||||
|
|
||||||
@ -128,3 +129,14 @@ inline fun InlineKeyboardRowBuilder.urlButton(
|
|||||||
text: String,
|
text: String,
|
||||||
url: String
|
url: String
|
||||||
) = add(URLInlineKeyboardButton(text, url))
|
) = add(URLInlineKeyboardButton(text, url))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and put [WebAppInlineKeyboardButton]. Please, remember that this button is available in private chats only
|
||||||
|
*
|
||||||
|
* @see inlineKeyboard
|
||||||
|
* @see InlineKeyboardBuilder.row
|
||||||
|
*/
|
||||||
|
inline fun InlineKeyboardRowBuilder.webAppButton(
|
||||||
|
text: String,
|
||||||
|
webApp: WebAppInfo
|
||||||
|
) = add(WebAppInlineKeyboardButton(text, webApp))
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package dev.inmo.tgbotapi.extensions.utils.types.buttons
|
package dev.inmo.tgbotapi.extensions.utils.types.buttons
|
||||||
|
|
||||||
import dev.inmo.tgbotapi.types.buttons.*
|
import dev.inmo.tgbotapi.types.buttons.*
|
||||||
|
import dev.inmo.tgbotapi.types.webapps.WebAppInfo
|
||||||
import dev.inmo.tgbotapi.utils.MatrixBuilder
|
import dev.inmo.tgbotapi.utils.MatrixBuilder
|
||||||
import dev.inmo.tgbotapi.utils.RowBuilder
|
import dev.inmo.tgbotapi.utils.RowBuilder
|
||||||
|
|
||||||
@ -98,3 +99,14 @@ inline fun ReplyKeyboardRowBuilder.requestPollButton(
|
|||||||
text: String,
|
text: String,
|
||||||
pollType: KeyboardButtonPollType
|
pollType: KeyboardButtonPollType
|
||||||
) = add(RequestPollKeyboardButton(text, pollType))
|
) = add(RequestPollKeyboardButton(text, pollType))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and put [WebAppKeyboardButton]
|
||||||
|
*
|
||||||
|
* @see replyKeyboard
|
||||||
|
* @see ReplyKeyboardBuilder.row
|
||||||
|
*/
|
||||||
|
inline fun ReplyKeyboardRowBuilder.webAppButton(
|
||||||
|
text: String,
|
||||||
|
webApp: WebAppInfo
|
||||||
|
) = add(WebAppKeyboardButton(text, webApp))
|
||||||
|
Loading…
Reference in New Issue
Block a user