1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2026-04-21 17:32:30 +00:00

add support of PreparedKeyboardButton and savePreparedKeyboardButton

This commit is contained in:
2026-04-06 16:11:46 +06:00
parent de13ddeb54
commit a0e748f9a9
7 changed files with 188 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
package dev.inmo.tgbotapi.requests
import dev.inmo.kslog.common.w
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
import dev.inmo.tgbotapi.types.ChatId
import dev.inmo.tgbotapi.types.allowedToSavePreparedKeyboardButtons
import dev.inmo.tgbotapi.types.buttonField
import dev.inmo.tgbotapi.types.buttons.KeyboardButton
import dev.inmo.tgbotapi.types.buttons.PreparedKeyboardButton
import dev.inmo.tgbotapi.types.userIdField
import dev.inmo.tgbotapi.utils.DefaultKTgBotAPIKSLog
import kotlinx.serialization.DeserializationStrategy
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationStrategy
@Serializable
data class SavePreparedKeyboardButton(
@SerialName(userIdField)
val userId: ChatId,
@SerialName(buttonField)
val button: KeyboardButton
) : SimpleRequest<PreparedKeyboardButton> {
override val resultDeserializer: DeserializationStrategy<PreparedKeyboardButton>
get() = PreparedKeyboardButton.serializer()
override val requestSerializer: SerializationStrategy<*>
get() = serializer()
override fun method(): String = "savePreparedKeyboardButton"
init {
if (button::class !in allowedToSavePreparedKeyboardButtons) {
DefaultKTgBotAPIKSLog.w {
"According to https://core.telegram.org/bots/api#savepreparedkeyboardbutton it is disallowed to use " +
"anything except request_users, request_chat, or request_managed_bot, but you passed $button " +
"which is not instance of any allowed buttons type"
}
}
}
}

View File

@@ -1,9 +1,14 @@
package dev.inmo.tgbotapi.types
import dev.inmo.tgbotapi.types.buttons.KeyboardButton
import dev.inmo.tgbotapi.types.buttons.RequestChatKeyboardButton
import dev.inmo.tgbotapi.types.buttons.RequestManagedBotKeyboardButton
import dev.inmo.tgbotapi.types.buttons.RequestUserKeyboardButton
import dev.inmo.tgbotapi.types.location.LiveLocation
import dev.inmo.tgbotapi.utils.BuiltinMimeTypes
import kotlinx.serialization.Serializable
import kotlin.jvm.JvmInline
import kotlin.reflect.KClass
typealias ForwardSignature = String
@@ -122,6 +127,12 @@ val cloudStorageValueLimit = 0 .. 4096
val cloudStorageKeyRegex = Regex("[A-Za-z0-9_-]{${cloudStorageKeyLimit.first},${cloudStorageKeyLimit.last}}")
val cloudStorageValueRegex = Regex(".{${cloudStorageValueLimit.first},${cloudStorageValueLimit.last}}")
val allowedToSavePreparedKeyboardButtons: Set<KClass<out KeyboardButton>> = setOf(
RequestUserKeyboardButton::class,
RequestChatKeyboardButton::class,
RequestManagedBotKeyboardButton::class,
)
// Made as lazy for correct work in K/JS
val telegramInlineModeGifPermittedMimeTypes by lazy {
listOf(

View File

@@ -0,0 +1,11 @@
package dev.inmo.tgbotapi.types.buttons
import dev.inmo.tgbotapi.types.idField
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class PreparedKeyboardButton(
@SerialName(idField)
val id: PreparedKeyboardId
)

View File

@@ -0,0 +1,10 @@
package dev.inmo.tgbotapi.types.buttons
import kotlinx.serialization.Serializable
import kotlin.jvm.JvmInline
@Serializable
@JvmInline
value class PreparedKeyboardId(
val string: String
)