mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-06-25 12:45:41 +00:00
Add Bot API 10.1 Rich Messages support
Adds the full Rich Messages type system and methods: - RichText hierarchy: RichTextPlain, RichTextGroup, RichTextEntity and all 24 RichText* entity types, with a recursive serializer handling plain strings, arrays and typed objects - RichBlock hierarchy: all 21 RichBlock* types plus RichBlockCaption, RichBlockTableCell and RichBlockListItem (JsonContentPolymorphic by type) - RichMessage type and RichMessageContent message content; rich_message parsed in RawMessage; RichMessageContentMessage typealias - InputRichMessage (internal constructor + InputRichMessageHTML / InputRichMessageMarkdown factories) and InputRichMessageContent usable as InputMessageContent - SendRichMessage and SendRichMessageDraft requests with API bindings - richMessage parameter on EditChatMessageText - Serialization round-trip test for RichMessage/RichText/RichBlock Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,12 @@
|
|||||||
**THIS UPDATE CONTAINS SUPPORT OF [TELEGRAM BOTS API 10.1](https://core.telegram.org/bots/api-changelog#june-11-2026)**
|
**THIS UPDATE CONTAINS SUPPORT OF [TELEGRAM BOTS API 10.1](https://core.telegram.org/bots/api-changelog#june-11-2026)**
|
||||||
|
|
||||||
* `Core`:
|
* `Core`:
|
||||||
|
* (`Rich Messages`) Added `RichText` (`RichTextPlain`, `RichTextGroup`, `RichTextEntity`) hierarchy with all 24 `RichText*` entity types and a recursive serializer supporting plain strings, arrays and typed objects
|
||||||
|
* (`Rich Messages`) Added `RichBlock` hierarchy with all 21 `RichBlock*` types plus `RichBlockCaption`, `RichBlockTableCell` and `RichBlockListItem`
|
||||||
|
* (`Rich Messages`) Added `RichMessage` type and `RichMessageContent` message content; parsed `rich_message` in `RawMessage`; added `RichMessageContentMessage` typealias
|
||||||
|
* (`Rich Messages`) Added `InputRichMessage` (internal constructor with `InputRichMessageHTML`/`InputRichMessageMarkdown` factories) and `InputRichMessageContent` usable as `InputMessageContent`
|
||||||
|
* (`Rich Messages`) Added `SendRichMessage` and `SendRichMessageDraft` requests
|
||||||
|
* (`Rich Messages`) Added `richMessage` parameter to `EditChatMessageText`
|
||||||
* (`Polls`) Added `Link` type (`dev.inmo.tgbotapi.types.Link`) implementing `PollMedia`, carrying the `url` of a link attached to a poll option
|
* (`Polls`) Added `Link` type (`dev.inmo.tgbotapi.types.Link`) implementing `PollMedia`, carrying the `url` of a link attached to a poll option
|
||||||
* (`Polls`) Added `link` field parsing to `PollMedia` deserialization/serialization
|
* (`Polls`) Added `link` field parsing to `PollMedia` deserialization/serialization
|
||||||
* (`Polls`) Added `TelegramMediaLink` (`InputMediaLink`) implementing `InputPollOptionMedia`, usable as a poll option media
|
* (`Polls`) Added `TelegramMediaLink` (`InputMediaLink`) implementing `InputPollOptionMedia`, usable as a poll option media
|
||||||
@@ -14,6 +20,7 @@
|
|||||||
* (`Join Request Queries`) Added `AnswerChatJoinRequestQuery` request and `ChatJoinRequestQueryResult` enum (`Approve`/`Decline`/`Queue`)
|
* (`Join Request Queries`) Added `AnswerChatJoinRequestQuery` request and `ChatJoinRequestQueryResult` enum (`Approve`/`Decline`/`Queue`)
|
||||||
* (`Join Request Queries`) Added `SendChatJoinRequestWebApp` request
|
* (`Join Request Queries`) Added `SendChatJoinRequestWebApp` request
|
||||||
* `API`:
|
* `API`:
|
||||||
|
* (`Rich Messages`) Added `sendRichMessage` and `sendRichMessageDraft` `TelegramBot` extensions
|
||||||
* (`Join Request Queries`) Added `answerChatJoinRequestQuery` and `sendChatJoinRequestWebApp` `TelegramBot` extensions
|
* (`Join Request Queries`) Added `answerChatJoinRequestQuery` and `sendChatJoinRequestWebApp` `TelegramBot` extensions
|
||||||
* `Utils`:
|
* `Utils`:
|
||||||
* (`Join Request Queries`) Added `ChatJoinRequest.query_id` raw accessor
|
* (`Join Request Queries`) Added `ChatJoinRequest.query_id` raw accessor
|
||||||
|
|||||||
@@ -1962,6 +1962,18 @@ public final class dev/inmo/tgbotapi/extensions/api/send/SendMessageKt {
|
|||||||
public static synthetic fun sendTextMessage-kPvWKIg$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/Chat;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ldev/inmo/tgbotapi/types/LinkPreviewOptions;Ldev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
public static synthetic fun sendTextMessage-kPvWKIg$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/Chat;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ldev/inmo/tgbotapi/types/LinkPreviewOptions;Ldev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class dev/inmo/tgbotapi/extensions/api/send/SendRichMessageDraftKt {
|
||||||
|
public static final fun sendRichMessageDraft-tvXF6p8 (Ldev/inmo/tgbotapi/bot/RequestsExecutor;JJLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||||
|
public static synthetic fun sendRichMessageDraft-tvXF6p8$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;JJLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class dev/inmo/tgbotapi/extensions/api/send/SendRichMessageKt {
|
||||||
|
public static final fun sendRichMessage-mNzvAxs (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/ChatIdentifier;Ldev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||||
|
public static final fun sendRichMessage-mNzvAxs (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/Chat;Ldev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||||
|
public static synthetic fun sendRichMessage-mNzvAxs$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/ChatIdentifier;Ldev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||||
|
public static synthetic fun sendRichMessage-mNzvAxs$default (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/Chat;Ldev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||||
|
}
|
||||||
|
|
||||||
public final class dev/inmo/tgbotapi/extensions/api/send/SendStaticLocationKt {
|
public final class dev/inmo/tgbotapi/extensions/api/send/SendStaticLocationKt {
|
||||||
public static final fun sendLocation-Z2YO6e4 (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/ChatIdentifier;DDLdev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
public static final fun sendLocation-Z2YO6e4 (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/ChatIdentifier;DDLdev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||||
public static final fun sendLocation-Z2YO6e4 (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/Chat;DDLdev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
public static final fun sendLocation-Z2YO6e4 (Ldev/inmo/tgbotapi/bot/RequestsExecutor;Ldev/inmo/tgbotapi/types/chat/Chat;DDLdev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package dev.inmo.tgbotapi.extensions.api.send
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||||
|
import dev.inmo.tgbotapi.requests.send.SendRichMessage
|
||||||
|
import dev.inmo.tgbotapi.types.*
|
||||||
|
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
||||||
|
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||||
|
import dev.inmo.tgbotapi.types.chat.Chat
|
||||||
|
import dev.inmo.tgbotapi.types.message.SuggestedPostParameters
|
||||||
|
import dev.inmo.tgbotapi.types.message.abstracts.ChatContentMessage
|
||||||
|
import dev.inmo.tgbotapi.types.message.content.RichMessageContent
|
||||||
|
import dev.inmo.tgbotapi.types.rich.InputRichMessage
|
||||||
|
|
||||||
|
public suspend fun TelegramBot.sendRichMessage(
|
||||||
|
chatId: ChatIdentifier,
|
||||||
|
richMessage: InputRichMessage,
|
||||||
|
threadId: MessageThreadId? = chatId.threadId,
|
||||||
|
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||||
|
businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
||||||
|
disableNotification: Boolean = false,
|
||||||
|
protectContent: Boolean = false,
|
||||||
|
allowPaidBroadcast: Boolean = false,
|
||||||
|
effectId: EffectId? = null,
|
||||||
|
suggestedPostParameters: SuggestedPostParameters? = null,
|
||||||
|
replyParameters: ReplyParameters? = null,
|
||||||
|
replyMarkup: KeyboardMarkup? = null
|
||||||
|
): ChatContentMessage<RichMessageContent> = execute(
|
||||||
|
SendRichMessage(
|
||||||
|
chatId = chatId,
|
||||||
|
richMessage = richMessage,
|
||||||
|
threadId = threadId,
|
||||||
|
directMessageThreadId = directMessageThreadId,
|
||||||
|
businessConnectionId = businessConnectionId,
|
||||||
|
disableNotification = disableNotification,
|
||||||
|
protectContent = protectContent,
|
||||||
|
allowPaidBroadcast = allowPaidBroadcast,
|
||||||
|
effectId = effectId,
|
||||||
|
suggestedPostParameters = suggestedPostParameters,
|
||||||
|
replyParameters = replyParameters,
|
||||||
|
replyMarkup = replyMarkup
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
public suspend fun TelegramBot.sendRichMessage(
|
||||||
|
chat: Chat,
|
||||||
|
richMessage: InputRichMessage,
|
||||||
|
threadId: MessageThreadId? = chat.id.threadId,
|
||||||
|
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||||
|
businessConnectionId: BusinessConnectionId? = chat.id.businessConnectionId,
|
||||||
|
disableNotification: Boolean = false,
|
||||||
|
protectContent: Boolean = false,
|
||||||
|
allowPaidBroadcast: Boolean = false,
|
||||||
|
effectId: EffectId? = null,
|
||||||
|
suggestedPostParameters: SuggestedPostParameters? = null,
|
||||||
|
replyParameters: ReplyParameters? = null,
|
||||||
|
replyMarkup: KeyboardMarkup? = null
|
||||||
|
): ChatContentMessage<RichMessageContent> = sendRichMessage(
|
||||||
|
chatId = chat.id,
|
||||||
|
richMessage = richMessage,
|
||||||
|
threadId = threadId,
|
||||||
|
directMessageThreadId = directMessageThreadId,
|
||||||
|
businessConnectionId = businessConnectionId,
|
||||||
|
disableNotification = disableNotification,
|
||||||
|
protectContent = protectContent,
|
||||||
|
allowPaidBroadcast = allowPaidBroadcast,
|
||||||
|
effectId = effectId,
|
||||||
|
suggestedPostParameters = suggestedPostParameters,
|
||||||
|
replyParameters = replyParameters,
|
||||||
|
replyMarkup = replyMarkup
|
||||||
|
)
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package dev.inmo.tgbotapi.extensions.api.send
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||||
|
import dev.inmo.tgbotapi.requests.send.SendRichMessageDraft
|
||||||
|
import dev.inmo.tgbotapi.types.ChatId
|
||||||
|
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||||
|
import dev.inmo.tgbotapi.types.rich.InputRichMessage
|
||||||
|
|
||||||
|
public suspend fun TelegramBot.sendRichMessageDraft(
|
||||||
|
chatId: ChatId,
|
||||||
|
draftId: Long,
|
||||||
|
richMessage: InputRichMessage,
|
||||||
|
threadId: MessageThreadId? = null
|
||||||
|
): Unit = execute(
|
||||||
|
SendRichMessageDraft(
|
||||||
|
chatId = chatId,
|
||||||
|
draftId = draftId,
|
||||||
|
richMessage = richMessage,
|
||||||
|
threadId = threadId
|
||||||
|
)
|
||||||
|
)
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -13,6 +13,7 @@ import dev.inmo.tgbotapi.types.message.RawMessageEntity
|
|||||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||||
import dev.inmo.tgbotapi.types.message.content.TextContent
|
import dev.inmo.tgbotapi.types.message.content.TextContent
|
||||||
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
|
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
|
||||||
|
import dev.inmo.tgbotapi.types.rich.InputRichMessage
|
||||||
import dev.inmo.tgbotapi.utils.extensions.makeString
|
import dev.inmo.tgbotapi.utils.extensions.makeString
|
||||||
import kotlinx.serialization.*
|
import kotlinx.serialization.*
|
||||||
|
|
||||||
@@ -73,7 +74,9 @@ data class EditChatMessageText internal constructor(
|
|||||||
@SerialName(linkPreviewOptionsField)
|
@SerialName(linkPreviewOptionsField)
|
||||||
override val linkPreviewOptions: LinkPreviewOptions? = null,
|
override val linkPreviewOptions: LinkPreviewOptions? = null,
|
||||||
@SerialName(replyMarkupField)
|
@SerialName(replyMarkupField)
|
||||||
override val replyMarkup: InlineKeyboardMarkup? = null
|
override val replyMarkup: InlineKeyboardMarkup? = null,
|
||||||
|
@SerialName(richMessageField)
|
||||||
|
val richMessage: InputRichMessage? = null
|
||||||
) : EditChatMessage<TextContent>, EditTextChatMessage, EditReplyMessage, EditLinkPreviewOptionsContainer {
|
) : EditChatMessage<TextContent>, EditTextChatMessage, EditReplyMessage, EditLinkPreviewOptionsContainer {
|
||||||
override val textSources: TextSourcesList? by lazy {
|
override val textSources: TextSourcesList? by lazy {
|
||||||
rawEntities ?.asTextSources(text)
|
rawEntities ?.asTextSources(text)
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package dev.inmo.tgbotapi.requests.send
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.requests.send.abstracts.ReplyingMarkupSendMessageRequest
|
||||||
|
import dev.inmo.tgbotapi.requests.send.abstracts.SendContentMessageRequest
|
||||||
|
import dev.inmo.tgbotapi.types.*
|
||||||
|
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
||||||
|
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||||
|
import dev.inmo.tgbotapi.types.message.*
|
||||||
|
import dev.inmo.tgbotapi.types.message.abstracts.ChatContentMessage
|
||||||
|
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializationStrategyClass
|
||||||
|
import dev.inmo.tgbotapi.types.message.content.RichMessageContent
|
||||||
|
import dev.inmo.tgbotapi.types.rich.InputRichMessage
|
||||||
|
import kotlinx.serialization.DeserializationStrategy
|
||||||
|
import kotlinx.serialization.EncodeDefault
|
||||||
|
import kotlinx.serialization.ExperimentalSerializationApi
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.SerializationStrategy
|
||||||
|
|
||||||
|
internal val RichMessageContentMessageResultDeserializer: DeserializationStrategy<ChatContentMessage<RichMessageContent>>
|
||||||
|
= TelegramBotAPIMessageDeserializationStrategyClass()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this method to send rich messages.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#sendrichmessage">sendRichMessage</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class SendRichMessage(
|
||||||
|
@SerialName(chatIdField)
|
||||||
|
override val chatId: ChatIdentifier,
|
||||||
|
@SerialName(richMessageField)
|
||||||
|
val richMessage: InputRichMessage,
|
||||||
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
|
@SerialName(messageThreadIdField)
|
||||||
|
@EncodeDefault
|
||||||
|
override val threadId: MessageThreadId? = chatId.threadId,
|
||||||
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(directMessagesTopicIdField)
|
||||||
|
override val directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||||
|
@SerialName(businessConnectionIdField)
|
||||||
|
override val businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId,
|
||||||
|
@SerialName(disableNotificationField)
|
||||||
|
override val disableNotification: Boolean = false,
|
||||||
|
@SerialName(protectContentField)
|
||||||
|
override val protectContent: Boolean = false,
|
||||||
|
@SerialName(allowPaidBroadcastField)
|
||||||
|
override val allowPaidBroadcast: Boolean = false,
|
||||||
|
@SerialName(messageEffectIdField)
|
||||||
|
override val effectId: EffectId? = null,
|
||||||
|
@SerialName(suggestedPostParametersField)
|
||||||
|
override val suggestedPostParameters: SuggestedPostParameters? = null,
|
||||||
|
@SerialName(replyParametersField)
|
||||||
|
override val replyParameters: ReplyParameters? = null,
|
||||||
|
@SerialName(replyMarkupField)
|
||||||
|
override val replyMarkup: KeyboardMarkup? = null
|
||||||
|
) : SendContentMessageRequest<ChatContentMessage<RichMessageContent>>,
|
||||||
|
ReplyingMarkupSendMessageRequest<ChatContentMessage<RichMessageContent>> {
|
||||||
|
override fun method(): String = "sendRichMessage"
|
||||||
|
override val resultDeserializer: DeserializationStrategy<ChatContentMessage<RichMessageContent>>
|
||||||
|
get() = RichMessageContentMessageResultDeserializer
|
||||||
|
override val requestSerializer: SerializationStrategy<*>
|
||||||
|
get() = serializer()
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package dev.inmo.tgbotapi.requests.send
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
|
||||||
|
import dev.inmo.tgbotapi.types.ChatId
|
||||||
|
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||||
|
import dev.inmo.tgbotapi.types.chatIdField
|
||||||
|
import dev.inmo.tgbotapi.types.draftIdField
|
||||||
|
import dev.inmo.tgbotapi.types.messageThreadIdField
|
||||||
|
import dev.inmo.tgbotapi.types.richMessageField
|
||||||
|
import dev.inmo.tgbotapi.types.rich.InputRichMessage
|
||||||
|
import dev.inmo.tgbotapi.utils.serializers.UnitFromBooleanSerializer
|
||||||
|
import kotlinx.serialization.DeserializationStrategy
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.SerializationStrategy
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this method to stream a partial rich message to a user while the message is being generated. The streamed draft is
|
||||||
|
* ephemeral and acts as a temporary 30-second preview - once the output is finalized, [SendRichMessage] must be called
|
||||||
|
* with the complete message to persist it in the user's chat.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#sendrichmessagedraft">sendRichMessageDraft</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class SendRichMessageDraft(
|
||||||
|
@SerialName(chatIdField)
|
||||||
|
val chatId: ChatId,
|
||||||
|
/**
|
||||||
|
* Unique identifier of the message draft; must be non-zero. Changes to drafts with the same identifier are animated.
|
||||||
|
*/
|
||||||
|
@SerialName(draftIdField)
|
||||||
|
val draftId: Long,
|
||||||
|
@SerialName(richMessageField)
|
||||||
|
val richMessage: InputRichMessage,
|
||||||
|
@SerialName(messageThreadIdField)
|
||||||
|
val threadId: MessageThreadId? = null
|
||||||
|
) : SimpleRequest<Unit> {
|
||||||
|
init {
|
||||||
|
require(draftId != 0L) {
|
||||||
|
"draftId of SendRichMessageDraft must be non-zero"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override val requestSerializer: SerializationStrategy<*>
|
||||||
|
get() = serializer()
|
||||||
|
|
||||||
|
override val resultDeserializer: DeserializationStrategy<Unit>
|
||||||
|
get() = UnitFromBooleanSerializer
|
||||||
|
|
||||||
|
override fun method(): String = "sendRichMessageDraft"
|
||||||
|
}
|
||||||
@@ -573,6 +573,40 @@ const val supportsJoinRequestQueriesField = "supports_join_request_queries"
|
|||||||
const val queryIdField = "query_id"
|
const val queryIdField = "query_id"
|
||||||
const val chatJoinRequestQueryIdField = "chat_join_request_query_id"
|
const val chatJoinRequestQueryIdField = "chat_join_request_query_id"
|
||||||
const val webAppUrlField = "web_app_url"
|
const val webAppUrlField = "web_app_url"
|
||||||
|
const val richMessageField = "rich_message"
|
||||||
|
const val isRtlField = "is_rtl"
|
||||||
|
const val skipEntityDetectionField = "skip_entity_detection"
|
||||||
|
const val markdownField = "markdown"
|
||||||
|
const val htmlField = "html"
|
||||||
|
const val unixTimeField = "unix_time"
|
||||||
|
const val dateTimeFormatField = "date_time_format"
|
||||||
|
const val alternativeTextField = "alternative_text"
|
||||||
|
const val expressionField = "expression"
|
||||||
|
const val emailAddressField = "email_address"
|
||||||
|
const val hashtagField = "hashtag"
|
||||||
|
const val cashtagField = "cashtag"
|
||||||
|
const val bankCardNumberField = "bank_card_number"
|
||||||
|
const val anchorNameField = "anchor_name"
|
||||||
|
const val referenceNameField = "reference_name"
|
||||||
|
const val blocksField = "blocks"
|
||||||
|
const val itemsField = "items"
|
||||||
|
const val summaryField = "summary"
|
||||||
|
const val sizeField = "size"
|
||||||
|
const val languageField = "language"
|
||||||
|
const val creditField = "credit"
|
||||||
|
const val cellsField = "cells"
|
||||||
|
const val isHeaderField = "is_header"
|
||||||
|
const val colspanField = "colspan"
|
||||||
|
const val rowspanField = "rowspan"
|
||||||
|
const val alignField = "align"
|
||||||
|
const val valignField = "valign"
|
||||||
|
const val zoomField = "zoom"
|
||||||
|
const val voiceNoteField = "voice_note"
|
||||||
|
const val hasCheckboxField = "has_checkbox"
|
||||||
|
const val isCheckedField = "is_checked"
|
||||||
|
const val isOpenField = "is_open"
|
||||||
|
const val isBorderedField = "is_bordered"
|
||||||
|
const val isStripedField = "is_striped"
|
||||||
const val certificateField = "certificate"
|
const val certificateField = "certificate"
|
||||||
const val questionField = "question"
|
const val questionField = "question"
|
||||||
const val questionEntitiesField = "question_entities"
|
const val questionEntitiesField = "question_entities"
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.richMessageField
|
||||||
|
import dev.inmo.tgbotapi.types.rich.InputRichMessage
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the content of a rich message to be sent as the result of an inline query.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#inputrichmessagecontent">InputRichMessageContent</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class InputRichMessageContent(
|
||||||
|
@SerialName(richMessageField)
|
||||||
|
val richMessage: InputRichMessage
|
||||||
|
) : InputMessageContent
|
||||||
@@ -22,6 +22,7 @@ object InputMessageContentSerializer : KSerializer<InputMessageContent> {
|
|||||||
is InputTextMessageContent -> InputTextMessageContent.serializer().serialize(encoder, value)
|
is InputTextMessageContent -> InputTextMessageContent.serializer().serialize(encoder, value)
|
||||||
is InputVenueMessageContent -> InputVenueMessageContent.serializer().serialize(encoder, value)
|
is InputVenueMessageContent -> InputVenueMessageContent.serializer().serialize(encoder, value)
|
||||||
is InputInvoiceMessageContent -> InputInvoiceMessageContent.serializer().serialize(encoder, value)
|
is InputInvoiceMessageContent -> InputInvoiceMessageContent.serializer().serialize(encoder, value)
|
||||||
|
is InputRichMessageContent -> InputRichMessageContent.serializer().serialize(encoder, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import dev.inmo.tgbotapi.types.polls.Poll
|
|||||||
import dev.inmo.tgbotapi.types.polls.PollOptionPersistentId
|
import dev.inmo.tgbotapi.types.polls.PollOptionPersistentId
|
||||||
import dev.inmo.tgbotapi.types.request.ChatShared
|
import dev.inmo.tgbotapi.types.request.ChatShared
|
||||||
import dev.inmo.tgbotapi.types.request.UsersShared
|
import dev.inmo.tgbotapi.types.request.UsersShared
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichMessage
|
||||||
import dev.inmo.tgbotapi.types.stories.Story
|
import dev.inmo.tgbotapi.types.stories.Story
|
||||||
import dev.inmo.tgbotapi.types.venue.Venue
|
import dev.inmo.tgbotapi.types.venue.Venue
|
||||||
import dev.inmo.tgbotapi.utils.isFakeTelegramUser
|
import dev.inmo.tgbotapi.utils.isFakeTelegramUser
|
||||||
@@ -92,6 +93,7 @@ internal data class RawMessage(
|
|||||||
private val caption_entities: RawMessageEntities? = null,
|
private val caption_entities: RawMessageEntities? = null,
|
||||||
private val has_media_spoiler: Boolean? = null,
|
private val has_media_spoiler: Boolean? = null,
|
||||||
private val story: Story? = null,
|
private val story: Story? = null,
|
||||||
|
private val rich_message: RichMessage? = null,
|
||||||
private val audio: AudioFile? = null,
|
private val audio: AudioFile? = null,
|
||||||
private val document: DocumentFile? = null,
|
private val document: DocumentFile? = null,
|
||||||
private val paid_media: PaidMediaInfo? = null,
|
private val paid_media: PaidMediaInfo? = null,
|
||||||
@@ -230,6 +232,11 @@ internal data class RawMessage(
|
|||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
|
|
||||||
when {
|
when {
|
||||||
|
rich_message != null -> RichMessageContent(
|
||||||
|
chat,
|
||||||
|
messageId,
|
||||||
|
rich_message
|
||||||
|
)
|
||||||
story != null -> StoryContent(
|
story != null -> StoryContent(
|
||||||
chat,
|
chat,
|
||||||
messageId,
|
messageId,
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ sealed interface MessageContent: ResendableContent {
|
|||||||
subclass(StoryContent::class)
|
subclass(StoryContent::class)
|
||||||
subclass(GiveawayPublicResultsContent::class)
|
subclass(GiveawayPublicResultsContent::class)
|
||||||
subclass(GiveawayContent::class)
|
subclass(GiveawayContent::class)
|
||||||
|
subclass(RichMessageContent::class)
|
||||||
|
|
||||||
additionalBuilder()
|
additionalBuilder()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.message.content
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.requests.ForwardMessage
|
||||||
|
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||||
|
import dev.inmo.tgbotapi.types.*
|
||||||
|
import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId
|
||||||
|
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
|
||||||
|
import dev.inmo.tgbotapi.types.chat.Chat
|
||||||
|
import dev.inmo.tgbotapi.types.message.SuggestedPostParameters
|
||||||
|
import dev.inmo.tgbotapi.types.message.abstracts.ChatContentMessage
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichMessage
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class RichMessageContent(
|
||||||
|
private val chat: Chat,
|
||||||
|
private val messageId: MessageId,
|
||||||
|
val richMessage: RichMessage
|
||||||
|
) : MessageContent {
|
||||||
|
override fun createResend(
|
||||||
|
chatId: ChatIdentifier,
|
||||||
|
messageThreadId: MessageThreadId?,
|
||||||
|
directMessageThreadId: DirectMessageThreadId?,
|
||||||
|
businessConnectionId: BusinessConnectionId?,
|
||||||
|
disableNotification: Boolean,
|
||||||
|
protectContent: Boolean,
|
||||||
|
allowPaidBroadcast: Boolean,
|
||||||
|
effectId: EffectId?,
|
||||||
|
suggestedPostParameters: SuggestedPostParameters?,
|
||||||
|
replyParameters: ReplyParameters?,
|
||||||
|
replyMarkup: KeyboardMarkup?
|
||||||
|
): Request<ChatContentMessage<RichMessageContent>> {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
return ForwardMessage(
|
||||||
|
chat.id,
|
||||||
|
toChatId = chatId,
|
||||||
|
messageId = messageId,
|
||||||
|
threadId = messageThreadId,
|
||||||
|
directMessageThreadId = directMessageThreadId,
|
||||||
|
disableNotification = disableNotification,
|
||||||
|
protectContent = protectContent
|
||||||
|
) as Request<ChatContentMessage<RichMessageContent>>
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,8 @@ typealias PollMessage = ChatContentMessage<PollContent>
|
|||||||
typealias TextMessage = ChatContentMessage<TextContent>
|
typealias TextMessage = ChatContentMessage<TextContent>
|
||||||
typealias StoryMessage = ChatContentMessage<StoryContent>
|
typealias StoryMessage = ChatContentMessage<StoryContent>
|
||||||
|
|
||||||
|
typealias RichMessageContentMessage = ChatContentMessage<RichMessageContent>
|
||||||
|
|
||||||
typealias LocationMessage = ChatContentMessage<LocationContent>
|
typealias LocationMessage = ChatContentMessage<LocationContent>
|
||||||
typealias LiveLocationMessage = ChatContentMessage<LiveLocationContent>
|
typealias LiveLocationMessage = ChatContentMessage<LiveLocationContent>
|
||||||
typealias StaticLocationMessage = ChatContentMessage<StaticLocationContent>
|
typealias StaticLocationMessage = ChatContentMessage<StaticLocationContent>
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.rich
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.htmlField
|
||||||
|
import dev.inmo.tgbotapi.types.isRtlField
|
||||||
|
import dev.inmo.tgbotapi.types.markdownField
|
||||||
|
import dev.inmo.tgbotapi.types.skipEntityDetectionField
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a rich message to be sent. Exactly one of the fields [html] or [markdown] must be used. Use the
|
||||||
|
* [InputRichMessageHTML] and [InputRichMessageMarkdown] factories to build an instance.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#inputrichmessage">InputRichMessage</a>
|
||||||
|
*/
|
||||||
|
@ConsistentCopyVisibility
|
||||||
|
@Serializable
|
||||||
|
data class InputRichMessage internal constructor(
|
||||||
|
@SerialName(htmlField)
|
||||||
|
val html: String? = null,
|
||||||
|
@SerialName(markdownField)
|
||||||
|
val markdown: String? = null,
|
||||||
|
@SerialName(isRtlField)
|
||||||
|
val isRtl: Boolean? = null,
|
||||||
|
@SerialName(skipEntityDetectionField)
|
||||||
|
val skipEntityDetection: Boolean? = null
|
||||||
|
) {
|
||||||
|
init {
|
||||||
|
require((html == null) != (markdown == null)) {
|
||||||
|
"Exactly one of the fields html or markdown must be used in InputRichMessage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an [InputRichMessage] with the content described using HTML formatting.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#inputrichmessage">InputRichMessage</a>
|
||||||
|
*/
|
||||||
|
fun InputRichMessageHTML(
|
||||||
|
html: String,
|
||||||
|
isRtl: Boolean? = null,
|
||||||
|
skipEntityDetection: Boolean? = null
|
||||||
|
): InputRichMessage = InputRichMessage(
|
||||||
|
html = html,
|
||||||
|
markdown = null,
|
||||||
|
isRtl = isRtl,
|
||||||
|
skipEntityDetection = skipEntityDetection
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an [InputRichMessage] with the content described using Markdown formatting.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#inputrichmessage">InputRichMessage</a>
|
||||||
|
*/
|
||||||
|
fun InputRichMessageMarkdown(
|
||||||
|
markdown: String,
|
||||||
|
isRtl: Boolean? = null,
|
||||||
|
skipEntityDetection: Boolean? = null
|
||||||
|
): InputRichMessage = InputRichMessage(
|
||||||
|
html = null,
|
||||||
|
markdown = markdown,
|
||||||
|
isRtl = isRtl,
|
||||||
|
skipEntityDetection = skipEntityDetection
|
||||||
|
)
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.rich
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.typeField
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
|
||||||
|
import kotlinx.serialization.DeserializationStrategy
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.json.JsonContentPolymorphicSerializer
|
||||||
|
import kotlinx.serialization.json.JsonElement
|
||||||
|
import kotlinx.serialization.json.jsonObject
|
||||||
|
import kotlinx.serialization.json.jsonPrimitive
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a block in a rich formatted message.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblock">RichBlock</a>
|
||||||
|
*/
|
||||||
|
@Serializable(RichBlockSerializer::class)
|
||||||
|
@ClassCastsIncluded
|
||||||
|
sealed interface RichBlock {
|
||||||
|
val type: String
|
||||||
|
}
|
||||||
|
|
||||||
|
object RichBlockSerializer : JsonContentPolymorphicSerializer<RichBlock>(RichBlock::class) {
|
||||||
|
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<RichBlock> {
|
||||||
|
return when (val type = element.jsonObject[typeField]?.jsonPrimitive?.content) {
|
||||||
|
RichBlockParagraph.TYPE -> RichBlockParagraph.serializer()
|
||||||
|
RichBlockSectionHeading.TYPE -> RichBlockSectionHeading.serializer()
|
||||||
|
RichBlockPreformatted.TYPE -> RichBlockPreformatted.serializer()
|
||||||
|
RichBlockFooter.TYPE -> RichBlockFooter.serializer()
|
||||||
|
RichBlockDivider.TYPE -> RichBlockDivider.serializer()
|
||||||
|
RichBlockMathematicalExpression.TYPE -> RichBlockMathematicalExpression.serializer()
|
||||||
|
RichBlockAnchor.TYPE -> RichBlockAnchor.serializer()
|
||||||
|
RichBlockList.TYPE -> RichBlockList.serializer()
|
||||||
|
RichBlockBlockQuotation.TYPE -> RichBlockBlockQuotation.serializer()
|
||||||
|
RichBlockPullQuotation.TYPE -> RichBlockPullQuotation.serializer()
|
||||||
|
RichBlockCollage.TYPE -> RichBlockCollage.serializer()
|
||||||
|
RichBlockSlideshow.TYPE -> RichBlockSlideshow.serializer()
|
||||||
|
RichBlockTable.TYPE -> RichBlockTable.serializer()
|
||||||
|
RichBlockDetails.TYPE -> RichBlockDetails.serializer()
|
||||||
|
RichBlockMap.TYPE -> RichBlockMap.serializer()
|
||||||
|
RichBlockAnimation.TYPE -> RichBlockAnimation.serializer()
|
||||||
|
RichBlockAudio.TYPE -> RichBlockAudio.serializer()
|
||||||
|
RichBlockPhoto.TYPE -> RichBlockPhoto.serializer()
|
||||||
|
RichBlockVideo.TYPE -> RichBlockVideo.serializer()
|
||||||
|
RichBlockVoiceNote.TYPE -> RichBlockVoiceNote.serializer()
|
||||||
|
RichBlockThinking.TYPE -> RichBlockThinking.serializer()
|
||||||
|
else -> error("Unknown RichBlock type: $type")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.rich
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.alignField
|
||||||
|
import dev.inmo.tgbotapi.types.blocksField
|
||||||
|
import dev.inmo.tgbotapi.types.colspanField
|
||||||
|
import dev.inmo.tgbotapi.types.creditField
|
||||||
|
import dev.inmo.tgbotapi.types.hasCheckboxField
|
||||||
|
import dev.inmo.tgbotapi.types.isCheckedField
|
||||||
|
import dev.inmo.tgbotapi.types.isHeaderField
|
||||||
|
import dev.inmo.tgbotapi.types.labelField
|
||||||
|
import dev.inmo.tgbotapi.types.rowspanField
|
||||||
|
import dev.inmo.tgbotapi.types.textField
|
||||||
|
import dev.inmo.tgbotapi.types.typeField
|
||||||
|
import dev.inmo.tgbotapi.types.valignField
|
||||||
|
import dev.inmo.tgbotapi.types.valueField
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Caption of a rich formatted block.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockcaption">RichBlockCaption</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockCaption(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(creditField)
|
||||||
|
val credit: RichText? = null
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cell in a [RichBlockTable].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblocktablecell">RichBlockTableCell</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockTableCell(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText? = null,
|
||||||
|
@SerialName(isHeaderField)
|
||||||
|
val isHeader: Boolean? = null,
|
||||||
|
@SerialName(colspanField)
|
||||||
|
val colspan: Int? = null,
|
||||||
|
@SerialName(rowspanField)
|
||||||
|
val rowspan: Int? = null,
|
||||||
|
@SerialName(alignField)
|
||||||
|
val align: String,
|
||||||
|
@SerialName(valignField)
|
||||||
|
val valign: String
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An item of a [RichBlockList].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblocklistitem">RichBlockListItem</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockListItem(
|
||||||
|
@SerialName(labelField)
|
||||||
|
val label: String,
|
||||||
|
@SerialName(blocksField)
|
||||||
|
val blocks: List<RichBlock>,
|
||||||
|
@SerialName(hasCheckboxField)
|
||||||
|
val hasCheckbox: Boolean? = null,
|
||||||
|
@SerialName(isCheckedField)
|
||||||
|
val isChecked: Boolean? = null,
|
||||||
|
@SerialName(valueField)
|
||||||
|
val value: Int? = null,
|
||||||
|
/**
|
||||||
|
* For ordered lists, the type of the item label; must be one of "a", "A", "i", "I" or "1".
|
||||||
|
*/
|
||||||
|
@SerialName(typeField)
|
||||||
|
val labelType: String? = null
|
||||||
|
)
|
||||||
@@ -0,0 +1,490 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.rich
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.animationField
|
||||||
|
import dev.inmo.tgbotapi.types.audioField
|
||||||
|
import dev.inmo.tgbotapi.types.blocksField
|
||||||
|
import dev.inmo.tgbotapi.types.captionField
|
||||||
|
import dev.inmo.tgbotapi.types.cellsField
|
||||||
|
import dev.inmo.tgbotapi.types.creditField
|
||||||
|
import dev.inmo.tgbotapi.types.expressionField
|
||||||
|
import dev.inmo.tgbotapi.types.files.AnimationFile
|
||||||
|
import dev.inmo.tgbotapi.types.files.AudioFile
|
||||||
|
import dev.inmo.tgbotapi.types.files.PhotoFile
|
||||||
|
import dev.inmo.tgbotapi.types.files.VideoFile
|
||||||
|
import dev.inmo.tgbotapi.types.files.VoiceFile
|
||||||
|
import dev.inmo.tgbotapi.types.hasSpoilerField
|
||||||
|
import dev.inmo.tgbotapi.types.heightField
|
||||||
|
import dev.inmo.tgbotapi.types.isBorderedField
|
||||||
|
import dev.inmo.tgbotapi.types.isOpenField
|
||||||
|
import dev.inmo.tgbotapi.types.isStripedField
|
||||||
|
import dev.inmo.tgbotapi.types.itemsField
|
||||||
|
import dev.inmo.tgbotapi.types.languageField
|
||||||
|
import dev.inmo.tgbotapi.types.location.StaticLocation
|
||||||
|
import dev.inmo.tgbotapi.types.locationField
|
||||||
|
import dev.inmo.tgbotapi.types.nameField
|
||||||
|
import dev.inmo.tgbotapi.types.photoField
|
||||||
|
import dev.inmo.tgbotapi.types.sizeField
|
||||||
|
import dev.inmo.tgbotapi.types.summaryField
|
||||||
|
import dev.inmo.tgbotapi.types.textField
|
||||||
|
import dev.inmo.tgbotapi.types.typeField
|
||||||
|
import dev.inmo.tgbotapi.types.videoField
|
||||||
|
import dev.inmo.tgbotapi.types.voiceNoteField
|
||||||
|
import dev.inmo.tgbotapi.types.widthField
|
||||||
|
import dev.inmo.tgbotapi.types.zoomField
|
||||||
|
import kotlinx.serialization.EncodeDefault
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A text paragraph.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockparagraph">RichBlockParagraph</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockParagraph(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "paragraph"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A section heading.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblocksectionheading">RichBlockSectionHeading</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockSectionHeading(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
/**
|
||||||
|
* Relative size of the text font; 1-6, 1 is the largest, 6 is the smallest.
|
||||||
|
*/
|
||||||
|
@SerialName(sizeField)
|
||||||
|
val size: Int
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "heading"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A preformatted text block.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockpreformatted">RichBlockPreformatted</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockPreformatted(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(languageField)
|
||||||
|
val language: String? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "pre"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A footer.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockfooter">RichBlockFooter</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockFooter(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "footer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A divider.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockdivider">RichBlockDivider</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
class RichBlockDivider : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean = other is RichBlockDivider
|
||||||
|
|
||||||
|
override fun hashCode(): Int = TYPE.hashCode()
|
||||||
|
|
||||||
|
override fun toString(): String = "RichBlockDivider"
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "divider"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with a mathematical expression in LaTeX format.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockmathematicalexpression">RichBlockMathematicalExpression</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockMathematicalExpression(
|
||||||
|
@SerialName(expressionField)
|
||||||
|
val expression: String
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "mathematical_expression"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with an anchor.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockanchor">RichBlockAnchor</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockAnchor(
|
||||||
|
@SerialName(nameField)
|
||||||
|
val name: String
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "anchor"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of blocks.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblocklist">RichBlockList</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockList(
|
||||||
|
@SerialName(itemsField)
|
||||||
|
val items: List<RichBlockListItem>
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "list"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block quotation.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockblockquotation">RichBlockBlockQuotation</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockBlockQuotation(
|
||||||
|
@SerialName(blocksField)
|
||||||
|
val blocks: List<RichBlock>,
|
||||||
|
@SerialName(creditField)
|
||||||
|
val credit: RichText? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "blockquote"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A quotation with centered text.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockpullquotation">RichBlockPullQuotation</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockPullQuotation(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(creditField)
|
||||||
|
val credit: RichText? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "pullquote"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collage.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockcollage">RichBlockCollage</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockCollage(
|
||||||
|
@SerialName(blocksField)
|
||||||
|
val blocks: List<RichBlock>,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichBlockCaption? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "collage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A slideshow.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockslideshow">RichBlockSlideshow</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockSlideshow(
|
||||||
|
@SerialName(blocksField)
|
||||||
|
val blocks: List<RichBlock>,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichBlockCaption? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "slideshow"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A table.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblocktable">RichBlockTable</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockTable(
|
||||||
|
@SerialName(cellsField)
|
||||||
|
val cells: List<List<RichBlockTableCell>>,
|
||||||
|
@SerialName(isBorderedField)
|
||||||
|
val isBordered: Boolean? = null,
|
||||||
|
@SerialName(isStripedField)
|
||||||
|
val isStriped: Boolean? = null,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichText? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "table"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An expandable block for details disclosure.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockdetails">RichBlockDetails</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockDetails(
|
||||||
|
@SerialName(summaryField)
|
||||||
|
val summary: RichText,
|
||||||
|
@SerialName(blocksField)
|
||||||
|
val blocks: List<RichBlock>,
|
||||||
|
@SerialName(isOpenField)
|
||||||
|
val isOpen: Boolean? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "details"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with a map.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockmap">RichBlockMap</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockMap(
|
||||||
|
@SerialName(locationField)
|
||||||
|
val location: StaticLocation,
|
||||||
|
/**
|
||||||
|
* Map zoom level; 13-20.
|
||||||
|
*/
|
||||||
|
@SerialName(zoomField)
|
||||||
|
val zoom: Int,
|
||||||
|
@SerialName(widthField)
|
||||||
|
val width: Int,
|
||||||
|
@SerialName(heightField)
|
||||||
|
val height: Int,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichBlockCaption? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "map"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with an animation.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockanimation">RichBlockAnimation</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockAnimation(
|
||||||
|
@SerialName(animationField)
|
||||||
|
val animation: AnimationFile,
|
||||||
|
@SerialName(hasSpoilerField)
|
||||||
|
val hasSpoiler: Boolean? = null,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichBlockCaption? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "animation"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with a music file.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockaudio">RichBlockAudio</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockAudio(
|
||||||
|
@SerialName(audioField)
|
||||||
|
val audio: AudioFile,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichBlockCaption? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "audio"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with a photo.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockphoto">RichBlockPhoto</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockPhoto(
|
||||||
|
@SerialName(photoField)
|
||||||
|
val photo: PhotoFile,
|
||||||
|
@SerialName(hasSpoilerField)
|
||||||
|
val hasSpoiler: Boolean? = null,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichBlockCaption? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "photo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with a video.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockvideo">RichBlockVideo</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockVideo(
|
||||||
|
@SerialName(videoField)
|
||||||
|
val video: VideoFile,
|
||||||
|
@SerialName(hasSpoilerField)
|
||||||
|
val hasSpoiler: Boolean? = null,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichBlockCaption? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "video"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with a voice note.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockvoicenote">RichBlockVoiceNote</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockVoiceNote(
|
||||||
|
@SerialName(voiceNoteField)
|
||||||
|
val voiceNote: VoiceFile,
|
||||||
|
@SerialName(captionField)
|
||||||
|
val caption: RichBlockCaption? = null
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "voice_note"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A block with a "Thinking…" placeholder. May be used only in sendRichMessageDraft.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richblockthinking">RichBlockThinking</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichBlockThinking(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichBlock {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "thinking"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.rich
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.blocksField
|
||||||
|
import dev.inmo.tgbotapi.types.isRtlField
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rich formatted message.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richmessage">RichMessage</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichMessage(
|
||||||
|
@SerialName(blocksField)
|
||||||
|
val blocks: List<RichBlock>,
|
||||||
|
@SerialName(isRtlField)
|
||||||
|
val isRtl: Boolean? = null
|
||||||
|
)
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.rich
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.typeField
|
||||||
|
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
|
||||||
|
import kotlinx.serialization.DeserializationStrategy
|
||||||
|
import kotlinx.serialization.KSerializer
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||||
|
import kotlinx.serialization.encoding.Decoder
|
||||||
|
import kotlinx.serialization.encoding.Encoder
|
||||||
|
import kotlinx.serialization.json.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a rich formatted text. It can be either a plain text ([RichTextPlain]), a group of rich texts
|
||||||
|
* ([RichTextGroup]) or any of [RichTextEntity] subtypes.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtext">RichText</a>
|
||||||
|
*/
|
||||||
|
@Serializable(RichTextSerializer::class)
|
||||||
|
@ClassCastsIncluded
|
||||||
|
sealed interface RichText
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A plain (non-formatted) part of a [RichText]. Serialized as a bare JSON string.
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextPlain(
|
||||||
|
val text: String
|
||||||
|
) : RichText
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A group of [RichText]s. Serialized as a JSON array.
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextGroup(
|
||||||
|
val parts: List<RichText>
|
||||||
|
) : RichText
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Any typed (formatted) part of a [RichText]. Serialized as a JSON object with the [type] discriminator.
|
||||||
|
*/
|
||||||
|
@Serializable(RichTextEntitySerializer::class)
|
||||||
|
sealed interface RichTextEntity : RichText {
|
||||||
|
val type: String
|
||||||
|
}
|
||||||
|
|
||||||
|
object RichTextSerializer : KSerializer<RichText> {
|
||||||
|
override val descriptor: SerialDescriptor = JsonElement.serializer().descriptor
|
||||||
|
|
||||||
|
private fun fromJson(json: Json, element: JsonElement): RichText = when (element) {
|
||||||
|
is JsonArray -> RichTextGroup(element.map { fromJson(json, it) })
|
||||||
|
is JsonObject -> json.decodeFromJsonElement(RichTextEntitySerializer, element)
|
||||||
|
is JsonPrimitive -> RichTextPlain(element.content)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toJson(json: Json, value: RichText): JsonElement = when (value) {
|
||||||
|
is RichTextPlain -> JsonPrimitive(value.text)
|
||||||
|
is RichTextGroup -> JsonArray(value.parts.map { toJson(json, it) })
|
||||||
|
is RichTextEntity -> json.encodeToJsonElement(RichTextEntitySerializer, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun deserialize(decoder: Decoder): RichText {
|
||||||
|
val input = decoder as JsonDecoder
|
||||||
|
return fromJson(input.json, input.decodeJsonElement())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun serialize(encoder: Encoder, value: RichText) {
|
||||||
|
val output = encoder as JsonEncoder
|
||||||
|
output.encodeJsonElement(toJson(output.json, value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object RichTextEntitySerializer : JsonContentPolymorphicSerializer<RichTextEntity>(RichTextEntity::class) {
|
||||||
|
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<RichTextEntity> {
|
||||||
|
return when (val type = element.jsonObject[typeField]?.jsonPrimitive?.content) {
|
||||||
|
RichTextBold.TYPE -> RichTextBold.serializer()
|
||||||
|
RichTextItalic.TYPE -> RichTextItalic.serializer()
|
||||||
|
RichTextUnderline.TYPE -> RichTextUnderline.serializer()
|
||||||
|
RichTextStrikethrough.TYPE -> RichTextStrikethrough.serializer()
|
||||||
|
RichTextSpoiler.TYPE -> RichTextSpoiler.serializer()
|
||||||
|
RichTextDateTime.TYPE -> RichTextDateTime.serializer()
|
||||||
|
RichTextTextMention.TYPE -> RichTextTextMention.serializer()
|
||||||
|
RichTextSubscript.TYPE -> RichTextSubscript.serializer()
|
||||||
|
RichTextSuperscript.TYPE -> RichTextSuperscript.serializer()
|
||||||
|
RichTextMarked.TYPE -> RichTextMarked.serializer()
|
||||||
|
RichTextCode.TYPE -> RichTextCode.serializer()
|
||||||
|
RichTextCustomEmoji.TYPE -> RichTextCustomEmoji.serializer()
|
||||||
|
RichTextMathematicalExpression.TYPE -> RichTextMathematicalExpression.serializer()
|
||||||
|
RichTextUrl.TYPE -> RichTextUrl.serializer()
|
||||||
|
RichTextEmailAddress.TYPE -> RichTextEmailAddress.serializer()
|
||||||
|
RichTextPhoneNumber.TYPE -> RichTextPhoneNumber.serializer()
|
||||||
|
RichTextBankCardNumber.TYPE -> RichTextBankCardNumber.serializer()
|
||||||
|
RichTextMention.TYPE -> RichTextMention.serializer()
|
||||||
|
RichTextHashtag.TYPE -> RichTextHashtag.serializer()
|
||||||
|
RichTextCashtag.TYPE -> RichTextCashtag.serializer()
|
||||||
|
RichTextBotCommand.TYPE -> RichTextBotCommand.serializer()
|
||||||
|
RichTextAnchor.TYPE -> RichTextAnchor.serializer()
|
||||||
|
RichTextAnchorLink.TYPE -> RichTextAnchorLink.serializer()
|
||||||
|
RichTextReference.TYPE -> RichTextReference.serializer()
|
||||||
|
RichTextReferenceLink.TYPE -> RichTextReferenceLink.serializer()
|
||||||
|
else -> error("Unknown RichTextEntity type: $type")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,531 @@
|
|||||||
|
package dev.inmo.tgbotapi.types.rich
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.CustomEmojiId
|
||||||
|
import dev.inmo.tgbotapi.types.alternativeTextField
|
||||||
|
import dev.inmo.tgbotapi.types.anchorNameField
|
||||||
|
import dev.inmo.tgbotapi.types.bankCardNumberField
|
||||||
|
import dev.inmo.tgbotapi.types.botCommandField
|
||||||
|
import dev.inmo.tgbotapi.types.cashtagField
|
||||||
|
import dev.inmo.tgbotapi.types.chat.User
|
||||||
|
import dev.inmo.tgbotapi.types.customEmojiIdField
|
||||||
|
import dev.inmo.tgbotapi.types.dateTimeFormatField
|
||||||
|
import dev.inmo.tgbotapi.types.emailAddressField
|
||||||
|
import dev.inmo.tgbotapi.types.expressionField
|
||||||
|
import dev.inmo.tgbotapi.types.hashtagField
|
||||||
|
import dev.inmo.tgbotapi.types.nameField
|
||||||
|
import dev.inmo.tgbotapi.types.phoneNumberField
|
||||||
|
import dev.inmo.tgbotapi.types.referenceNameField
|
||||||
|
import dev.inmo.tgbotapi.types.textField
|
||||||
|
import dev.inmo.tgbotapi.types.typeField
|
||||||
|
import dev.inmo.tgbotapi.types.unixTimeField
|
||||||
|
import dev.inmo.tgbotapi.types.urlField
|
||||||
|
import dev.inmo.tgbotapi.types.userField
|
||||||
|
import dev.inmo.tgbotapi.types.usernameField
|
||||||
|
import kotlinx.serialization.EncodeDefault
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A bold [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextbold">RichTextBold</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextBold(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "bold"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An italicized [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextitalic">RichTextItalic</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextItalic(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "italic"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An underlined [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextunderline">RichTextUnderline</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextUnderline(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "underline"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A strikethrough [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextstrikethrough">RichTextStrikethrough</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextStrikethrough(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "strikethrough"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A [RichTextEntity] covered by a spoiler.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextspoiler">RichTextSpoiler</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextSpoiler(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "spoiler"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A subscript [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextsubscript">RichTextSubscript</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextSubscript(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "subscript"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A superscript [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextsuperscript">RichTextSuperscript</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextSuperscript(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "superscript"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A marked [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextmarked">RichTextMarked</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextMarked(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "marked"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A monowidth [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextcode">RichTextCode</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextCode(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "code"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A formatted date and time [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextdatetime">RichTextDateTime</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextDateTime(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(unixTimeField)
|
||||||
|
val unixTime: Long,
|
||||||
|
@SerialName(dateTimeFormatField)
|
||||||
|
val dateTimeFormat: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "date_time"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A mention of a Telegram user by their identifier.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtexttextmention">RichTextTextMention</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextTextMention(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(userField)
|
||||||
|
val user: User
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "text_mention"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom emoji [RichTextEntity].
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextcustomemoji">RichTextCustomEmoji</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextCustomEmoji(
|
||||||
|
@SerialName(customEmojiIdField)
|
||||||
|
val customEmojiId: CustomEmojiId,
|
||||||
|
@SerialName(alternativeTextField)
|
||||||
|
val alternativeText: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "custom_emoji"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A mathematical expression in LaTeX format.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextmathematicalexpression">RichTextMathematicalExpression</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextMathematicalExpression(
|
||||||
|
@SerialName(expressionField)
|
||||||
|
val expression: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "mathematical_expression"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A [RichTextEntity] with a link.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtexturl">RichTextUrl</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextUrl(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(urlField)
|
||||||
|
val url: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "url"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A [RichTextEntity] with an email address.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextemailaddress">RichTextEmailAddress</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextEmailAddress(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(emailAddressField)
|
||||||
|
val emailAddress: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "email_address"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A [RichTextEntity] with a phone number.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextphonenumber">RichTextPhoneNumber</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextPhoneNumber(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(phoneNumberField)
|
||||||
|
val phoneNumber: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "phone_number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A [RichTextEntity] with a bank card number.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextbankcardnumber">RichTextBankCardNumber</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextBankCardNumber(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(bankCardNumberField)
|
||||||
|
val bankCardNumber: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "bank_card_number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A mention by a username.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextmention">RichTextMention</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextMention(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(usernameField)
|
||||||
|
val username: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "mention"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A hashtag.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtexthashtag">RichTextHashtag</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextHashtag(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(hashtagField)
|
||||||
|
val hashtag: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "hashtag"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cashtag.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextcashtag">RichTextCashtag</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextCashtag(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(cashtagField)
|
||||||
|
val cashtag: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "cashtag"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A bot command.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextbotcommand">RichTextBotCommand</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextBotCommand(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(botCommandField)
|
||||||
|
val botCommand: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "bot_command"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An anchor.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextanchor">RichTextAnchor</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextAnchor(
|
||||||
|
@SerialName(nameField)
|
||||||
|
val name: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "anchor"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A link to an anchor.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextanchorlink">RichTextAnchorLink</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextAnchorLink(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(anchorNameField)
|
||||||
|
val anchorName: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "anchor_link"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A reference.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextreference">RichTextReference</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextReference(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(nameField)
|
||||||
|
val name: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "reference"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A link to a reference.
|
||||||
|
*
|
||||||
|
* @see <a href="https://core.telegram.org/bots/api#richtextreferencelink">RichTextReferenceLink</a>
|
||||||
|
*/
|
||||||
|
@Serializable
|
||||||
|
data class RichTextReferenceLink(
|
||||||
|
@SerialName(textField)
|
||||||
|
val text: RichText,
|
||||||
|
@SerialName(referenceNameField)
|
||||||
|
val referenceName: String
|
||||||
|
) : RichTextEntity {
|
||||||
|
@EncodeDefault
|
||||||
|
@SerialName(typeField)
|
||||||
|
override val type: String = TYPE
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val TYPE = "reference_link"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
package dev.inmo.tgbotapi.types
|
||||||
|
|
||||||
|
import dev.inmo.tgbotapi.types.rich.*
|
||||||
|
import kotlinx.serialization.json.Json
|
||||||
|
import kotlinx.serialization.encodeToString
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
class RichMessageSerializationTest {
|
||||||
|
private val json = Json { encodeDefaults = true }
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun decodesRichMessageWithMixedRichText() {
|
||||||
|
val source = """
|
||||||
|
{
|
||||||
|
"blocks": [
|
||||||
|
{
|
||||||
|
"type": "paragraph",
|
||||||
|
"text": ["Hello ", {"type": "bold", "text": "world"}, "!"]
|
||||||
|
},
|
||||||
|
{"type": "heading", "text": "Title", "size": 1},
|
||||||
|
{"type": "divider"},
|
||||||
|
{"type": "list", "items": [
|
||||||
|
{"label": "1", "blocks": [{"type": "paragraph", "text": "first"}]}
|
||||||
|
]}
|
||||||
|
],
|
||||||
|
"is_rtl": false
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
|
||||||
|
val message = json.decodeFromString(RichMessage.serializer(), source)
|
||||||
|
assertEquals(4, message.blocks.size)
|
||||||
|
|
||||||
|
val paragraph = message.blocks[0] as RichBlockParagraph
|
||||||
|
val group = paragraph.text as RichTextGroup
|
||||||
|
assertEquals(RichTextPlain("Hello "), group.parts[0])
|
||||||
|
assertEquals(RichTextBold(RichTextPlain("world")), group.parts[1])
|
||||||
|
assertEquals(RichTextPlain("!"), group.parts[2])
|
||||||
|
|
||||||
|
val heading = message.blocks[1] as RichBlockSectionHeading
|
||||||
|
assertEquals(RichTextPlain("Title"), heading.text)
|
||||||
|
assertEquals(1, heading.size)
|
||||||
|
|
||||||
|
assertTrue(message.blocks[2] is RichBlockDivider)
|
||||||
|
|
||||||
|
val list = message.blocks[3] as RichBlockList
|
||||||
|
assertEquals("1", list.items[0].label)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun roundTripsRichMessage() {
|
||||||
|
val message = RichMessage(
|
||||||
|
blocks = listOf(
|
||||||
|
RichBlockParagraph(
|
||||||
|
RichTextGroup(
|
||||||
|
listOf(
|
||||||
|
RichTextPlain("a "),
|
||||||
|
RichTextItalic(RichTextPlain("b")),
|
||||||
|
RichTextUrl(RichTextPlain("link"), "https://example.org")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
RichBlockDivider()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
val encoded = json.encodeToString(RichMessage.serializer(), message)
|
||||||
|
val decoded = json.decodeFromString(RichMessage.serializer(), encoded)
|
||||||
|
assertEquals(message, decoded)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1906,6 +1906,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
|
|||||||
public static final fun ifInputInvoiceMessageContent (Ldev/inmo/tgbotapi/abstracts/CommonSendInvoiceData;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifInputInvoiceMessageContent (Ldev/inmo/tgbotapi/abstracts/CommonSendInvoiceData;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifInputInvoiceMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifInputInvoiceMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifInputLocationMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifInputLocationMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifInputRichMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifInputTextMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifInputTextMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifInputVenueMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifInputVenueMessageContent (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifInternal (Ldev/inmo/tgbotapi/types/ReplyInfo;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifInternal (Ldev/inmo/tgbotapi/types/ReplyInfo;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
@@ -2082,6 +2083,56 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
|
|||||||
public static final fun ifRequestGuestMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifRequestGuestMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifRestrictedChatMember (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifRestrictedChatMember (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifRestrictedMemberChatMember (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifRestrictedMemberChatMember (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockAnchor (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockAnimation (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockAudio (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockBlockQuotation (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockCollage (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockDetails (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockDivider (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockFooter (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockList (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockMap (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockMathematicalExpression (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockParagraph (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockPhoto (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockPreformatted (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockPullQuotation (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockSectionHeading (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockSlideshow (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockTable (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockThinking (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockVideo (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichBlockVoiceNote (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichMessageContent (Ldev/inmo/tgbotapi/types/message/content/ResendableContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextAnchor (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextAnchorLink (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextBankCardNumber (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextBold (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextBotCommand (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextCashtag (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextCode (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextCustomEmoji (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextDateTime (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextEmailAddress (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextEntity (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextGroup (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextHashtag (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextItalic (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextMarked (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextMathematicalExpression (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextMention (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextPhoneNumber (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextPlain (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextReference (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextReferenceLink (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextSpoiler (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextStrikethrough (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextSubscript (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextSuperscript (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextTextMention (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextUnderline (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
|
public static final fun ifRichTextUrl (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifSecondaryChatInviteLink (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifSecondaryChatInviteLink (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifSecureValueIdentity (Ldev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifSecureValueIdentity (Ldev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
public static final fun ifSecureValueWithData (Ldev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
public static final fun ifSecureValueWithData (Ldev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||||
@@ -2342,6 +2393,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
|
|||||||
public static final fun inputInvoiceMessageContentOrThrow (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputInvoiceMessageContent;
|
public static final fun inputInvoiceMessageContentOrThrow (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputInvoiceMessageContent;
|
||||||
public static final fun inputLocationMessageContentOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputLocationMessageContent;
|
public static final fun inputLocationMessageContentOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputLocationMessageContent;
|
||||||
public static final fun inputLocationMessageContentOrThrow (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputLocationMessageContent;
|
public static final fun inputLocationMessageContentOrThrow (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputLocationMessageContent;
|
||||||
|
public static final fun inputRichMessageContentOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputRichMessageContent;
|
||||||
|
public static final fun inputRichMessageContentOrThrow (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputRichMessageContent;
|
||||||
public static final fun inputTextMessageContentOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputTextMessageContent;
|
public static final fun inputTextMessageContentOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputTextMessageContent;
|
||||||
public static final fun inputTextMessageContentOrThrow (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputTextMessageContent;
|
public static final fun inputTextMessageContentOrThrow (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputTextMessageContent;
|
||||||
public static final fun inputVenueMessageContentOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputVenueMessageContent;
|
public static final fun inputVenueMessageContentOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputMessageContent;)Ldev/inmo/tgbotapi/types/InlineQueries/InputMessageContent/InputVenueMessageContent;
|
||||||
@@ -2694,6 +2747,106 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt {
|
|||||||
public static final fun restrictedChatMemberOrThrow (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/chat/member/RestrictedChatMember;
|
public static final fun restrictedChatMemberOrThrow (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/chat/member/RestrictedChatMember;
|
||||||
public static final fun restrictedMemberChatMemberOrNull (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/chat/member/RestrictedMemberChatMember;
|
public static final fun restrictedMemberChatMemberOrNull (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/chat/member/RestrictedMemberChatMember;
|
||||||
public static final fun restrictedMemberChatMemberOrThrow (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/chat/member/RestrictedMemberChatMember;
|
public static final fun restrictedMemberChatMemberOrThrow (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/chat/member/RestrictedMemberChatMember;
|
||||||
|
public static final fun richBlockAnchorOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockAnchor;
|
||||||
|
public static final fun richBlockAnchorOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockAnchor;
|
||||||
|
public static final fun richBlockAnimationOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockAnimation;
|
||||||
|
public static final fun richBlockAnimationOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockAnimation;
|
||||||
|
public static final fun richBlockAudioOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockAudio;
|
||||||
|
public static final fun richBlockAudioOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockAudio;
|
||||||
|
public static final fun richBlockBlockQuotationOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockBlockQuotation;
|
||||||
|
public static final fun richBlockBlockQuotationOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockBlockQuotation;
|
||||||
|
public static final fun richBlockCollageOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockCollage;
|
||||||
|
public static final fun richBlockCollageOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockCollage;
|
||||||
|
public static final fun richBlockDetailsOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDetails;
|
||||||
|
public static final fun richBlockDetailsOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDetails;
|
||||||
|
public static final fun richBlockDividerOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDivider;
|
||||||
|
public static final fun richBlockDividerOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDivider;
|
||||||
|
public static final fun richBlockFooterOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockFooter;
|
||||||
|
public static final fun richBlockFooterOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockFooter;
|
||||||
|
public static final fun richBlockListOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockList;
|
||||||
|
public static final fun richBlockListOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockList;
|
||||||
|
public static final fun richBlockMapOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockMap;
|
||||||
|
public static final fun richBlockMapOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockMap;
|
||||||
|
public static final fun richBlockMathematicalExpressionOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockMathematicalExpression;
|
||||||
|
public static final fun richBlockMathematicalExpressionOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockMathematicalExpression;
|
||||||
|
public static final fun richBlockParagraphOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockParagraph;
|
||||||
|
public static final fun richBlockParagraphOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockParagraph;
|
||||||
|
public static final fun richBlockPhotoOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockPhoto;
|
||||||
|
public static final fun richBlockPhotoOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockPhoto;
|
||||||
|
public static final fun richBlockPreformattedOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockPreformatted;
|
||||||
|
public static final fun richBlockPreformattedOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockPreformatted;
|
||||||
|
public static final fun richBlockPullQuotationOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockPullQuotation;
|
||||||
|
public static final fun richBlockPullQuotationOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockPullQuotation;
|
||||||
|
public static final fun richBlockSectionHeadingOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockSectionHeading;
|
||||||
|
public static final fun richBlockSectionHeadingOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockSectionHeading;
|
||||||
|
public static final fun richBlockSlideshowOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockSlideshow;
|
||||||
|
public static final fun richBlockSlideshowOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockSlideshow;
|
||||||
|
public static final fun richBlockTableOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockTable;
|
||||||
|
public static final fun richBlockTableOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockTable;
|
||||||
|
public static final fun richBlockThinkingOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockThinking;
|
||||||
|
public static final fun richBlockThinkingOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockThinking;
|
||||||
|
public static final fun richBlockVideoOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockVideo;
|
||||||
|
public static final fun richBlockVideoOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockVideo;
|
||||||
|
public static final fun richBlockVoiceNoteOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockVoiceNote;
|
||||||
|
public static final fun richBlockVoiceNoteOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockVoiceNote;
|
||||||
|
public static final fun richMessageContentOrNull (Ldev/inmo/tgbotapi/types/message/content/ResendableContent;)Ldev/inmo/tgbotapi/types/message/content/RichMessageContent;
|
||||||
|
public static final fun richMessageContentOrThrow (Ldev/inmo/tgbotapi/types/message/content/ResendableContent;)Ldev/inmo/tgbotapi/types/message/content/RichMessageContent;
|
||||||
|
public static final fun richTextAnchorLinkOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextAnchorLink;
|
||||||
|
public static final fun richTextAnchorLinkOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextAnchorLink;
|
||||||
|
public static final fun richTextAnchorOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextAnchor;
|
||||||
|
public static final fun richTextAnchorOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextAnchor;
|
||||||
|
public static final fun richTextBankCardNumberOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBankCardNumber;
|
||||||
|
public static final fun richTextBankCardNumberOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBankCardNumber;
|
||||||
|
public static final fun richTextBoldOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBold;
|
||||||
|
public static final fun richTextBoldOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBold;
|
||||||
|
public static final fun richTextBotCommandOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBotCommand;
|
||||||
|
public static final fun richTextBotCommandOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBotCommand;
|
||||||
|
public static final fun richTextCashtagOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCashtag;
|
||||||
|
public static final fun richTextCashtagOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCashtag;
|
||||||
|
public static final fun richTextCodeOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCode;
|
||||||
|
public static final fun richTextCodeOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCode;
|
||||||
|
public static final fun richTextCustomEmojiOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCustomEmoji;
|
||||||
|
public static final fun richTextCustomEmojiOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCustomEmoji;
|
||||||
|
public static final fun richTextDateTimeOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextDateTime;
|
||||||
|
public static final fun richTextDateTimeOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextDateTime;
|
||||||
|
public static final fun richTextEmailAddressOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextEmailAddress;
|
||||||
|
public static final fun richTextEmailAddressOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextEmailAddress;
|
||||||
|
public static final fun richTextEntityOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextEntity;
|
||||||
|
public static final fun richTextEntityOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextEntity;
|
||||||
|
public static final fun richTextGroupOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextGroup;
|
||||||
|
public static final fun richTextGroupOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextGroup;
|
||||||
|
public static final fun richTextHashtagOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextHashtag;
|
||||||
|
public static final fun richTextHashtagOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextHashtag;
|
||||||
|
public static final fun richTextItalicOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextItalic;
|
||||||
|
public static final fun richTextItalicOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextItalic;
|
||||||
|
public static final fun richTextMarkedOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextMarked;
|
||||||
|
public static final fun richTextMarkedOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextMarked;
|
||||||
|
public static final fun richTextMathematicalExpressionOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextMathematicalExpression;
|
||||||
|
public static final fun richTextMathematicalExpressionOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextMathematicalExpression;
|
||||||
|
public static final fun richTextMentionOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextMention;
|
||||||
|
public static final fun richTextMentionOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextMention;
|
||||||
|
public static final fun richTextPhoneNumberOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextPhoneNumber;
|
||||||
|
public static final fun richTextPhoneNumberOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextPhoneNumber;
|
||||||
|
public static final fun richTextPlainOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextPlain;
|
||||||
|
public static final fun richTextPlainOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextPlain;
|
||||||
|
public static final fun richTextReferenceLinkOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextReferenceLink;
|
||||||
|
public static final fun richTextReferenceLinkOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextReferenceLink;
|
||||||
|
public static final fun richTextReferenceOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextReference;
|
||||||
|
public static final fun richTextReferenceOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextReference;
|
||||||
|
public static final fun richTextSpoilerOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextSpoiler;
|
||||||
|
public static final fun richTextSpoilerOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextSpoiler;
|
||||||
|
public static final fun richTextStrikethroughOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextStrikethrough;
|
||||||
|
public static final fun richTextStrikethroughOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextStrikethrough;
|
||||||
|
public static final fun richTextSubscriptOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextSubscript;
|
||||||
|
public static final fun richTextSubscriptOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextSubscript;
|
||||||
|
public static final fun richTextSuperscriptOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextSuperscript;
|
||||||
|
public static final fun richTextSuperscriptOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextSuperscript;
|
||||||
|
public static final fun richTextTextMentionOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextTextMention;
|
||||||
|
public static final fun richTextTextMentionOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextTextMention;
|
||||||
|
public static final fun richTextUnderlineOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextUnderline;
|
||||||
|
public static final fun richTextUnderlineOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextUnderline;
|
||||||
|
public static final fun richTextUrlOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextUrl;
|
||||||
|
public static final fun richTextUrlOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextUrl;
|
||||||
public static final fun secondaryChatInviteLinkOrNull (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/SecondaryChatInviteLink;
|
public static final fun secondaryChatInviteLinkOrNull (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/SecondaryChatInviteLink;
|
||||||
public static final fun secondaryChatInviteLinkOrThrow (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/SecondaryChatInviteLink;
|
public static final fun secondaryChatInviteLinkOrThrow (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/SecondaryChatInviteLink;
|
||||||
public static final fun secureValueIdentityOrNull (Ldev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue;)Ldev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValueIdentity;
|
public static final fun secureValueIdentityOrNull (Ldev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValue;)Ldev/inmo/tgbotapi/types/passport/decrypted/abstracts/SecureValueIdentity;
|
||||||
@@ -3261,6 +3414,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/extensions/raw/CallbackQue
|
|||||||
|
|
||||||
public final class dev/inmo/tgbotapi/extensions/utils/extensions/raw/ChatJoinRequestKt {
|
public final class dev/inmo/tgbotapi/extensions/utils/extensions/raw/ChatJoinRequestKt {
|
||||||
public static final fun getInvite_link (Ldev/inmo/tgbotapi/types/chat/ChatJoinRequest;)Ldev/inmo/tgbotapi/types/ChatInviteLink;
|
public static final fun getInvite_link (Ldev/inmo/tgbotapi/types/chat/ChatJoinRequest;)Ldev/inmo/tgbotapi/types/ChatInviteLink;
|
||||||
|
public static final fun getQuery_id (Ldev/inmo/tgbotapi/types/chat/ChatJoinRequest;)Ljava/lang/String;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class dev/inmo/tgbotapi/extensions/utils/extensions/raw/ChatMemberUpdatedKt {
|
public final class dev/inmo/tgbotapi/extensions/utils/extensions/raw/ChatMemberUpdatedKt {
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputContactMes
|
|||||||
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputInvoiceMessageContent
|
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputInvoiceMessageContent
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputLocationMessageContent
|
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputLocationMessageContent
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputMessageContent
|
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputMessageContent
|
||||||
|
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputRichMessageContent
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputTextMessageContent
|
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputTextMessageContent
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputVenueMessageContent
|
import dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputVenueMessageContent
|
||||||
import dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery
|
import dev.inmo.tgbotapi.types.InlineQueries.query.BaseInlineQuery
|
||||||
@@ -414,6 +415,7 @@ import dev.inmo.tgbotapi.types.message.content.PaidMediaInfoContent
|
|||||||
import dev.inmo.tgbotapi.types.message.content.PhotoContent
|
import dev.inmo.tgbotapi.types.message.content.PhotoContent
|
||||||
import dev.inmo.tgbotapi.types.message.content.PollContent
|
import dev.inmo.tgbotapi.types.message.content.PollContent
|
||||||
import dev.inmo.tgbotapi.types.message.content.ResendableContent
|
import dev.inmo.tgbotapi.types.message.content.ResendableContent
|
||||||
|
import dev.inmo.tgbotapi.types.message.content.RichMessageContent
|
||||||
import dev.inmo.tgbotapi.types.message.content.SpoilerableMediaContent
|
import dev.inmo.tgbotapi.types.message.content.SpoilerableMediaContent
|
||||||
import dev.inmo.tgbotapi.types.message.content.StaticLocationContent
|
import dev.inmo.tgbotapi.types.message.content.StaticLocationContent
|
||||||
import dev.inmo.tgbotapi.types.message.content.StickerContent
|
import dev.inmo.tgbotapi.types.message.content.StickerContent
|
||||||
@@ -548,6 +550,57 @@ import dev.inmo.tgbotapi.types.request.ChatShared
|
|||||||
import dev.inmo.tgbotapi.types.request.ChatSharedRequest
|
import dev.inmo.tgbotapi.types.request.ChatSharedRequest
|
||||||
import dev.inmo.tgbotapi.types.request.RequestResponse
|
import dev.inmo.tgbotapi.types.request.RequestResponse
|
||||||
import dev.inmo.tgbotapi.types.request.UsersShared
|
import dev.inmo.tgbotapi.types.request.UsersShared
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlock
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockAnchor
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockAnimation
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockAudio
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockBlockQuotation
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockCollage
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockDetails
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockDivider
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockFooter
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockList
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockMap
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockMathematicalExpression
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockParagraph
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockPhoto
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockPreformatted
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockPullQuotation
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockSectionHeading
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockSlideshow
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockTable
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockThinking
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockVideo
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichBlockVoiceNote
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichText
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextAnchor
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextAnchorLink
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextBankCardNumber
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextBold
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextBotCommand
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextCashtag
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextCode
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextCustomEmoji
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextDateTime
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextEmailAddress
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextEntity
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextGroup
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextHashtag
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextItalic
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextMarked
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextMathematicalExpression
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextMention
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextPhoneNumber
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextPlain
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextReference
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextReferenceLink
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextSpoiler
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextStrikethrough
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextSubscript
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextSuperscript
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextTextMention
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextUnderline
|
||||||
|
import dev.inmo.tgbotapi.types.rich.RichTextUrl
|
||||||
import dev.inmo.tgbotapi.types.update.BusinessConnectionUpdate
|
import dev.inmo.tgbotapi.types.update.BusinessConnectionUpdate
|
||||||
import dev.inmo.tgbotapi.types.update.BusinessMessageUpdate
|
import dev.inmo.tgbotapi.types.update.BusinessMessageUpdate
|
||||||
import dev.inmo.tgbotapi.types.update.CallbackQueryUpdate
|
import dev.inmo.tgbotapi.types.update.CallbackQueryUpdate
|
||||||
@@ -1338,6 +1391,12 @@ public inline fun ResendableContent.gameContentOrThrow(): GameContent = this as
|
|||||||
|
|
||||||
public inline fun <T> ResendableContent.ifGameContent(block: (GameContent) -> T): T? = gameContentOrNull() ?.let(block)
|
public inline fun <T> ResendableContent.ifGameContent(block: (GameContent) -> T): T? = gameContentOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun ResendableContent.richMessageContentOrNull(): RichMessageContent? = this as? dev.inmo.tgbotapi.types.message.content.RichMessageContent
|
||||||
|
|
||||||
|
public inline fun ResendableContent.richMessageContentOrThrow(): RichMessageContent = this as dev.inmo.tgbotapi.types.message.content.RichMessageContent
|
||||||
|
|
||||||
|
public inline fun <T> ResendableContent.ifRichMessageContent(block: (RichMessageContent) -> T): T? = richMessageContentOrNull() ?.let(block)
|
||||||
|
|
||||||
public inline fun ResendableContent.diceContentOrNull(): DiceContent? = this as? dev.inmo.tgbotapi.types.message.content.DiceContent
|
public inline fun ResendableContent.diceContentOrNull(): DiceContent? = this as? dev.inmo.tgbotapi.types.message.content.DiceContent
|
||||||
|
|
||||||
public inline fun ResendableContent.diceContentOrThrow(): DiceContent = this as dev.inmo.tgbotapi.types.message.content.DiceContent
|
public inline fun ResendableContent.diceContentOrThrow(): DiceContent = this as dev.inmo.tgbotapi.types.message.content.DiceContent
|
||||||
@@ -3270,6 +3329,306 @@ public inline fun InputMessageContent.inputVenueMessageContentOrThrow(): InputVe
|
|||||||
|
|
||||||
public inline fun <T> InputMessageContent.ifInputVenueMessageContent(block: (InputVenueMessageContent) -> T): T? = inputVenueMessageContentOrNull() ?.let(block)
|
public inline fun <T> InputMessageContent.ifInputVenueMessageContent(block: (InputVenueMessageContent) -> T): T? = inputVenueMessageContentOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun InputMessageContent.inputRichMessageContentOrNull(): InputRichMessageContent? = this as? dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputRichMessageContent
|
||||||
|
|
||||||
|
public inline fun InputMessageContent.inputRichMessageContentOrThrow(): InputRichMessageContent = this as dev.inmo.tgbotapi.types.InlineQueries.InputMessageContent.InputRichMessageContent
|
||||||
|
|
||||||
|
public inline fun <T> InputMessageContent.ifInputRichMessageContent(block: (InputRichMessageContent) -> T): T? = inputRichMessageContentOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextBoldOrNull(): RichTextBold? = this as? dev.inmo.tgbotapi.types.rich.RichTextBold
|
||||||
|
|
||||||
|
public inline fun RichText.richTextBoldOrThrow(): RichTextBold = this as dev.inmo.tgbotapi.types.rich.RichTextBold
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextBold(block: (RichTextBold) -> T): T? = richTextBoldOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextItalicOrNull(): RichTextItalic? = this as? dev.inmo.tgbotapi.types.rich.RichTextItalic
|
||||||
|
|
||||||
|
public inline fun RichText.richTextItalicOrThrow(): RichTextItalic = this as dev.inmo.tgbotapi.types.rich.RichTextItalic
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextItalic(block: (RichTextItalic) -> T): T? = richTextItalicOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextUnderlineOrNull(): RichTextUnderline? = this as? dev.inmo.tgbotapi.types.rich.RichTextUnderline
|
||||||
|
|
||||||
|
public inline fun RichText.richTextUnderlineOrThrow(): RichTextUnderline = this as dev.inmo.tgbotapi.types.rich.RichTextUnderline
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextUnderline(block: (RichTextUnderline) -> T): T? = richTextUnderlineOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextStrikethroughOrNull(): RichTextStrikethrough? = this as? dev.inmo.tgbotapi.types.rich.RichTextStrikethrough
|
||||||
|
|
||||||
|
public inline fun RichText.richTextStrikethroughOrThrow(): RichTextStrikethrough = this as dev.inmo.tgbotapi.types.rich.RichTextStrikethrough
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextStrikethrough(block: (RichTextStrikethrough) -> T): T? = richTextStrikethroughOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextSpoilerOrNull(): RichTextSpoiler? = this as? dev.inmo.tgbotapi.types.rich.RichTextSpoiler
|
||||||
|
|
||||||
|
public inline fun RichText.richTextSpoilerOrThrow(): RichTextSpoiler = this as dev.inmo.tgbotapi.types.rich.RichTextSpoiler
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextSpoiler(block: (RichTextSpoiler) -> T): T? = richTextSpoilerOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextSubscriptOrNull(): RichTextSubscript? = this as? dev.inmo.tgbotapi.types.rich.RichTextSubscript
|
||||||
|
|
||||||
|
public inline fun RichText.richTextSubscriptOrThrow(): RichTextSubscript = this as dev.inmo.tgbotapi.types.rich.RichTextSubscript
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextSubscript(block: (RichTextSubscript) -> T): T? = richTextSubscriptOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextSuperscriptOrNull(): RichTextSuperscript? = this as? dev.inmo.tgbotapi.types.rich.RichTextSuperscript
|
||||||
|
|
||||||
|
public inline fun RichText.richTextSuperscriptOrThrow(): RichTextSuperscript = this as dev.inmo.tgbotapi.types.rich.RichTextSuperscript
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextSuperscript(block: (RichTextSuperscript) -> T): T? = richTextSuperscriptOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextMarkedOrNull(): RichTextMarked? = this as? dev.inmo.tgbotapi.types.rich.RichTextMarked
|
||||||
|
|
||||||
|
public inline fun RichText.richTextMarkedOrThrow(): RichTextMarked = this as dev.inmo.tgbotapi.types.rich.RichTextMarked
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextMarked(block: (RichTextMarked) -> T): T? = richTextMarkedOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextCodeOrNull(): RichTextCode? = this as? dev.inmo.tgbotapi.types.rich.RichTextCode
|
||||||
|
|
||||||
|
public inline fun RichText.richTextCodeOrThrow(): RichTextCode = this as dev.inmo.tgbotapi.types.rich.RichTextCode
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextCode(block: (RichTextCode) -> T): T? = richTextCodeOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextDateTimeOrNull(): RichTextDateTime? = this as? dev.inmo.tgbotapi.types.rich.RichTextDateTime
|
||||||
|
|
||||||
|
public inline fun RichText.richTextDateTimeOrThrow(): RichTextDateTime = this as dev.inmo.tgbotapi.types.rich.RichTextDateTime
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextDateTime(block: (RichTextDateTime) -> T): T? = richTextDateTimeOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextTextMentionOrNull(): RichTextTextMention? = this as? dev.inmo.tgbotapi.types.rich.RichTextTextMention
|
||||||
|
|
||||||
|
public inline fun RichText.richTextTextMentionOrThrow(): RichTextTextMention = this as dev.inmo.tgbotapi.types.rich.RichTextTextMention
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextTextMention(block: (RichTextTextMention) -> T): T? = richTextTextMentionOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextCustomEmojiOrNull(): RichTextCustomEmoji? = this as? dev.inmo.tgbotapi.types.rich.RichTextCustomEmoji
|
||||||
|
|
||||||
|
public inline fun RichText.richTextCustomEmojiOrThrow(): RichTextCustomEmoji = this as dev.inmo.tgbotapi.types.rich.RichTextCustomEmoji
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextCustomEmoji(block: (RichTextCustomEmoji) -> T): T? = richTextCustomEmojiOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextMathematicalExpressionOrNull(): RichTextMathematicalExpression? = this as? dev.inmo.tgbotapi.types.rich.RichTextMathematicalExpression
|
||||||
|
|
||||||
|
public inline fun RichText.richTextMathematicalExpressionOrThrow(): RichTextMathematicalExpression = this as dev.inmo.tgbotapi.types.rich.RichTextMathematicalExpression
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextMathematicalExpression(block: (RichTextMathematicalExpression) -> T): T? = richTextMathematicalExpressionOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextUrlOrNull(): RichTextUrl? = this as? dev.inmo.tgbotapi.types.rich.RichTextUrl
|
||||||
|
|
||||||
|
public inline fun RichText.richTextUrlOrThrow(): RichTextUrl = this as dev.inmo.tgbotapi.types.rich.RichTextUrl
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextUrl(block: (RichTextUrl) -> T): T? = richTextUrlOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextEmailAddressOrNull(): RichTextEmailAddress? = this as? dev.inmo.tgbotapi.types.rich.RichTextEmailAddress
|
||||||
|
|
||||||
|
public inline fun RichText.richTextEmailAddressOrThrow(): RichTextEmailAddress = this as dev.inmo.tgbotapi.types.rich.RichTextEmailAddress
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextEmailAddress(block: (RichTextEmailAddress) -> T): T? = richTextEmailAddressOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextPhoneNumberOrNull(): RichTextPhoneNumber? = this as? dev.inmo.tgbotapi.types.rich.RichTextPhoneNumber
|
||||||
|
|
||||||
|
public inline fun RichText.richTextPhoneNumberOrThrow(): RichTextPhoneNumber = this as dev.inmo.tgbotapi.types.rich.RichTextPhoneNumber
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextPhoneNumber(block: (RichTextPhoneNumber) -> T): T? = richTextPhoneNumberOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextBankCardNumberOrNull(): RichTextBankCardNumber? = this as? dev.inmo.tgbotapi.types.rich.RichTextBankCardNumber
|
||||||
|
|
||||||
|
public inline fun RichText.richTextBankCardNumberOrThrow(): RichTextBankCardNumber = this as dev.inmo.tgbotapi.types.rich.RichTextBankCardNumber
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextBankCardNumber(block: (RichTextBankCardNumber) -> T): T? = richTextBankCardNumberOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextMentionOrNull(): RichTextMention? = this as? dev.inmo.tgbotapi.types.rich.RichTextMention
|
||||||
|
|
||||||
|
public inline fun RichText.richTextMentionOrThrow(): RichTextMention = this as dev.inmo.tgbotapi.types.rich.RichTextMention
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextMention(block: (RichTextMention) -> T): T? = richTextMentionOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextHashtagOrNull(): RichTextHashtag? = this as? dev.inmo.tgbotapi.types.rich.RichTextHashtag
|
||||||
|
|
||||||
|
public inline fun RichText.richTextHashtagOrThrow(): RichTextHashtag = this as dev.inmo.tgbotapi.types.rich.RichTextHashtag
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextHashtag(block: (RichTextHashtag) -> T): T? = richTextHashtagOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextCashtagOrNull(): RichTextCashtag? = this as? dev.inmo.tgbotapi.types.rich.RichTextCashtag
|
||||||
|
|
||||||
|
public inline fun RichText.richTextCashtagOrThrow(): RichTextCashtag = this as dev.inmo.tgbotapi.types.rich.RichTextCashtag
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextCashtag(block: (RichTextCashtag) -> T): T? = richTextCashtagOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextBotCommandOrNull(): RichTextBotCommand? = this as? dev.inmo.tgbotapi.types.rich.RichTextBotCommand
|
||||||
|
|
||||||
|
public inline fun RichText.richTextBotCommandOrThrow(): RichTextBotCommand = this as dev.inmo.tgbotapi.types.rich.RichTextBotCommand
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextBotCommand(block: (RichTextBotCommand) -> T): T? = richTextBotCommandOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextAnchorOrNull(): RichTextAnchor? = this as? dev.inmo.tgbotapi.types.rich.RichTextAnchor
|
||||||
|
|
||||||
|
public inline fun RichText.richTextAnchorOrThrow(): RichTextAnchor = this as dev.inmo.tgbotapi.types.rich.RichTextAnchor
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextAnchor(block: (RichTextAnchor) -> T): T? = richTextAnchorOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextAnchorLinkOrNull(): RichTextAnchorLink? = this as? dev.inmo.tgbotapi.types.rich.RichTextAnchorLink
|
||||||
|
|
||||||
|
public inline fun RichText.richTextAnchorLinkOrThrow(): RichTextAnchorLink = this as dev.inmo.tgbotapi.types.rich.RichTextAnchorLink
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextAnchorLink(block: (RichTextAnchorLink) -> T): T? = richTextAnchorLinkOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextReferenceOrNull(): RichTextReference? = this as? dev.inmo.tgbotapi.types.rich.RichTextReference
|
||||||
|
|
||||||
|
public inline fun RichText.richTextReferenceOrThrow(): RichTextReference = this as dev.inmo.tgbotapi.types.rich.RichTextReference
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextReference(block: (RichTextReference) -> T): T? = richTextReferenceOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextReferenceLinkOrNull(): RichTextReferenceLink? = this as? dev.inmo.tgbotapi.types.rich.RichTextReferenceLink
|
||||||
|
|
||||||
|
public inline fun RichText.richTextReferenceLinkOrThrow(): RichTextReferenceLink = this as dev.inmo.tgbotapi.types.rich.RichTextReferenceLink
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextReferenceLink(block: (RichTextReferenceLink) -> T): T? = richTextReferenceLinkOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextPlainOrNull(): RichTextPlain? = this as? dev.inmo.tgbotapi.types.rich.RichTextPlain
|
||||||
|
|
||||||
|
public inline fun RichText.richTextPlainOrThrow(): RichTextPlain = this as dev.inmo.tgbotapi.types.rich.RichTextPlain
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextPlain(block: (RichTextPlain) -> T): T? = richTextPlainOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextGroupOrNull(): RichTextGroup? = this as? dev.inmo.tgbotapi.types.rich.RichTextGroup
|
||||||
|
|
||||||
|
public inline fun RichText.richTextGroupOrThrow(): RichTextGroup = this as dev.inmo.tgbotapi.types.rich.RichTextGroup
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextGroup(block: (RichTextGroup) -> T): T? = richTextGroupOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichText.richTextEntityOrNull(): RichTextEntity? = this as? dev.inmo.tgbotapi.types.rich.RichTextEntity
|
||||||
|
|
||||||
|
public inline fun RichText.richTextEntityOrThrow(): RichTextEntity = this as dev.inmo.tgbotapi.types.rich.RichTextEntity
|
||||||
|
|
||||||
|
public inline fun <T> RichText.ifRichTextEntity(block: (RichTextEntity) -> T): T? = richTextEntityOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockParagraphOrNull(): RichBlockParagraph? = this as? dev.inmo.tgbotapi.types.rich.RichBlockParagraph
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockParagraphOrThrow(): RichBlockParagraph = this as dev.inmo.tgbotapi.types.rich.RichBlockParagraph
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockParagraph(block: (RichBlockParagraph) -> T): T? = richBlockParagraphOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockSectionHeadingOrNull(): RichBlockSectionHeading? = this as? dev.inmo.tgbotapi.types.rich.RichBlockSectionHeading
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockSectionHeadingOrThrow(): RichBlockSectionHeading = this as dev.inmo.tgbotapi.types.rich.RichBlockSectionHeading
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockSectionHeading(block: (RichBlockSectionHeading) -> T): T? = richBlockSectionHeadingOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockPreformattedOrNull(): RichBlockPreformatted? = this as? dev.inmo.tgbotapi.types.rich.RichBlockPreformatted
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockPreformattedOrThrow(): RichBlockPreformatted = this as dev.inmo.tgbotapi.types.rich.RichBlockPreformatted
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockPreformatted(block: (RichBlockPreformatted) -> T): T? = richBlockPreformattedOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockFooterOrNull(): RichBlockFooter? = this as? dev.inmo.tgbotapi.types.rich.RichBlockFooter
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockFooterOrThrow(): RichBlockFooter = this as dev.inmo.tgbotapi.types.rich.RichBlockFooter
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockFooter(block: (RichBlockFooter) -> T): T? = richBlockFooterOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockDividerOrNull(): RichBlockDivider? = this as? dev.inmo.tgbotapi.types.rich.RichBlockDivider
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockDividerOrThrow(): RichBlockDivider = this as dev.inmo.tgbotapi.types.rich.RichBlockDivider
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockDivider(block: (RichBlockDivider) -> T): T? = richBlockDividerOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockMathematicalExpressionOrNull(): RichBlockMathematicalExpression? = this as? dev.inmo.tgbotapi.types.rich.RichBlockMathematicalExpression
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockMathematicalExpressionOrThrow(): RichBlockMathematicalExpression = this as dev.inmo.tgbotapi.types.rich.RichBlockMathematicalExpression
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockMathematicalExpression(block: (RichBlockMathematicalExpression) -> T): T? = richBlockMathematicalExpressionOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockAnchorOrNull(): RichBlockAnchor? = this as? dev.inmo.tgbotapi.types.rich.RichBlockAnchor
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockAnchorOrThrow(): RichBlockAnchor = this as dev.inmo.tgbotapi.types.rich.RichBlockAnchor
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockAnchor(block: (RichBlockAnchor) -> T): T? = richBlockAnchorOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockListOrNull(): RichBlockList? = this as? dev.inmo.tgbotapi.types.rich.RichBlockList
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockListOrThrow(): RichBlockList = this as dev.inmo.tgbotapi.types.rich.RichBlockList
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockList(block: (RichBlockList) -> T): T? = richBlockListOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockBlockQuotationOrNull(): RichBlockBlockQuotation? = this as? dev.inmo.tgbotapi.types.rich.RichBlockBlockQuotation
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockBlockQuotationOrThrow(): RichBlockBlockQuotation = this as dev.inmo.tgbotapi.types.rich.RichBlockBlockQuotation
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockBlockQuotation(block: (RichBlockBlockQuotation) -> T): T? = richBlockBlockQuotationOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockPullQuotationOrNull(): RichBlockPullQuotation? = this as? dev.inmo.tgbotapi.types.rich.RichBlockPullQuotation
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockPullQuotationOrThrow(): RichBlockPullQuotation = this as dev.inmo.tgbotapi.types.rich.RichBlockPullQuotation
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockPullQuotation(block: (RichBlockPullQuotation) -> T): T? = richBlockPullQuotationOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockCollageOrNull(): RichBlockCollage? = this as? dev.inmo.tgbotapi.types.rich.RichBlockCollage
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockCollageOrThrow(): RichBlockCollage = this as dev.inmo.tgbotapi.types.rich.RichBlockCollage
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockCollage(block: (RichBlockCollage) -> T): T? = richBlockCollageOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockSlideshowOrNull(): RichBlockSlideshow? = this as? dev.inmo.tgbotapi.types.rich.RichBlockSlideshow
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockSlideshowOrThrow(): RichBlockSlideshow = this as dev.inmo.tgbotapi.types.rich.RichBlockSlideshow
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockSlideshow(block: (RichBlockSlideshow) -> T): T? = richBlockSlideshowOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockTableOrNull(): RichBlockTable? = this as? dev.inmo.tgbotapi.types.rich.RichBlockTable
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockTableOrThrow(): RichBlockTable = this as dev.inmo.tgbotapi.types.rich.RichBlockTable
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockTable(block: (RichBlockTable) -> T): T? = richBlockTableOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockDetailsOrNull(): RichBlockDetails? = this as? dev.inmo.tgbotapi.types.rich.RichBlockDetails
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockDetailsOrThrow(): RichBlockDetails = this as dev.inmo.tgbotapi.types.rich.RichBlockDetails
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockDetails(block: (RichBlockDetails) -> T): T? = richBlockDetailsOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockMapOrNull(): RichBlockMap? = this as? dev.inmo.tgbotapi.types.rich.RichBlockMap
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockMapOrThrow(): RichBlockMap = this as dev.inmo.tgbotapi.types.rich.RichBlockMap
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockMap(block: (RichBlockMap) -> T): T? = richBlockMapOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockAnimationOrNull(): RichBlockAnimation? = this as? dev.inmo.tgbotapi.types.rich.RichBlockAnimation
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockAnimationOrThrow(): RichBlockAnimation = this as dev.inmo.tgbotapi.types.rich.RichBlockAnimation
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockAnimation(block: (RichBlockAnimation) -> T): T? = richBlockAnimationOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockAudioOrNull(): RichBlockAudio? = this as? dev.inmo.tgbotapi.types.rich.RichBlockAudio
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockAudioOrThrow(): RichBlockAudio = this as dev.inmo.tgbotapi.types.rich.RichBlockAudio
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockAudio(block: (RichBlockAudio) -> T): T? = richBlockAudioOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockPhotoOrNull(): RichBlockPhoto? = this as? dev.inmo.tgbotapi.types.rich.RichBlockPhoto
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockPhotoOrThrow(): RichBlockPhoto = this as dev.inmo.tgbotapi.types.rich.RichBlockPhoto
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockPhoto(block: (RichBlockPhoto) -> T): T? = richBlockPhotoOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockVideoOrNull(): RichBlockVideo? = this as? dev.inmo.tgbotapi.types.rich.RichBlockVideo
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockVideoOrThrow(): RichBlockVideo = this as dev.inmo.tgbotapi.types.rich.RichBlockVideo
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockVideo(block: (RichBlockVideo) -> T): T? = richBlockVideoOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockVoiceNoteOrNull(): RichBlockVoiceNote? = this as? dev.inmo.tgbotapi.types.rich.RichBlockVoiceNote
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockVoiceNoteOrThrow(): RichBlockVoiceNote = this as dev.inmo.tgbotapi.types.rich.RichBlockVoiceNote
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockVoiceNote(block: (RichBlockVoiceNote) -> T): T? = richBlockVoiceNoteOrNull() ?.let(block)
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockThinkingOrNull(): RichBlockThinking? = this as? dev.inmo.tgbotapi.types.rich.RichBlockThinking
|
||||||
|
|
||||||
|
public inline fun RichBlock.richBlockThinkingOrThrow(): RichBlockThinking = this as dev.inmo.tgbotapi.types.rich.RichBlockThinking
|
||||||
|
|
||||||
|
public inline fun <T> RichBlock.ifRichBlockThinking(block: (RichBlockThinking) -> T): T? = richBlockThinkingOrNull() ?.let(block)
|
||||||
|
|
||||||
public inline fun BotAction.typingActionOrNull(): TypingAction? = this as? dev.inmo.tgbotapi.types.actions.TypingAction
|
public inline fun BotAction.typingActionOrNull(): TypingAction? = this as? dev.inmo.tgbotapi.types.actions.TypingAction
|
||||||
|
|
||||||
public inline fun BotAction.typingActionOrThrow(): TypingAction = this as dev.inmo.tgbotapi.types.actions.TypingAction
|
public inline fun BotAction.typingActionOrThrow(): TypingAction = this as dev.inmo.tgbotapi.types.actions.TypingAction
|
||||||
|
|||||||
Reference in New Issue
Block a user