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:
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
)
|
||||
@@ -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
|
||||
)
|
||||
Reference in New Issue
Block a user