1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2026-06-19 17:55:11 +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:
2026-06-19 17:32:56 +06:00
parent f6d5b3ea71
commit 6bdd217530
25 changed files with 4130 additions and 2 deletions

View File

@@ -5,6 +5,12 @@
**THIS UPDATE CONTAINS SUPPORT OF [TELEGRAM BOTS API 10.1](https://core.telegram.org/bots/api-changelog#june-11-2026)**
* `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` field parsing to `PollMedia` deserialization/serialization
* (`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 `SendChatJoinRequestWebApp` request
* `API`:
* (`Rich Messages`) Added `sendRichMessage` and `sendRichMessageDraft` `TelegramBot` extensions
* (`Join Request Queries`) Added `answerChatJoinRequestQuery` and `sendChatJoinRequestWebApp` `TelegramBot` extensions
* `Utils`:
* (`Join Request Queries`) Added `ChatJoinRequest.query_id` raw accessor

View File

@@ -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 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 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;

View File

@@ -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
)

View File

@@ -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

View File

@@ -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.content.TextContent
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
import dev.inmo.tgbotapi.types.rich.InputRichMessage
import dev.inmo.tgbotapi.utils.extensions.makeString
import kotlinx.serialization.*
@@ -73,7 +74,9 @@ data class EditChatMessageText internal constructor(
@SerialName(linkPreviewOptionsField)
override val linkPreviewOptions: LinkPreviewOptions? = null,
@SerialName(replyMarkupField)
override val replyMarkup: InlineKeyboardMarkup? = null
override val replyMarkup: InlineKeyboardMarkup? = null,
@SerialName(richMessageField)
val richMessage: InputRichMessage? = null
) : EditChatMessage<TextContent>, EditTextChatMessage, EditReplyMessage, EditLinkPreviewOptionsContainer {
override val textSources: TextSourcesList? by lazy {
rawEntities ?.asTextSources(text)

View File

@@ -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()
}

View File

@@ -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"
}

View File

@@ -573,6 +573,40 @@ const val supportsJoinRequestQueriesField = "supports_join_request_queries"
const val queryIdField = "query_id"
const val chatJoinRequestQueryIdField = "chat_join_request_query_id"
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 questionField = "question"
const val questionEntitiesField = "question_entities"

View File

@@ -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

View File

@@ -22,6 +22,7 @@ object InputMessageContentSerializer : KSerializer<InputMessageContent> {
is InputTextMessageContent -> InputTextMessageContent.serializer().serialize(encoder, value)
is InputVenueMessageContent -> InputVenueMessageContent.serializer().serialize(encoder, value)
is InputInvoiceMessageContent -> InputInvoiceMessageContent.serializer().serialize(encoder, value)
is InputRichMessageContent -> InputRichMessageContent.serializer().serialize(encoder, value)
}
}

View File

@@ -50,6 +50,7 @@ import dev.inmo.tgbotapi.types.polls.Poll
import dev.inmo.tgbotapi.types.polls.PollOptionPersistentId
import dev.inmo.tgbotapi.types.request.ChatShared
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.venue.Venue
import dev.inmo.tgbotapi.utils.isFakeTelegramUser
@@ -92,6 +93,7 @@ internal data class RawMessage(
private val caption_entities: RawMessageEntities? = null,
private val has_media_spoiler: Boolean? = null,
private val story: Story? = null,
private val rich_message: RichMessage? = null,
private val audio: AudioFile? = null,
private val document: DocumentFile? = null,
private val paid_media: PaidMediaInfo? = null,
@@ -230,6 +232,11 @@ internal data class RawMessage(
} ?: emptyList()
when {
rich_message != null -> RichMessageContent(
chat,
messageId,
rich_message
)
story != null -> StoryContent(
chat,
messageId,

View File

@@ -55,6 +55,7 @@ sealed interface MessageContent: ResendableContent {
subclass(StoryContent::class)
subclass(GiveawayPublicResultsContent::class)
subclass(GiveawayContent::class)
subclass(RichMessageContent::class)
additionalBuilder()
}

View File

@@ -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>>
}
}

View File

@@ -13,6 +13,8 @@ typealias PollMessage = ChatContentMessage<PollContent>
typealias TextMessage = ChatContentMessage<TextContent>
typealias StoryMessage = ChatContentMessage<StoryContent>
typealias RichMessageContentMessage = ChatContentMessage<RichMessageContent>
typealias LocationMessage = ChatContentMessage<LocationContent>
typealias LiveLocationMessage = ChatContentMessage<LiveLocationContent>
typealias StaticLocationMessage = ChatContentMessage<StaticLocationContent>

View File

@@ -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
)

View File

@@ -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")
}
}
}

View File

@@ -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
)

View File

@@ -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"
}
}

View File

@@ -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
)

View File

@@ -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")
}
}
}

View File

@@ -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"
}
}

View File

@@ -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)
}
}

View File

@@ -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/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 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;
@@ -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 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 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 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;
@@ -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 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 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 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;
@@ -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 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 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 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;
@@ -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 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 {

View File

@@ -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.InputLocationMessageContent
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.InputVenueMessageContent
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.PollContent
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.StaticLocationContent
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.RequestResponse
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.BusinessMessageUpdate
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 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.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 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.typingActionOrThrow(): TypingAction = this as dev.inmo.tgbotapi.types.actions.TypingAction