137 lines
5.2 KiB
Kotlin
137 lines
5.2 KiB
Kotlin
package dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons
|
|
|
|
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
|
|
import dev.inmo.tgbotapi.types.*
|
|
import dev.inmo.tgbotapi.types.games.CallbackGame
|
|
import dev.inmo.tgbotapi.types.webapps.WebAppInfo
|
|
import kotlinx.serialization.*
|
|
import kotlinx.serialization.json.*
|
|
|
|
/**
|
|
* Some button of [dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup]. See inheritors and visit
|
|
* https://core.telegram.org/bots/api#inlinekeyboardbutton for more info
|
|
*/
|
|
@Serializable(InlineKeyboardButtonSerializer::class)
|
|
@ClassCastsIncluded
|
|
sealed interface InlineKeyboardButton {
|
|
val text: String
|
|
}
|
|
|
|
@Serializable
|
|
data class UnknownInlineKeyboardButton (
|
|
val rawData: JsonElement
|
|
) : InlineKeyboardButton {
|
|
override val text: String
|
|
get() = runCatching {
|
|
rawData.jsonObject[textField] ?.jsonPrimitive ?.content
|
|
}.getOrNull() ?: ""
|
|
}
|
|
|
|
/**
|
|
* This type of button must always be the first button in the first row. Visit
|
|
* https://core.telegram.org/bots/api#payments for mor info
|
|
*/
|
|
@Serializable
|
|
data class PayInlineKeyboardButton(
|
|
override val text: String
|
|
) : InlineKeyboardButton {
|
|
@ExperimentalSerializationApi
|
|
@EncodeDefault
|
|
@SerialName(payField)
|
|
private val toPay = true
|
|
}
|
|
|
|
/**
|
|
* Simple button with [callbackData] which you are able to catch this type of updates and data using
|
|
* [dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onDataCallbackQuery] in
|
|
* case you are using Behaviour Builder OR [dev.inmo.tgbotapi.updateshandlers.FlowsUpdatesFilter.callbackQueriesFlow]
|
|
* with [kotlinx.coroutines.flow.filterIsInstance] and filtering by type [dev.inmo.tgbotapi.types.queries.callback.DataCallbackQuery]
|
|
*/
|
|
@Serializable
|
|
data class CallbackDataInlineKeyboardButton(
|
|
@SerialName(textField)
|
|
override val text: String,
|
|
/**
|
|
* You will receive this data in [dev.inmo.tgbotapi.types.queries.callback.DataCallbackQuery.data] field
|
|
*/
|
|
@SerialName(callbackDataField)
|
|
val callbackData: String
|
|
) : InlineKeyboardButton
|
|
|
|
/**
|
|
* Button with [callbackGame]
|
|
*/
|
|
@Serializable
|
|
data class CallbackGameInlineKeyboardButton(
|
|
@SerialName(textField)
|
|
override val text: String
|
|
) : InlineKeyboardButton {
|
|
@SerialName(callbackGameField)
|
|
@EncodeDefault
|
|
private val callbackGame = CallbackGame
|
|
}
|
|
|
|
/**
|
|
* You may use this button to automatically authorize your user on [loginUrl]
|
|
*/
|
|
@Serializable
|
|
data class LoginURLInlineKeyboardButton(
|
|
override val text: String,
|
|
@SerialName(loginUrlField)
|
|
val loginUrl: LoginURL
|
|
) : InlineKeyboardButton
|
|
|
|
/**
|
|
* Complex button with [switchInlineQueryCurrentChat] which will be sent to you in an [dev.inmo.tgbotapi.types.InlineQueries.query.InlineQuery]
|
|
* which you may catch in [dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onBaseInlineQuery] and get
|
|
* from [dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery.query] (or changed by user query in case he will be
|
|
* the fastest hand in the wild west). Can be forwarded in any chat with message in case if it is the only one button in
|
|
* message, but will be converted to a [SwitchInlineQueryInlineKeyboardButton].
|
|
* Remember that clicking on this button will automatically insert username of this bot in current chat, paste
|
|
* [switchInlineQueryCurrentChat] as a query and create and inline request to your bot
|
|
* Visit https://core.telegram.org/bots/api#inlinekeyboardbutton for more info
|
|
*/
|
|
@Serializable
|
|
data class SwitchInlineQueryCurrentChatInlineKeyboardButton(
|
|
override val text: String,
|
|
@SerialName(switchInlineQueryCurrentChatField)
|
|
val switchInlineQueryCurrentChat: String
|
|
) : InlineKeyboardButton
|
|
|
|
/**
|
|
* Complex button with [switchInlineQuery] which will be sent to you in an [dev.inmo.tgbotapi.types.InlineQueries.query.InlineQuery]
|
|
* which you may catch in [dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onBaseInlineQuery] and get
|
|
* from [dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery.query] (or changed by user query in case he will be
|
|
* the fastest hand in the wild west). Can be forwarded in any chat with message in case if it is the only one button in message.
|
|
* Remember that clicking on this button will automatically insert username of this bot in the chosen by user chat, paste
|
|
* [switchInlineQuery] as a query and create and inline request to your bot.
|
|
* Visit https://core.telegram.org/bots/api#inlinekeyboardbutton for more info
|
|
*/
|
|
@Serializable
|
|
data class SwitchInlineQueryInlineKeyboardButton(
|
|
override val text: String,
|
|
@SerialName(switchInlineQueryField)
|
|
val switchInlineQuery: String
|
|
) : InlineKeyboardButton
|
|
|
|
/**
|
|
* Simple [url] button. Can be forwarded in any chat with message in case if it is the only one button in message
|
|
*/
|
|
@Serializable
|
|
data class URLInlineKeyboardButton(
|
|
override val text: String,
|
|
@SerialName(urlField)
|
|
val url: String
|
|
) : 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
|