1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2026-04-07 10:32:44 +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

@@ -973,6 +973,38 @@ public final class dev/inmo/tgbotapi/requests/GetUpdatesRequest$DefaultImpls {
public static fun method (Ldev/inmo/tgbotapi/requests/GetUpdatesRequest;)Ljava/lang/String;
}
public final class dev/inmo/tgbotapi/requests/SavePreparedKeyboardButton : dev/inmo/tgbotapi/requests/abstracts/SimpleRequest {
public static final field Companion Ldev/inmo/tgbotapi/requests/SavePreparedKeyboardButton$Companion;
public synthetic fun <init> (JLdev/inmo/tgbotapi/types/buttons/KeyboardButton;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1-tHkBKVM ()J
public final fun component2 ()Ldev/inmo/tgbotapi/types/buttons/KeyboardButton;
public final fun copy-zv9neSE (JLdev/inmo/tgbotapi/types/buttons/KeyboardButton;)Ldev/inmo/tgbotapi/requests/SavePreparedKeyboardButton;
public static synthetic fun copy-zv9neSE$default (Ldev/inmo/tgbotapi/requests/SavePreparedKeyboardButton;JLdev/inmo/tgbotapi/types/buttons/KeyboardButton;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/SavePreparedKeyboardButton;
public fun equals (Ljava/lang/Object;)Z
public final fun getButton ()Ldev/inmo/tgbotapi/types/buttons/KeyboardButton;
public fun getRequestSerializer ()Lkotlinx/serialization/SerializationStrategy;
public fun getResultDeserializer ()Lkotlinx/serialization/DeserializationStrategy;
public final fun getUserId-tHkBKVM ()J
public fun hashCode ()I
public fun method ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}
public final synthetic class dev/inmo/tgbotapi/requests/SavePreparedKeyboardButton$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Ldev/inmo/tgbotapi/requests/SavePreparedKeyboardButton$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/requests/SavePreparedKeyboardButton;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/requests/SavePreparedKeyboardButton;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/requests/SavePreparedKeyboardButton$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/requests/SetPassportDataErrors : dev/inmo/tgbotapi/requests/abstracts/SimpleRequest {
public static final field Companion Ldev/inmo/tgbotapi/requests/SetPassportDataErrors$Companion;
public fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;Ljava/util/List;)V
@@ -11111,6 +11143,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt {
public static final field yearField Ljava/lang/String;
public static final fun getAllowedConnectionsLength ()Lkotlin/ranges/IntRange;
public static final fun getAllowedConnectionsWithLocalServerLength ()Lkotlin/ranges/IntRange;
public static final fun getAllowedToSavePreparedKeyboardButtons ()Ljava/util/Set;
public static final fun getBasketballAndFootballDiceResultLimit ()Lkotlin/ranges/IntRange;
public static final fun getBotCommandDescriptionLimit ()Lkotlin/ranges/IntRange;
public static final fun getBotCommandLengthLimit ()Lkotlin/ranges/IntRange;
@@ -16509,6 +16542,63 @@ public final class dev/inmo/tgbotapi/types/buttons/KeyboardMarkupSerializer : ko
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
}
public final class dev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton {
public static final field Companion Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton$Companion;
public synthetic fun <init> (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1-WMoZTbI ()Ljava/lang/String;
public final fun copy-zz-h5ko (Ljava/lang/String;)Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton;
public static synthetic fun copy-zz-h5ko$default (Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton;
public fun equals (Ljava/lang/Object;)Z
public final fun getId-WMoZTbI ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class dev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/buttons/PreparedKeyboardButton$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/buttons/PreparedKeyboardId {
public static final field Companion Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardId$Companion;
public static final synthetic fun box-impl (Ljava/lang/String;)Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardId;
public static fun constructor-impl (Ljava/lang/String;)Ljava/lang/String;
public fun equals (Ljava/lang/Object;)Z
public static fun equals-impl (Ljava/lang/String;Ljava/lang/Object;)Z
public static final fun equals-impl0 (Ljava/lang/String;Ljava/lang/String;)Z
public final fun getString ()Ljava/lang/String;
public fun hashCode ()I
public static fun hashCode-impl (Ljava/lang/String;)I
public fun toString ()Ljava/lang/String;
public static fun toString-impl (Ljava/lang/String;)Ljava/lang/String;
public final synthetic fun unbox-impl ()Ljava/lang/String;
}
public final synthetic class dev/inmo/tgbotapi/types/buttons/PreparedKeyboardId$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Ldev/inmo/tgbotapi/types/buttons/PreparedKeyboardId$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun deserialize-KQHJBJs (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/String;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public final fun serialize-JKX4Qt8 (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/String;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/buttons/PreparedKeyboardId$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class dev/inmo/tgbotapi/types/buttons/QuizKeyboardButtonPollType : dev/inmo/tgbotapi/types/buttons/KeyboardButtonPollType {
public static final field INSTANCE Ldev/inmo/tgbotapi/types/buttons/QuizKeyboardButtonPollType;
public fun getType ()Ljava/lang/String;

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
)