diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d05525bbe..362401c764 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## 36.0.0 +* `Core`: + * (`Rich Messages`) Added `InputRichBlock` hierarchy with all 21 `InputRichBlock*` types (mirroring the received `RichBlock*` hierarchy and reusing `RichText`/`RichBlockCaption`/`RichBlockTableCell`), the label-less `InputRichBlockListItem` and the `InputRichBlockSerializer`; every `InputRichBlock` exposes `subBlocks` navigation + * (`Rich Messages`) Added `TelegramMediaVoiceNote` (`InputMediaVoiceNote`) and the `RichMessageMemberTelegramMedia` marker interface implemented by it, `TelegramMediaAnimation`, `TelegramMediaAudio`, `TelegramMediaPhoto` and `TelegramMediaVideo`; added `VoiceFile.toTelegramMediaVoiceNote` converters + * (`Rich Messages`) Added `InputRichMessageMedia` type (media referenced from `InputRichMessage.html`/`.markdown` via `tg://photo?id=`, `tg://video?id=` and `tg://audio?id=` links) + * (`Rich Messages`) `InputRichMessage` gained `blocks` and `media` fields ("exactly one of `html`, `markdown` or `blocks` must be used") and the `InputRichMessageBlocks` factory; `InputRichMessageHTML`/`InputRichMessageMarkdown` gained a trailing `media` parameter + * (`Rich Messages`) Added Rich Messages input DSL builders `buildInputRichBlocks`/`InputRichBlocksBuilder`, `InputRichBlockListBuilder` and the `InputRichMessageBlocks { }` builder overload (marked with the `@RichTextDsl` DSL marker) + * (`Rich Messages`) `SendRichMessage` now supports `attach://` upload of new files referenced from `InputRichMessage.blocks`/`.media`; `SendRichMessageDraft` now rejects rich messages that require direct file upload (unsupported by the method) + ## 35.1.0 * `Dependencies`: diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index fff5dbef04..b9f6d994ac 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -6737,7 +6737,7 @@ public final class dev/inmo/tgbotapi/requests/send/SendMessageKt { public static synthetic fun SendTextMessage-CbXiHO4$default (Ldev/inmo/tgbotapi/types/ChatIdentifier;Ljava/util/List;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;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/send/SendTextMessage; } -public final class dev/inmo/tgbotapi/requests/send/SendRichMessage : dev/inmo/tgbotapi/requests/send/abstracts/ReplyingMarkupSendMessageRequest, dev/inmo/tgbotapi/requests/send/abstracts/SendContentMessageRequest { +public final class dev/inmo/tgbotapi/requests/send/SendRichMessage : dev/inmo/tgbotapi/requests/abstracts/MultipartRequest$Common, dev/inmo/tgbotapi/requests/send/abstracts/ReplyingMarkupSendMessageRequest, dev/inmo/tgbotapi/requests/send/abstracts/SendContentMessageRequest { public static final field Companion Ldev/inmo/tgbotapi/requests/send/SendRichMessage$Companion; public synthetic fun (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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun (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/jvm/internal/DefaultConstructorMarker;)V @@ -6760,9 +6760,12 @@ public final class dev/inmo/tgbotapi/requests/send/SendRichMessage : dev/inmo/tg public fun getAllowSendingWithoutReply ()Ljava/lang/Boolean; public fun getBusinessConnectionId-nXr5wdE ()Ljava/lang/String; public fun getChatId ()Ldev/inmo/tgbotapi/types/ChatIdentifier; + public fun getData ()Ldev/inmo/tgbotapi/requests/abstracts/SimpleRequest; public fun getDirectMessageThreadId-1osv_qQ ()Ldev/inmo/tgbotapi/types/DirectMessageThreadId; public fun getDisableNotification ()Z public fun getEffectId-Ts0V7ak ()Ljava/lang/String; + public fun getMediaMap ()Ljava/util/Map; + public fun getParamsJson ()Lkotlinx/serialization/json/JsonObject; public fun getProtectContent ()Z public fun getReplyMarkup ()Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup; public fun getReplyParameters ()Ldev/inmo/tgbotapi/types/ReplyParameters; @@ -24802,6 +24805,14 @@ public final class dev/inmo/tgbotapi/types/media/PollMedia$Serializer$Surrogate$ public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public abstract interface class dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia : dev/inmo/tgbotapi/types/media/TelegramMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia$Companion; +} + +public final class dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public abstract interface class dev/inmo/tgbotapi/types/media/SizedTelegramMedia : dev/inmo/tgbotapi/types/media/TelegramMedia { public abstract fun getHeight ()Ljava/lang/Integer; public abstract fun getWidth ()Ljava/lang/Integer; @@ -24829,7 +24840,7 @@ public final class dev/inmo/tgbotapi/types/media/TelegramMedia$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } -public final class dev/inmo/tgbotapi/types/media/TelegramMediaAnimation : dev/inmo/tgbotapi/abstracts/TextedOutput, dev/inmo/tgbotapi/types/media/DuratedTelegramMedia, dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/InputPollOptionMedia, dev/inmo/tgbotapi/types/media/SizedTelegramMedia, dev/inmo/tgbotapi/types/media/SpoilerableTelegramMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/ThumbedTelegramMedia, dev/inmo/tgbotapi/types/media/WithCustomizableCaptionTelegramMedia { +public final class dev/inmo/tgbotapi/types/media/TelegramMediaAnimation : dev/inmo/tgbotapi/abstracts/TextedOutput, dev/inmo/tgbotapi/types/media/DuratedTelegramMedia, dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/InputPollOptionMedia, dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia, dev/inmo/tgbotapi/types/media/SizedTelegramMedia, dev/inmo/tgbotapi/types/media/SpoilerableTelegramMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/ThumbedTelegramMedia, dev/inmo/tgbotapi/types/media/WithCustomizableCaptionTelegramMedia { public static final field Companion Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation$Companion; public static final field TYPE Ljava/lang/String; public final fun component1 ()Ldev/inmo/tgbotapi/requests/abstracts/InputFile; @@ -24881,7 +24892,7 @@ public final class dev/inmo/tgbotapi/types/media/TelegramMediaAnimationKt { public static synthetic fun TelegramMediaAnimation$default (Ldev/inmo/tgbotapi/requests/abstracts/InputFile;Ljava/util/List;ZZLjava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Long;Ldev/inmo/tgbotapi/requests/abstracts/InputFile;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation; } -public final class dev/inmo/tgbotapi/types/media/TelegramMediaAudio : dev/inmo/tgbotapi/abstracts/Performerable, dev/inmo/tgbotapi/types/media/AudioMediaGroupMemberTelegramMedia, dev/inmo/tgbotapi/types/media/DuratedTelegramMedia, dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/ThumbedTelegramMedia, dev/inmo/tgbotapi/types/media/TitledTelegramMedia { +public final class dev/inmo/tgbotapi/types/media/TelegramMediaAudio : dev/inmo/tgbotapi/abstracts/Performerable, dev/inmo/tgbotapi/types/media/AudioMediaGroupMemberTelegramMedia, dev/inmo/tgbotapi/types/media/DuratedTelegramMedia, dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/ThumbedTelegramMedia, dev/inmo/tgbotapi/types/media/TitledTelegramMedia { public static final field Companion Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio$Companion; public static final field TYPE Ljava/lang/String; public final fun component1 ()Ldev/inmo/tgbotapi/requests/abstracts/InputFile; @@ -25093,7 +25104,7 @@ public final class dev/inmo/tgbotapi/types/media/TelegramMediaLocation$Companion public final fun serializer ()Lkotlinx/serialization/KSerializer; } -public final class dev/inmo/tgbotapi/types/media/TelegramMediaPhoto : dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/InputPollOptionMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/VisualMediaGroupMemberTelegramMedia { +public final class dev/inmo/tgbotapi/types/media/TelegramMediaPhoto : dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/InputPollOptionMedia, dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/VisualMediaGroupMemberTelegramMedia { public static final field Companion Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto$Companion; public static final field TYPE Ljava/lang/String; public final fun component1 ()Ldev/inmo/tgbotapi/requests/abstracts/InputFile; @@ -25225,7 +25236,7 @@ public final class dev/inmo/tgbotapi/types/media/TelegramMediaVenue$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } -public final class dev/inmo/tgbotapi/types/media/TelegramMediaVideo : dev/inmo/tgbotapi/types/media/CoveredTelegramMedia, dev/inmo/tgbotapi/types/media/DuratedTelegramMedia, dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/InputPollOptionMedia, dev/inmo/tgbotapi/types/media/OptionallyStreamable, dev/inmo/tgbotapi/types/media/SizedTelegramMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/ThumbedTelegramMedia, dev/inmo/tgbotapi/types/media/VisualMediaGroupMemberTelegramMedia, dev/inmo/tgbotapi/types/media/WithCustomStartTelegramMedia { +public final class dev/inmo/tgbotapi/types/media/TelegramMediaVideo : dev/inmo/tgbotapi/types/media/CoveredTelegramMedia, dev/inmo/tgbotapi/types/media/DuratedTelegramMedia, dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/InputPollOptionMedia, dev/inmo/tgbotapi/types/media/OptionallyStreamable, dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia, dev/inmo/tgbotapi/types/media/SizedTelegramMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/ThumbedTelegramMedia, dev/inmo/tgbotapi/types/media/VisualMediaGroupMemberTelegramMedia, dev/inmo/tgbotapi/types/media/WithCustomStartTelegramMedia { public static final field Companion Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo$Companion; public static final field TYPE Ljava/lang/String; public final fun component1 ()Ldev/inmo/tgbotapi/requests/abstracts/InputFile; @@ -25284,6 +25295,52 @@ public final class dev/inmo/tgbotapi/types/media/TelegramMediaVideoKt { public static synthetic fun TelegramMediaVideo$default (Ldev/inmo/tgbotapi/requests/abstracts/InputFile;Ljava/util/List;ZZLdev/inmo/tgbotapi/requests/abstracts/InputFile;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Long;Ldev/inmo/tgbotapi/requests/abstracts/InputFile;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo; } +public final class dev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote : dev/inmo/tgbotapi/abstracts/TextedOutput, dev/inmo/tgbotapi/types/media/DuratedTelegramMedia, dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote$Companion; + public static final field TYPE Ljava/lang/String; + public final fun component1 ()Ldev/inmo/tgbotapi/requests/abstracts/InputFile; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ldev/inmo/tgbotapi/types/message/ParseMode; + public final fun component5 ()Ljava/lang/Long; + public fun equals (Ljava/lang/Object;)Z + public fun getDuration ()Ljava/lang/Long; + public fun getEntities ()Ljava/util/List; + public fun getFile ()Ldev/inmo/tgbotapi/requests/abstracts/InputFile; + public fun getMedia ()Ljava/lang/String; + public fun getParseMode ()Ldev/inmo/tgbotapi/types/message/ParseMode; + public fun getText ()Ljava/lang/String; + public fun getTextSources ()Ljava/util/List; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/media/TelegramMediaVoiceNoteKt { + public static final fun TelegramMediaVoiceNote (Ldev/inmo/tgbotapi/requests/abstracts/InputFile;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/lang/Long;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public static final fun TelegramMediaVoiceNote (Ldev/inmo/tgbotapi/requests/abstracts/InputFile;Ljava/util/List;Ljava/lang/Long;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public static synthetic fun TelegramMediaVoiceNote$default (Ldev/inmo/tgbotapi/requests/abstracts/InputFile;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/lang/Long;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public static synthetic fun TelegramMediaVoiceNote$default (Ldev/inmo/tgbotapi/requests/abstracts/InputFile;Ljava/util/List;Ljava/lang/Long;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public static final fun toTelegramMediaVoiceNote (Ldev/inmo/tgbotapi/types/files/VoiceFile;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public static final fun toTelegramMediaVoiceNote (Ldev/inmo/tgbotapi/types/files/VoiceFile;Ljava/util/List;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public static synthetic fun toTelegramMediaVoiceNote$default (Ldev/inmo/tgbotapi/types/files/VoiceFile;Ljava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public static synthetic fun toTelegramMediaVoiceNote$default (Ldev/inmo/tgbotapi/types/files/VoiceFile;Ljava/util/List;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; +} + public abstract interface class dev/inmo/tgbotapi/types/media/TelegramPaidMedia : dev/inmo/tgbotapi/types/media/TelegramMedia { public static final field Companion Ldev/inmo/tgbotapi/types/media/TelegramPaidMedia$Companion; } @@ -34433,16 +34490,807 @@ public final class dev/inmo/tgbotapi/types/request/UsersShared$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public abstract interface class dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlock$Companion; + public abstract fun getType ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlock$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockAnchor : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor; + public fun equals (Ljava/lang/Object;)Z + public final fun getName ()Ljava/lang/String; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockAnchor$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockAnchor$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockAnimation : dev/inmo/tgbotapi/types/rich/InputRichBlockMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation;Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation; + public fun equals (Ljava/lang/Object;)Z + public final fun getAnimation ()Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation; + public fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public fun getMedia ()Ldev/inmo/tgbotapi/types/media/TelegramMedia; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockAnimation$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockAnimation$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockAudio : dev/inmo/tgbotapi/types/rich/InputRichBlockMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio;Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio; + public fun equals (Ljava/lang/Object;)Z + public final fun getAudio ()Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio; + public fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public fun getMedia ()Ldev/inmo/tgbotapi/types/media/TelegramMedia; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockAudio$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockAudio$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichText;)V + public synthetic fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichText;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun copy (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation;Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation; + public fun equals (Ljava/lang/Object;)Z + public final fun getBlocks ()Ljava/util/List; + public final fun getCredit ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockCollage : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage;Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage; + public fun equals (Ljava/lang/Object;)Z + public final fun getBlocks ()Ljava/util/List; + public final fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockCollage$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockCollage$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockDetails : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/util/List;Ljava/lang/Boolean;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/util/List;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Ljava/lang/Boolean; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/util/List;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/util/List;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails; + public fun equals (Ljava/lang/Object;)Z + public final fun getBlocks ()Ljava/util/List; + public final fun getSummary ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public final fun isOpen ()Ljava/lang/Boolean; + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockDetails$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockDetails$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockDivider : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockDivider$Companion; + public static final field TYPE Ljava/lang/String; + public fun ()V + public fun equals (Ljava/lang/Object;)Z + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockDivider$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockDivider$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDivider; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockDivider;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockDivider$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockFooter : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter; + public fun equals (Ljava/lang/Object;)Z + public final fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockFooter$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockFooter$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockKt { + public static final fun getSubBlocks (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ljava/util/List; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockList : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockList$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/util/List;)V + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockList; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockList;Ljava/util/List;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockList; + public fun equals (Ljava/lang/Object;)Z + public final fun getItems ()Ljava/util/List; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockList$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockList$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockList; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockList;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockList$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockListBuilder { + public fun ()V + public final fun build ()Ljava/util/List; + public final fun item (Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V + public final fun item (Ljava/lang/String;)V + public static synthetic fun item$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockListBuilder;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockListItem { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockListItem$Companion; + public fun (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Integer;Ljava/lang/String;)V + public synthetic fun (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Integer;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ljava/lang/Boolean; + public final fun component3 ()Ljava/lang/Boolean; + public final fun component4 ()Ljava/lang/Integer; + public final fun component5 ()Ljava/lang/String; + public final fun copy (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Integer;Ljava/lang/String;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockListItem; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockListItem;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Integer;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockListItem; + public fun equals (Ljava/lang/Object;)Z + public final fun getBlocks ()Ljava/util/List; + public final fun getHasCheckbox ()Ljava/lang/Boolean; + public final fun getLabelType ()Ljava/lang/String; + public final fun getValue ()Ljava/lang/Integer; + public fun hashCode ()I + public final fun isChecked ()Ljava/lang/Boolean; + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockListItem$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockListItem$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockListItem; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockListItem;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockListItem$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockMap : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/location/StaticLocation;IIILdev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/location/StaticLocation;IIILdev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/location/StaticLocation; + public final fun component2 ()I + public final fun component3 ()I + public final fun component4 ()I + public final fun component5 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ldev/inmo/tgbotapi/types/location/StaticLocation;IIILdev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap;Ldev/inmo/tgbotapi/types/location/StaticLocation;IIILdev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap; + public fun equals (Ljava/lang/Object;)Z + public final fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun getHeight ()I + public final fun getLocation ()Ldev/inmo/tgbotapi/types/location/StaticLocation; + public fun getType ()Ljava/lang/String; + public final fun getWidth ()I + public final fun getZoom ()I + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockMap$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockMap$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression; + public fun equals (Ljava/lang/Object;)Z + public final fun getExpression ()Ljava/lang/String; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public abstract interface class dev/inmo/tgbotapi/types/rich/InputRichBlockMedia : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockMedia$Companion; + public abstract fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public abstract fun getMedia ()Ldev/inmo/tgbotapi/types/media/TelegramMedia; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockMedia$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockParagraph : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph; + public fun equals (Ljava/lang/Object;)Z + public final fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockParagraph$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockParagraph$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockPhoto : dev/inmo/tgbotapi/types/rich/InputRichBlockMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto;Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto; + public fun equals (Ljava/lang/Object;)Z + public fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public fun getMedia ()Ldev/inmo/tgbotapi/types/media/TelegramMedia; + public final fun getPhoto ()Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockPhoto$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockPhoto$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted; + public fun equals (Ljava/lang/Object;)Z + public final fun getLanguage ()Ljava/lang/String; + public final fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation; + public fun equals (Ljava/lang/Object;)Z + public final fun getCredit ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;I)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()I + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;I)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading;Ldev/inmo/tgbotapi/types/rich/RichText;IILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading; + public fun equals (Ljava/lang/Object;)Z + public final fun getLevel ()I + public final fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockSerializer : kotlinx/serialization/json/JsonContentPolymorphicSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow;Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow; + public fun equals (Ljava/lang/Object;)Z + public final fun getBlocks ()Ljava/util/List; + public final fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockTable : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;)V + public synthetic fun (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ljava/lang/Boolean; + public final fun component3 ()Ljava/lang/Boolean; + public final fun component4 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun copy (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable; + public fun equals (Ljava/lang/Object;)Z + public final fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun getCells ()Ljava/util/List; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public final fun isBordered ()Ljava/lang/Boolean; + public final fun isStriped ()Ljava/lang/Boolean; + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockTable$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockTable$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockThinking : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking; + public fun equals (Ljava/lang/Object;)Z + public final fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getType ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockThinking$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockThinking$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockVideo : dev/inmo/tgbotapi/types/rich/InputRichBlockMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo;Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo; + public fun equals (Ljava/lang/Object;)Z + public fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public fun getMedia ()Ldev/inmo/tgbotapi/types/media/TelegramMedia; + public fun getType ()Ljava/lang/String; + public final fun getVideo ()Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockVideo$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockVideo$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote : dev/inmo/tgbotapi/types/rich/InputRichBlockMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote;Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote; + public fun equals (Ljava/lang/Object;)Z + public fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public fun getMedia ()Ldev/inmo/tgbotapi/types/media/TelegramMedia; + public fun getType ()Ljava/lang/String; + public final fun getVoiceNote ()Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder { + public fun ()V + public final fun add (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)V + public final fun anchor (Ljava/lang/String;)V + public final fun animation (Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public static synthetic fun animation$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/media/TelegramMediaAnimation;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)V + public final fun audio (Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public static synthetic fun audio$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)V + public final fun blockQuotation (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun blockQuotation$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public final fun build ()Ljava/util/List; + public final fun collage (Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun collage$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public final fun details (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;Lkotlin/jvm/functions/Function1;)V + public final fun details (Ljava/lang/String;Ljava/lang/Boolean;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun details$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public static synthetic fun details$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ljava/lang/String;Ljava/lang/Boolean;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public final fun divider ()V + public final fun footer (Ljava/lang/String;)V + public final fun footer (Lkotlin/jvm/functions/Function1;)V + public final fun heading (ILkotlin/jvm/functions/Function1;)V + public final fun heading (Ljava/lang/String;I)V + public final fun list (Lkotlin/jvm/functions/Function1;)V + public final fun map (Ldev/inmo/tgbotapi/types/location/StaticLocation;IIILdev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public static synthetic fun map$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/location/StaticLocation;IIILdev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)V + public final fun mathematicalExpression (Ljava/lang/String;)V + public final fun paragraph (Ljava/lang/String;)V + public final fun paragraph (Lkotlin/jvm/functions/Function1;)V + public final fun photo (Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public static synthetic fun photo$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/media/TelegramMediaPhoto;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)V + public final fun preformatted (Ljava/lang/String;Ljava/lang/String;)V + public static synthetic fun preformatted$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V + public final fun pullQuotation (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun pullQuotation$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public final fun slideshow (Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun slideshow$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public final fun table (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;)V + public static synthetic fun table$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)V + public final fun thinking (Ljava/lang/String;)V + public final fun thinking (Lkotlin/jvm/functions/Function1;)V + public final fun unaryPlus (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)V + public final fun video (Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public static synthetic fun video$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)V + public final fun voiceNote (Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public static synthetic fun voiceNote$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)V +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlocksDslKt { + public static final fun InputRichMessageBlocks (Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/jvm/functions/Function1;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; + public static synthetic fun InputRichMessageBlocks$default (Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; + public static final fun buildInputRichBlocks (Lkotlin/jvm/functions/Function1;)Ljava/util/List; +} + public final class dev/inmo/tgbotapi/types/rich/InputRichMessage { public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichMessage$Companion; public fun ()V public final fun component1 ()Ljava/lang/String; public final fun component2 ()Ljava/lang/String; - public final fun component3 ()Ljava/lang/Boolean; - public final fun component4 ()Ljava/lang/Boolean; + public final fun component3 ()Ljava/util/List; + public final fun component4 ()Ljava/util/List; + public final fun component5 ()Ljava/lang/Boolean; + public final fun component6 ()Ljava/lang/Boolean; public fun equals (Ljava/lang/Object;)Z + public final fun getBlocks ()Ljava/util/List; public final fun getHtml ()Ljava/lang/String; public final fun getMarkdown ()Ljava/lang/String; + public final fun getMedia ()Ljava/util/List; public final fun getSkipEntityDetection ()Ljava/lang/Boolean; public fun hashCode ()I public final fun isRtl ()Ljava/lang/Boolean; @@ -34465,10 +35313,41 @@ public final class dev/inmo/tgbotapi/types/rich/InputRichMessage$Companion { } public final class dev/inmo/tgbotapi/types/rich/InputRichMessageKt { - public static final fun InputRichMessageHTML (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; - public static synthetic fun InputRichMessageHTML$default (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; - public static final fun InputRichMessageMarkdown (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; - public static synthetic fun InputRichMessageMarkdown$default (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; + public static final fun InputRichMessageBlocks (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; + public static synthetic fun InputRichMessageBlocks$default (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; + public static final fun InputRichMessageHTML (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; + public static synthetic fun InputRichMessageHTML$default (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; + public static final fun InputRichMessageMarkdown (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; + public static synthetic fun InputRichMessageMarkdown$default (Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/util/List;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichMessage; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichMessageMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichMessageMedia$Companion; + public fun (Ljava/lang/String;Ldev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ldev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia; + public final fun copy (Ljava/lang/String;Ldev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia;)Ldev/inmo/tgbotapi/types/rich/InputRichMessageMedia; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichMessageMedia;Ljava/lang/String;Ldev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichMessageMedia; + public fun equals (Ljava/lang/Object;)Z + public final fun getId ()Ljava/lang/String; + public final fun getMedia ()Ldev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/InputRichMessageMedia$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichMessageMedia$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichMessageMedia; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/InputRichMessageMedia;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V + public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichMessageMedia$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; } public abstract interface class dev/inmo/tgbotapi/types/rich/RichBlock { diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendRichMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendRichMessage.kt index 985bc21b52..e50cf94d2e 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendRichMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendRichMessage.kt @@ -1,5 +1,8 @@ package dev.inmo.tgbotapi.requests.send +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile +import dev.inmo.tgbotapi.requests.abstracts.MultipartRequest +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest import dev.inmo.tgbotapi.requests.send.abstracts.ReplyingMarkupSendMessageRequest import dev.inmo.tgbotapi.requests.send.abstracts.SendContentMessageRequest import dev.inmo.tgbotapi.types.* @@ -10,6 +13,7 @@ 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 dev.inmo.tgbotapi.types.rich.multipartFiles import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.EncodeDefault import kotlinx.serialization.ExperimentalSerializationApi @@ -56,10 +60,14 @@ data class SendRichMessage( @SerialName(replyMarkupField) override val replyMarkup: KeyboardMarkup? = null ) : SendContentMessageRequest>, - ReplyingMarkupSendMessageRequest> { + ReplyingMarkupSendMessageRequest>, + MultipartRequest.Common> { override fun method(): String = "sendRichMessage" override val resultDeserializer: DeserializationStrategy> get() = RichMessageContentMessageResultDeserializer override val requestSerializer: SerializationStrategy<*> get() = serializer() + override val data: SimpleRequest> + get() = this + override val mediaMap: Map by lazy { richMessage.multipartFiles } } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendRichMessageDraft.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendRichMessageDraft.kt index 96f4457dd2..971054f016 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendRichMessageDraft.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/send/SendRichMessageDraft.kt @@ -8,6 +8,7 @@ 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.types.rich.multipartFiles import dev.inmo.tgbotapi.utils.serializers.UnitFromBooleanSerializer import kotlinx.serialization.DeserializationStrategy import kotlinx.serialization.SerialName @@ -39,6 +40,9 @@ data class SendRichMessageDraft( require(draftId != 0L) { "draftId of SendRichMessageDraft must be non-zero" } + require(richMessage.multipartFiles.isEmpty()) { + "sendRichMessageDraft does not support direct upload of new files" + } } override val requestSerializer: SerializationStrategy<*> diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia.kt new file mode 100644 index 0000000000..3dff6fe28f --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia.kt @@ -0,0 +1,7 @@ +package dev.inmo.tgbotapi.types.media + +import kotlinx.serialization.Serializable + +@Suppress("SERIALIZER_TYPE_INCOMPATIBLE") +@Serializable(TelegramMediaSerializer::class) +sealed interface RichMessageMemberTelegramMedia : TelegramMedia diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaAnimation.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaAnimation.kt index 183043d609..a3263056a6 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaAnimation.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaAnimation.kt @@ -67,7 +67,7 @@ data class TelegramMediaAnimation internal constructor( override val height: Int? = null, override val duration: Long? = null, override val thumb: InputFile? = null -) : TelegramFreeMedia, SizedTelegramMedia, DuratedTelegramMedia, ThumbedTelegramMedia, TextedOutput, SpoilerableTelegramMedia, WithCustomizableCaptionTelegramMedia, InputPollMedia, InputPollOptionMedia { +) : TelegramFreeMedia, RichMessageMemberTelegramMedia, SizedTelegramMedia, DuratedTelegramMedia, ThumbedTelegramMedia, TextedOutput, SpoilerableTelegramMedia, WithCustomizableCaptionTelegramMedia, InputPollMedia, InputPollOptionMedia { @EncodeDefault override val type: String = TYPE override val textSources: TextSourcesList? by lazy { diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaAudio.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaAudio.kt index 775e7bf8f0..2dbc9f3b08 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaAudio.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaAudio.kt @@ -51,7 +51,7 @@ data class TelegramMediaAudio internal constructor( override val performer: String? = null, override val title: String? = null, override val thumb: InputFile? = null -) : TelegramFreeMedia, AudioMediaGroupMemberTelegramMedia, DuratedTelegramMedia, ThumbedTelegramMedia, TitledTelegramMedia, +) : TelegramFreeMedia, RichMessageMemberTelegramMedia, AudioMediaGroupMemberTelegramMedia, DuratedTelegramMedia, ThumbedTelegramMedia, TitledTelegramMedia, Performerable, InputPollMedia { @EncodeDefault override val type: String = TYPE diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaPhoto.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaPhoto.kt index f0feb12578..03d0beaea0 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaPhoto.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaPhoto.kt @@ -44,7 +44,7 @@ data class TelegramMediaPhoto internal constructor( override val spoilered: Boolean = false, @SerialName(showCaptionAboveMediaField) override val showCaptionAboveMedia: Boolean = false, -) : TelegramFreeMedia, VisualMediaGroupMemberTelegramMedia, InputPollMedia, InputPollOptionMedia { +) : TelegramFreeMedia, RichMessageMemberTelegramMedia, VisualMediaGroupMemberTelegramMedia, InputPollMedia, InputPollOptionMedia { @EncodeDefault override val type: String = TYPE override val textSources: TextSourcesList? by lazy { diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaSerializer.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaSerializer.kt index c2c1383e11..590604d15c 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaSerializer.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaSerializer.kt @@ -25,6 +25,7 @@ object TelegramMediaSerializer : KSerializer { is TelegramPaidMediaPhoto -> TelegramPaidMediaPhoto.serializer().serialize(encoder, value) is TelegramPaidMediaLivePhoto -> TelegramPaidMediaLivePhoto.serializer().serialize(encoder, value) is TelegramMediaSticker -> TelegramMediaSticker.serializer().serialize(encoder, value) + is TelegramMediaVoiceNote -> TelegramMediaVoiceNote.serializer().serialize(encoder, value) } } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaVideo.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaVideo.kt index c60f5731c8..74457aa5af 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaVideo.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaVideo.kt @@ -92,6 +92,7 @@ data class TelegramMediaVideo internal constructor ( @SerialName(supportsStreamingField) override val supportsStreaming: Boolean = false, ) : TelegramFreeMedia, + RichMessageMemberTelegramMedia, SizedTelegramMedia, DuratedTelegramMedia, ThumbedTelegramMedia, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote.kt new file mode 100644 index 0000000000..aada13cdd6 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote.kt @@ -0,0 +1,79 @@ +package dev.inmo.tgbotapi.types.media + +import dev.inmo.tgbotapi.abstracts.TextedOutput +import dev.inmo.tgbotapi.requests.abstracts.InputFile +import dev.inmo.tgbotapi.requests.abstracts.fileIdToSend +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.message.textsources.TextSourcesList +import dev.inmo.tgbotapi.types.message.ParseMode +import dev.inmo.tgbotapi.types.message.parseModeField +import dev.inmo.tgbotapi.types.files.VoiceFile +import dev.inmo.tgbotapi.types.message.* +import dev.inmo.tgbotapi.types.message.RawMessageEntity +import dev.inmo.tgbotapi.types.message.toRawMessageEntities +import dev.inmo.tgbotapi.utils.extensions.makeString +import kotlinx.serialization.EncodeDefault +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +fun TelegramMediaVoiceNote( + file: InputFile, + entities: TextSourcesList, + duration: Long? = null +) = TelegramMediaVoiceNote( + file, entities.makeString(), null, entities.toRawMessageEntities(), duration +) + +fun TelegramMediaVoiceNote( + file: InputFile, + text: String? = null, + parseMode: ParseMode? = null, + duration: Long? = null +) = TelegramMediaVoiceNote( + file, text, parseMode, null, duration +) + +@ConsistentCopyVisibility +@Serializable +data class TelegramMediaVoiceNote internal constructor( + override val file: InputFile, + @SerialName(captionField) + override val text: String? = null, + @SerialName(parseModeField) + override val parseMode: ParseMode? = null, + @SerialName(captionEntitiesField) + private val rawEntities: List? = null, + override val duration: Long? = null +) : RichMessageMemberTelegramMedia, DuratedTelegramMedia, TextedOutput { + @EncodeDefault + override val type: String = TYPE + override val textSources: TextSourcesList? by lazy { + rawEntities ?.asTextSources(text ?: return@lazy null) + } + + @SerialName(mediaField) + override val media: String + init { media = file.fileIdToSend } // crutch until js compiling will be fixed + + companion object { + const val TYPE = "voice_note" + } +} + +fun VoiceFile.toTelegramMediaVoiceNote( + text: String? = null, + parseMode: ParseMode? = null +): TelegramMediaVoiceNote = TelegramMediaVoiceNote( + fileId, + text, + parseMode, + duration +) + +fun VoiceFile.toTelegramMediaVoiceNote( + textSources: TextSourcesList = emptyList() +): TelegramMediaVoiceNote = TelegramMediaVoiceNote( + fileId, + textSources, + duration +) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlock.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlock.kt new file mode 100644 index 0000000000..790ea5b1b9 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlock.kt @@ -0,0 +1,72 @@ +package dev.inmo.tgbotapi.types.rich + +import dev.inmo.tgbotapi.types.media.TelegramMedia +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 to be sent. + * + * @see InputRichBlock + */ +@Serializable(InputRichBlockSerializer::class) +@ClassCastsIncluded +sealed interface InputRichBlock { + val type: String +} + +@Serializable(InputRichBlockSerializer::class) +sealed interface InputRichBlockMedia : InputRichBlock { + val media: TelegramMedia + val caption: RichBlockCaption? +} + +/** + * The nested [InputRichBlock]s directly contained by this block, or an empty list for leaf blocks. Container blocks + * ([InputRichBlockList] via its [InputRichBlockListItem.blocks], [InputRichBlockBlockQuotation], [InputRichBlockCollage], + * [InputRichBlockSlideshow] and [InputRichBlockDetails]) expose their children here. + */ +val InputRichBlock.subBlocks: List + get() = when (this) { + is InputRichBlockList -> items.flatMap { it.blocks } + is InputRichBlockBlockQuotation -> blocks + is InputRichBlockCollage -> blocks + is InputRichBlockSlideshow -> blocks + is InputRichBlockDetails -> blocks + else -> emptyList() + } + +object InputRichBlockSerializer : JsonContentPolymorphicSerializer(InputRichBlock::class) { + override fun selectDeserializer(element: JsonElement): DeserializationStrategy { + return when (val type = element.jsonObject[typeField]?.jsonPrimitive?.content) { + InputRichBlockParagraph.TYPE -> InputRichBlockParagraph.serializer() + InputRichBlockSectionHeading.TYPE -> InputRichBlockSectionHeading.serializer() + InputRichBlockPreformatted.TYPE -> InputRichBlockPreformatted.serializer() + InputRichBlockFooter.TYPE -> InputRichBlockFooter.serializer() + InputRichBlockDivider.TYPE -> InputRichBlockDivider.serializer() + InputRichBlockMathematicalExpression.TYPE -> InputRichBlockMathematicalExpression.serializer() + InputRichBlockAnchor.TYPE -> InputRichBlockAnchor.serializer() + InputRichBlockList.TYPE -> InputRichBlockList.serializer() + InputRichBlockBlockQuotation.TYPE -> InputRichBlockBlockQuotation.serializer() + InputRichBlockPullQuotation.TYPE -> InputRichBlockPullQuotation.serializer() + InputRichBlockCollage.TYPE -> InputRichBlockCollage.serializer() + InputRichBlockSlideshow.TYPE -> InputRichBlockSlideshow.serializer() + InputRichBlockTable.TYPE -> InputRichBlockTable.serializer() + InputRichBlockDetails.TYPE -> InputRichBlockDetails.serializer() + InputRichBlockMap.TYPE -> InputRichBlockMap.serializer() + InputRichBlockAnimation.TYPE -> InputRichBlockAnimation.serializer() + InputRichBlockAudio.TYPE -> InputRichBlockAudio.serializer() + InputRichBlockPhoto.TYPE -> InputRichBlockPhoto.serializer() + InputRichBlockVideo.TYPE -> InputRichBlockVideo.serializer() + InputRichBlockVoiceNote.TYPE -> InputRichBlockVoiceNote.serializer() + InputRichBlockThinking.TYPE -> InputRichBlockThinking.serializer() + else -> error("Unknown InputRichBlock type: $type") + } + } +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlockParts.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlockParts.kt new file mode 100644 index 0000000000..6672e9b775 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlockParts.kt @@ -0,0 +1,31 @@ +package dev.inmo.tgbotapi.types.rich + +import dev.inmo.tgbotapi.types.blocksField +import dev.inmo.tgbotapi.types.hasCheckboxField +import dev.inmo.tgbotapi.types.isCheckedField +import dev.inmo.tgbotapi.types.typeField +import dev.inmo.tgbotapi.types.valueField +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** + * An item of an [InputRichBlockList]. + * + * @see InputRichBlockListItem + */ +@Serializable +data class InputRichBlockListItem( + @SerialName(blocksField) + val blocks: List, + @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 +) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocks.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocks.kt new file mode 100644 index 0000000000..7f6e5269ac --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocks.kt @@ -0,0 +1,499 @@ +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.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.media.TelegramMedia +import dev.inmo.tgbotapi.types.media.TelegramMediaAnimation +import dev.inmo.tgbotapi.types.media.TelegramMediaAudio +import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto +import dev.inmo.tgbotapi.types.media.TelegramMediaVideo +import dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote +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 InputRichBlockParagraph + */ +@Serializable +data class InputRichBlockParagraph( + @SerialName(textField) + val text: RichText +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "paragraph" + } +} + +/** + * A section heading. + * + * @see InputRichBlockSectionHeading + */ +@Serializable +data class InputRichBlockSectionHeading( + @SerialName(textField) + val text: RichText, + /** + * Relative size of the text font; 1-6, 1 is the largest, 6 is the smallest. + */ + @SerialName(sizeField) + val level: Int +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "heading" + } +} + +/** + * A preformatted text block. + * + * @see InputRichBlockPreformatted + */ +@Serializable +data class InputRichBlockPreformatted( + @SerialName(textField) + val text: RichText, + @SerialName(languageField) + val language: String? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "pre" + } +} + +/** + * A footer. + * + * @see InputRichBlockFooter + */ +@Serializable +data class InputRichBlockFooter( + @SerialName(textField) + val text: RichText +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "footer" + } +} + +/** + * A divider. + * + * @see InputRichBlockDivider + */ +@Serializable +class InputRichBlockDivider : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + override fun equals(other: Any?): Boolean = other is InputRichBlockDivider + + override fun hashCode(): Int = TYPE.hashCode() + + override fun toString(): String = "InputRichBlockDivider" + + companion object { + const val TYPE = "divider" + } +} + +/** + * A block with a mathematical expression in LaTeX format. + * + * @see InputRichBlockMathematicalExpression + */ +@Serializable +data class InputRichBlockMathematicalExpression( + @SerialName(expressionField) + val expression: String +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "mathematical_expression" + } +} + +/** + * A block with an anchor. + * + * @see InputRichBlockAnchor + */ +@Serializable +data class InputRichBlockAnchor( + @SerialName(nameField) + val name: String +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "anchor" + } +} + +/** + * A list of blocks. + * + * @see InputRichBlockList + */ +@Serializable +data class InputRichBlockList( + @SerialName(itemsField) + val items: List +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "list" + } +} + +/** + * A block quotation. + * + * @see InputRichBlockBlockQuotation + */ +@Serializable +data class InputRichBlockBlockQuotation( + @SerialName(blocksField) + val blocks: List, + @SerialName(creditField) + val credit: RichText? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "blockquote" + } +} + +/** + * A quotation with centered text. + * + * @see InputRichBlockPullQuotation + */ +@Serializable +data class InputRichBlockPullQuotation( + @SerialName(textField) + val text: RichText, + @SerialName(creditField) + val credit: RichText? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "pullquote" + } +} + +/** + * A collage. + * + * @see InputRichBlockCollage + */ +@Serializable +data class InputRichBlockCollage( + @SerialName(blocksField) + val blocks: List, + @SerialName(captionField) + val caption: RichBlockCaption? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "collage" + } +} + +/** + * A slideshow. + * + * @see InputRichBlockSlideshow + */ +@Serializable +data class InputRichBlockSlideshow( + @SerialName(blocksField) + val blocks: List, + @SerialName(captionField) + val caption: RichBlockCaption? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "slideshow" + } +} + +/** + * A table. + * + * @see InputRichBlockTable + */ +@Serializable +data class InputRichBlockTable( + @SerialName(cellsField) + val cells: List>, + @SerialName(isBorderedField) + val isBordered: Boolean? = null, + @SerialName(isStripedField) + val isStriped: Boolean? = null, + @SerialName(captionField) + val caption: RichText? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "table" + } +} + +/** + * An expandable block for details disclosure. + * + * @see InputRichBlockDetails + */ +@Serializable +data class InputRichBlockDetails( + @SerialName(summaryField) + val summary: RichText, + @SerialName(blocksField) + val blocks: List, + @SerialName(isOpenField) + val isOpen: Boolean? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "details" + } +} + +/** + * A block with a map. + * + * @see InputRichBlockMap + */ +@Serializable +data class InputRichBlockMap( + @SerialName(locationField) + val location: StaticLocation, + /** + * Map zoom level; 0-24. + */ + @SerialName(zoomField) + val zoom: Int, + @SerialName(widthField) + val width: Int, + @SerialName(heightField) + val height: Int, + @SerialName(captionField) + val caption: RichBlockCaption? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "map" + } +} + +/** + * A block with an animation. + * + * @see InputRichBlockAnimation + */ +@Serializable +data class InputRichBlockAnimation( + @SerialName(animationField) + val animation: TelegramMediaAnimation, + @SerialName(captionField) + override val caption: RichBlockCaption? = null +) : InputRichBlockMedia { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + override val media: TelegramMedia + get() = animation + + companion object { + const val TYPE = "animation" + } +} + +/** + * A block with a music file. + * + * @see InputRichBlockAudio + */ +@Serializable +data class InputRichBlockAudio( + @SerialName(audioField) + val audio: TelegramMediaAudio, + @SerialName(captionField) + override val caption: RichBlockCaption? = null +) : InputRichBlockMedia { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + override val media: TelegramMedia + get() = audio + + companion object { + const val TYPE = "audio" + } +} + +/** + * A block with a photo. + * + * @see InputRichBlockPhoto + */ +@Serializable +data class InputRichBlockPhoto( + @SerialName(photoField) + val photo: TelegramMediaPhoto, + @SerialName(captionField) + override val caption: RichBlockCaption? = null +) : InputRichBlockMedia { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + override val media: TelegramMedia + get() = photo + + companion object { + const val TYPE = "photo" + } +} + +/** + * A block with a video. + * + * @see InputRichBlockVideo + */ +@Serializable +data class InputRichBlockVideo( + @SerialName(videoField) + val video: TelegramMediaVideo, + @SerialName(captionField) + override val caption: RichBlockCaption? = null +) : InputRichBlockMedia { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + override val media: TelegramMedia + get() = video + + companion object { + const val TYPE = "video" + } +} + +/** + * A block with a voice note. + * + * @see InputRichBlockVoiceNote + */ +@Serializable +data class InputRichBlockVoiceNote( + @SerialName(voiceNoteField) + val voiceNote: TelegramMediaVoiceNote, + @SerialName(captionField) + override val caption: RichBlockCaption? = null +) : InputRichBlockMedia { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + override val media: TelegramMedia + get() = voiceNote + + companion object { + const val TYPE = "voice_note" + } +} + +/** + * A block with a "Thinking…" placeholder. May be used only in [dev.inmo.tgbotapi.requests.send.SendRichMessageDraft]. + * + * @see InputRichBlockThinking + */ +@Serializable +data class InputRichBlockThinking( + @SerialName(textField) + val text: RichText +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + companion object { + const val TYPE = "thinking" + } +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocksDsl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocksDsl.kt new file mode 100644 index 0000000000..6e1e623690 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocksDsl.kt @@ -0,0 +1,129 @@ +package dev.inmo.tgbotapi.types.rich + +import dev.inmo.tgbotapi.types.location.StaticLocation +import dev.inmo.tgbotapi.types.media.TelegramMediaAnimation +import dev.inmo.tgbotapi.types.media.TelegramMediaAudio +import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto +import dev.inmo.tgbotapi.types.media.TelegramMediaVideo +import dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote + +/** + * Builder of [InputRichBlockListItem]s used inside [InputRichBlocksBuilder.list]. + */ +@RichTextDsl +class InputRichBlockListBuilder { + private val items = mutableListOf() + + fun item( + hasCheckbox: Boolean? = null, + isChecked: Boolean? = null, + value: Int? = null, + labelType: String? = null, + block: InputRichBlocksBuilder.() -> Unit + ) { + items.add(InputRichBlockListItem(buildInputRichBlocks(block), hasCheckbox, isChecked, value, labelType)) + } + + fun item(text: String) { + items.add(InputRichBlockListItem(listOf(InputRichBlockParagraph(RichTextPlain(text))))) + } + + fun build(): List = items.toList() +} + +/** + * Builder of a [List] of [InputRichBlock]s - the root of the rich message input DSL. Text-bearing and container blocks + * have their own DSL functions; media blocks (photo, video, animation, audio, voice note, collage, slideshow, table, + * map) can be appended with the matching convenience function or with [add] / unary plus. + */ +@RichTextDsl +class InputRichBlocksBuilder { + private val blocks = mutableListOf() + + /** Appends an already built [InputRichBlock]. */ + fun add(block: InputRichBlock) { + blocks.add(block) + } + + /** Appends an already built [InputRichBlock]. */ + operator fun InputRichBlock.unaryPlus() = add(this) + + fun paragraph(text: String) = add(InputRichBlockParagraph(RichTextPlain(text))) + fun paragraph(block: RichTextBuilder.() -> Unit) = add(InputRichBlockParagraph(buildRichText(block))) + + fun heading(text: String, level: Int) = add(InputRichBlockSectionHeading(RichTextPlain(text), level)) + fun heading(level: Int, block: RichTextBuilder.() -> Unit) = add(InputRichBlockSectionHeading(buildRichText(block), level)) + + fun preformatted(text: String, language: String? = null) = add(InputRichBlockPreformatted(RichTextPlain(text), language)) + + fun footer(text: String) = add(InputRichBlockFooter(RichTextPlain(text))) + fun footer(block: RichTextBuilder.() -> Unit) = add(InputRichBlockFooter(buildRichText(block))) + + fun divider() = add(InputRichBlockDivider()) + + fun mathematicalExpression(expression: String) = add(InputRichBlockMathematicalExpression(expression)) + + fun anchor(name: String) = add(InputRichBlockAnchor(name)) + + fun thinking(text: String) = add(InputRichBlockThinking(RichTextPlain(text))) + fun thinking(block: RichTextBuilder.() -> Unit) = add(InputRichBlockThinking(buildRichText(block))) + + fun list(block: InputRichBlockListBuilder.() -> Unit) = add(InputRichBlockList(InputRichBlockListBuilder().apply(block).build())) + + fun blockQuotation(credit: RichText? = null, block: InputRichBlocksBuilder.() -> Unit) = + add(InputRichBlockBlockQuotation(buildInputRichBlocks(block), credit)) + + fun pullQuotation(credit: RichText? = null, block: RichTextBuilder.() -> Unit) = + add(InputRichBlockPullQuotation(buildRichText(block), credit)) + + fun details(summary: RichText, isOpen: Boolean? = null, block: InputRichBlocksBuilder.() -> Unit) = + add(InputRichBlockDetails(summary, buildInputRichBlocks(block), isOpen)) + + fun details(summary: String, isOpen: Boolean? = null, block: InputRichBlocksBuilder.() -> Unit) = + details(RichTextPlain(summary), isOpen, block) + + fun photo(photo: TelegramMediaPhoto, caption: RichBlockCaption? = null) = add(InputRichBlockPhoto(photo, caption)) + + fun video(video: TelegramMediaVideo, caption: RichBlockCaption? = null) = add(InputRichBlockVideo(video, caption)) + + fun animation(animation: TelegramMediaAnimation, caption: RichBlockCaption? = null) = + add(InputRichBlockAnimation(animation, caption)) + + fun audio(audio: TelegramMediaAudio, caption: RichBlockCaption? = null) = add(InputRichBlockAudio(audio, caption)) + + fun voiceNote(voiceNote: TelegramMediaVoiceNote, caption: RichBlockCaption? = null) = + add(InputRichBlockVoiceNote(voiceNote, caption)) + + fun collage(caption: RichBlockCaption? = null, block: InputRichBlocksBuilder.() -> Unit) = + add(InputRichBlockCollage(buildInputRichBlocks(block), caption)) + + fun slideshow(caption: RichBlockCaption? = null, block: InputRichBlocksBuilder.() -> Unit) = + add(InputRichBlockSlideshow(buildInputRichBlocks(block), caption)) + + fun table( + cells: List>, + isBordered: Boolean? = null, + isStriped: Boolean? = null, + caption: RichText? = null + ) = add(InputRichBlockTable(cells, isBordered, isStriped, caption)) + + fun map( + location: StaticLocation, + zoom: Int, + width: Int, + height: Int, + caption: RichBlockCaption? = null + ) = add(InputRichBlockMap(location, zoom, width, height, caption)) + + fun build(): List = blocks.toList() +} + +/** Builds a [List] of [InputRichBlock]s using the [InputRichBlocksBuilder] DSL. */ +fun buildInputRichBlocks(block: InputRichBlocksBuilder.() -> Unit): List = InputRichBlocksBuilder().apply(block).build() + +/** Builds an [InputRichMessage] with `blocks` built using the [InputRichBlocksBuilder] DSL. */ +fun InputRichMessageBlocks( + isRtl: Boolean? = null, + skipEntityDetection: Boolean? = null, + block: InputRichBlocksBuilder.() -> Unit +): InputRichMessage = InputRichMessageBlocks(buildInputRichBlocks(block), isRtl, skipEntityDetection) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessage.kt index 5495f9d57f..d2a0f09525 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessage.kt @@ -1,15 +1,21 @@ package dev.inmo.tgbotapi.types.rich +import dev.inmo.tgbotapi.requests.abstracts.MultipartFile +import dev.inmo.tgbotapi.types.blocksField import dev.inmo.tgbotapi.types.htmlField import dev.inmo.tgbotapi.types.isRtlField import dev.inmo.tgbotapi.types.markdownField +import dev.inmo.tgbotapi.types.media.CoveredTelegramMedia +import dev.inmo.tgbotapi.types.media.TelegramMedia +import dev.inmo.tgbotapi.types.media.ThumbedTelegramMedia +import dev.inmo.tgbotapi.types.mediaField 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. + * Describes a rich message to be sent. Exactly one of the fields [html], [markdown] or [blocks] must be used. Use the + * [InputRichMessageHTML], [InputRichMessageMarkdown] and [InputRichMessageBlocks] factories to build an instance. * * @see InputRichMessage */ @@ -20,14 +26,21 @@ data class InputRichMessage internal constructor( val html: String? = null, @SerialName(markdownField) val markdown: String? = null, + @SerialName(blocksField) + val blocks: List? = null, + @SerialName(mediaField) + val media: List? = 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" + require(listOfNotNull(html, markdown, blocks).size == 1) { + "Exactly one of the fields html, markdown or blocks must be used in InputRichMessage" + } + require(media == null || blocks == null) { + "The field media of InputRichMessage can be used only together with html or markdown, not blocks" } } } @@ -40,10 +53,13 @@ data class InputRichMessage internal constructor( fun InputRichMessageHTML( html: String, isRtl: Boolean? = null, - skipEntityDetection: Boolean? = null + skipEntityDetection: Boolean? = null, + media: List? = null ): InputRichMessage = InputRichMessage( html = html, markdown = null, + blocks = null, + media = media, isRtl = isRtl, skipEntityDetection = skipEntityDetection ) @@ -56,10 +72,61 @@ fun InputRichMessageHTML( fun InputRichMessageMarkdown( markdown: String, isRtl: Boolean? = null, - skipEntityDetection: Boolean? = null + skipEntityDetection: Boolean? = null, + media: List? = null ): InputRichMessage = InputRichMessage( html = null, markdown = markdown, + blocks = null, + media = media, isRtl = isRtl, skipEntityDetection = skipEntityDetection ) + +/** + * Creates an [InputRichMessage] with the content described using a list of [InputRichBlock]s. + * + * @see InputRichMessage + */ +fun InputRichMessageBlocks( + blocks: List, + isRtl: Boolean? = null, + skipEntityDetection: Boolean? = null +): InputRichMessage = InputRichMessage( + html = null, + markdown = null, + blocks = blocks, + media = null, + isRtl = isRtl, + skipEntityDetection = skipEntityDetection +) + +/** + * Files ([MultipartFile]) referenced by this [InputRichMessage]: the standalone [InputRichMessage.media] entries and any + * media block nested (recursively) in [InputRichMessage.blocks], keyed by [MultipartFile.fileId]. + */ +internal val InputRichMessage.multipartFiles: Map + get() { + val mediaFiles = media.orEmpty().flatMap { it.media.multipartFiles() } + val blockFiles = blocks.orEmpty().flatMap { it.multipartFiles() } + return (mediaFiles + blockFiles).associateBy { it.fileId } + } + +private fun TelegramMedia.multipartFiles(): List = listOfNotNull( + file as? MultipartFile, + if (this is ThumbedTelegramMedia) { + thumb as? MultipartFile + } else { + null + }, + if (this is CoveredTelegramMedia) { + cover as? MultipartFile + } else { + null + } +) + +private fun InputRichBlock.multipartFiles(): List { + val ownFiles = (this as? InputRichBlockMedia) ?.media ?.multipartFiles().orEmpty() + return ownFiles + subBlocks.flatMap { it.multipartFiles() } +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessageMedia.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessageMedia.kt new file mode 100644 index 0000000000..002467084c --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessageMedia.kt @@ -0,0 +1,29 @@ +package dev.inmo.tgbotapi.types.rich + +import dev.inmo.tgbotapi.types.idField +import dev.inmo.tgbotapi.types.media.RichMessageMemberTelegramMedia +import dev.inmo.tgbotapi.types.mediaField +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +private val inputRichMessageMediaIdRegex = Regex("[A-Za-z0-9_-]{1,64}") + +/** + * Describes a media referenced from [InputRichMessage.html]/[InputRichMessage.markdown] via `tg://photo?id=`, + * `tg://video?id=` and `tg://audio?id=` links. + * + * @see InputRichMessageMedia + */ +@Serializable +data class InputRichMessageMedia( + @SerialName(idField) + val id: String, + @SerialName(mediaField) + val media: RichMessageMemberTelegramMedia +) { + init { + require(id.matches(inputRichMessageMediaIdRegex)) { + "id of InputRichMessageMedia must be 1-64 characters long and contain only latin letters, digits, underscores and hyphens, but was \"$id\"" + } + } +} diff --git a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocksDslTest.kt b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocksDslTest.kt new file mode 100644 index 0000000000..a321e39d3d --- /dev/null +++ b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/InputRichBlocksDslTest.kt @@ -0,0 +1,59 @@ +package dev.inmo.tgbotapi.types.rich + +import dev.inmo.tgbotapi.requests.abstracts.FileId +import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto +import kotlin.test.Test +import kotlin.test.assertEquals + +class InputRichBlocksDslTest { + @Test + fun buildsTextAndContainerBlocks() { + val blocks = buildInputRichBlocks { + heading("Title", 1) + paragraph { + plain("Hello ") + bold("world") + } + divider() + list { + item("first") + item(labelType = "1") { paragraph("second") } + } + blockQuotation { + paragraph("quoted") + } + } + + assertEquals(5, blocks.size) + assertEquals(InputRichBlockSectionHeading(RichTextPlain("Title"), 1), blocks[0]) + assertEquals( + InputRichBlockParagraph(RichTextGroup(listOf(RichTextPlain("Hello "), RichTextBold(RichTextPlain("world"))))), + blocks[1] + ) + assertEquals(InputRichBlockDivider(), blocks[2]) + + val list = blocks[3] as InputRichBlockList + assertEquals(2, list.items.size) + assertEquals(InputRichBlockListItem(listOf(InputRichBlockParagraph(RichTextPlain("first")))), list.items[0]) + assertEquals("1", list.items[1].labelType) + + assertEquals(InputRichBlockBlockQuotation(listOf(InputRichBlockParagraph(RichTextPlain("quoted")))), blocks[4]) + } + + @Test + fun buildsMediaBlocks() { + val photo = TelegramMediaPhoto(FileId("photo_file_id")) + val blocks = buildInputRichBlocks { + photo(photo) + } + assertEquals(listOf(InputRichBlockPhoto(photo)), blocks) + } + + @Test + fun buildsInputRichMessageBlocks() { + val message = InputRichMessageBlocks(isRtl = true) { + paragraph("p") + } + assertEquals(InputRichMessageBlocks(listOf(InputRichBlockParagraph(RichTextPlain("p"))), true), message) + } +} diff --git a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessageSerializationTest.kt b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessageSerializationTest.kt new file mode 100644 index 0000000000..a78e0e72b4 --- /dev/null +++ b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/InputRichMessageSerializationTest.kt @@ -0,0 +1,176 @@ +package dev.inmo.tgbotapi.types.rich + +import dev.inmo.tgbotapi.requests.abstracts.FileId +import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto +import dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote +import kotlinx.serialization.builtins.ListSerializer +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import kotlinx.serialization.json.int +import kotlinx.serialization.json.boolean +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith +import kotlin.test.assertTrue + +class InputRichMessageSerializationTest { + private val json = Json { encodeDefaults = true } + + @Test + fun encodesTextAndContainerBlocks() { + val message = InputRichMessageBlocks( + blocks = listOf( + InputRichBlockParagraph(RichTextPlain("Hello")), + InputRichBlockSectionHeading(RichTextPlain("Title"), 2), + InputRichBlockDivider(), + InputRichBlockList( + listOf( + InputRichBlockListItem( + listOf(InputRichBlockParagraph(RichTextPlain("first"))), + labelType = "1" + ) + ) + ) + ) + ) + + val blocksJson = json.encodeToJsonElement(InputRichMessage.serializer(), message).jsonObject["blocks"]!!.jsonArray + + val paragraph = blocksJson[0].jsonObject + assertEquals("paragraph", paragraph["type"]?.jsonPrimitive?.content) + + val heading = blocksJson[1].jsonObject + assertEquals("heading", heading["type"]?.jsonPrimitive?.content) + assertEquals(2, heading["size"]?.jsonPrimitive?.int) + + val divider = blocksJson[2].jsonObject + assertEquals("divider", divider["type"]?.jsonPrimitive?.content) + assertEquals(1, divider.size) + + val list = blocksJson[3].jsonObject + assertEquals("list", list["type"]?.jsonPrimitive?.content) + val item = list["items"]!!.jsonArray[0].jsonObject + assertTrue("label" !in item) + assertEquals("1", item["type"]?.jsonPrimitive?.content) + } + + @Test + fun encodesTableReusingReceivedCellType() { + val table = InputRichBlockTable( + cells = listOf( + listOf(RichBlockTableCell(RichTextPlain("h1"), isHeader = true, align = "left", valign = "top")) + ) + ) + val message = InputRichMessageBlocks(blocks = listOf(table)) + + val tableJson = json.encodeToJsonElement(InputRichMessage.serializer(), message).jsonObject["blocks"]!!.jsonArray[0].jsonObject + val cell = tableJson["cells"]!!.jsonArray[0].jsonArray[0].jsonObject + assertEquals("left", cell["align"]?.jsonPrimitive?.content) + assertEquals(true, cell["is_header"]?.jsonPrimitive?.boolean) + } + + @Test + fun encodesPhotoBlockMedia() { + val photoBlock = InputRichBlockPhoto(TelegramMediaPhoto(FileId("photo_file_id"))) + val message = InputRichMessageBlocks(blocks = listOf(photoBlock)) + + val blockJson = json.encodeToJsonElement(InputRichMessage.serializer(), message).jsonObject["blocks"]!!.jsonArray[0].jsonObject + assertEquals("photo", blockJson["type"]?.jsonPrimitive?.content) + val photoJson = blockJson["photo"]!!.jsonObject + assertEquals("photo", photoJson["type"]?.jsonPrimitive?.content) + assertEquals("photo_file_id", photoJson["media"]?.jsonPrimitive?.content) + } + + @Test + fun encodesVoiceNoteBlock() { + val voiceBlock = InputRichBlockVoiceNote(TelegramMediaVoiceNote(FileId("voice_file_id"), duration = 12)) + val message = InputRichMessageBlocks(blocks = listOf(voiceBlock)) + + val blockJson = json.encodeToJsonElement(InputRichMessage.serializer(), message).jsonObject["blocks"]!!.jsonArray[0].jsonObject + assertEquals("voice_note", blockJson["type"]?.jsonPrimitive?.content) + val voiceJson = blockJson["voice_note"]!!.jsonObject + assertEquals("voice_note", voiceJson["type"]?.jsonPrimitive?.content) + assertEquals("voice_file_id", voiceJson["media"]?.jsonPrimitive?.content) + assertEquals(12, voiceJson["duration"]?.jsonPrimitive?.int) + } + + @Test + fun encodesMarkdownWithMedia() { + val message = InputRichMessageMarkdown( + markdown = "See ![photo](tg://photo?id=abc)", + media = listOf(InputRichMessageMedia("abc", TelegramMediaPhoto(FileId("photo_file_id")))) + ) + + val element = json.encodeToJsonElement(InputRichMessage.serializer(), message).jsonObject + assertEquals("See ![photo](tg://photo?id=abc)", element["markdown"]?.jsonPrimitive?.content) + val mediaJson = element["media"]!!.jsonArray[0].jsonObject + assertEquals("abc", mediaJson["id"]?.jsonPrimitive?.content) + assertEquals("photo_file_id", mediaJson["media"]!!.jsonObject["media"]?.jsonPrimitive?.content) + } + + @Test + fun roundTripsListOfInputRichBlocks() { + val blocks: List = listOf( + InputRichBlockParagraph(RichTextGroup(listOf(RichTextPlain("a "), RichTextBold(RichTextPlain("b"))))), + InputRichBlockDivider(), + InputRichBlockList( + listOf( + InputRichBlockListItem( + listOf(InputRichBlockParagraph(RichTextPlain("item"))), + hasCheckbox = true, + isChecked = true + ) + ) + ) + ) + + val serializer = ListSerializer(InputRichBlockSerializer) + val encoded = json.encodeToString(serializer, blocks) + val decoded = json.decodeFromString(serializer, encoded) + assertEquals(blocks, decoded) + } + + @Test + fun requiresExactlyOneOfHtmlMarkdownOrBlocks() { + assertFailsWith { + InputRichMessage(html = null, markdown = null, blocks = null) + } + assertFailsWith { + InputRichMessage(html = "hi", markdown = "**hi**", blocks = null) + } + assertFailsWith { + InputRichMessage( + html = "hi", + markdown = null, + blocks = listOf(InputRichBlockParagraph(RichTextPlain("hi"))) + ) + } + } + + @Test + fun requiresMediaOnlyWithoutBlocks() { + assertFailsWith { + InputRichMessage( + html = null, + markdown = null, + blocks = listOf(InputRichBlockParagraph(RichTextPlain("hi"))), + media = listOf(InputRichMessageMedia("abc", TelegramMediaPhoto(FileId("photo_file_id")))) + ) + } + } + + @Test + fun requiresValidMediaId() { + assertFailsWith { + InputRichMessageMedia("", TelegramMediaPhoto(FileId("photo_file_id"))) + } + assertFailsWith { + InputRichMessageMedia("has space", TelegramMediaPhoto(FileId("photo_file_id"))) + } + assertFailsWith { + InputRichMessageMedia("x".repeat(65), TelegramMediaPhoto(FileId("photo_file_id"))) + } + } +} diff --git a/tgbotapi.utils/api/tgbotapi.utils.api b/tgbotapi.utils/api/tgbotapi.utils.api index ae36749687..a23813b5b3 100644 --- a/tgbotapi.utils/api/tgbotapi.utils.api +++ b/tgbotapi.utils/api/tgbotapi.utils.api @@ -1906,6 +1906,28 @@ 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 ifInputRichBlockAnchor (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockAnimation (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockAudio (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockBlockQuotation (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockCollage (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockDetails (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockDivider (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockFooter (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockList (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockMap (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockMathematicalExpression (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockMedia (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockParagraph (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockPhoto (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockPreformatted (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockPullQuotation (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockSectionHeading (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockSlideshow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockTable (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockThinking (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockVideo (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockVoiceNote (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;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; @@ -2106,6 +2128,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { 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 ifRichMessageMemberTelegramMedia (Ldev/inmo/tgbotapi/types/media/TelegramMedia;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; @@ -2211,6 +2234,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifTelegramMediaVideo (Ldev/inmo/tgbotapi/types/media/InputPollMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifTelegramMediaVideo (Ldev/inmo/tgbotapi/types/media/InputPollOptionMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifTelegramMediaVideo (Ldev/inmo/tgbotapi/types/media/TelegramMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifTelegramMediaVoiceNote (Ldev/inmo/tgbotapi/types/media/TelegramMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifTelegramPaidMedia (Ldev/inmo/tgbotapi/types/media/TelegramMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifTelegramPaidMediaLivePhoto (Ldev/inmo/tgbotapi/types/media/TelegramMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifTelegramPaidMediaPhoto (Ldev/inmo/tgbotapi/types/media/TelegramMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -2394,6 +2418,50 @@ 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 inputRichBlockAnchorOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor; + public static final fun inputRichBlockAnchorOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnchor; + public static final fun inputRichBlockAnimationOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation; + public static final fun inputRichBlockAnimationOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAnimation; + public static final fun inputRichBlockAudioOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio; + public static final fun inputRichBlockAudioOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockAudio; + public static final fun inputRichBlockBlockQuotationOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation; + public static final fun inputRichBlockBlockQuotationOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation; + public static final fun inputRichBlockCollageOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage; + public static final fun inputRichBlockCollageOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockCollage; + public static final fun inputRichBlockDetailsOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails; + public static final fun inputRichBlockDetailsOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDetails; + public static final fun inputRichBlockDividerOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDivider; + public static final fun inputRichBlockDividerOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDivider; + public static final fun inputRichBlockFooterOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter; + public static final fun inputRichBlockFooterOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockFooter; + public static final fun inputRichBlockListOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockList; + public static final fun inputRichBlockListOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockList; + public static final fun inputRichBlockMapOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap; + public static final fun inputRichBlockMapOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMap; + public static final fun inputRichBlockMathematicalExpressionOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression; + public static final fun inputRichBlockMathematicalExpressionOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMathematicalExpression; + public static final fun inputRichBlockMediaOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMedia; + public static final fun inputRichBlockMediaOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockMedia; + public static final fun inputRichBlockParagraphOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph; + public static final fun inputRichBlockParagraphOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockParagraph; + public static final fun inputRichBlockPhotoOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto; + public static final fun inputRichBlockPhotoOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPhoto; + public static final fun inputRichBlockPreformattedOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted; + public static final fun inputRichBlockPreformattedOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPreformatted; + public static final fun inputRichBlockPullQuotationOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation; + public static final fun inputRichBlockPullQuotationOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockPullQuotation; + public static final fun inputRichBlockSectionHeadingOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading; + public static final fun inputRichBlockSectionHeadingOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSectionHeading; + public static final fun inputRichBlockSlideshowOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow; + public static final fun inputRichBlockSlideshowOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow; + public static final fun inputRichBlockTableOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable; + public static final fun inputRichBlockTableOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockTable; + public static final fun inputRichBlockThinkingOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking; + public static final fun inputRichBlockThinkingOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockThinking; + public static final fun inputRichBlockVideoOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo; + public static final fun inputRichBlockVideoOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVideo; + public static final fun inputRichBlockVoiceNoteOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote; + public static final fun inputRichBlockVoiceNoteOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockVoiceNote; 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; @@ -2794,6 +2862,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { 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 richMessageMemberTelegramMediaOrNull (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia; + public static final fun richMessageMemberTelegramMediaOrThrow (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia; 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; @@ -3004,6 +3074,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun telegramMediaVideoOrThrow (Ldev/inmo/tgbotapi/types/media/InputPollMedia;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo; public static final fun telegramMediaVideoOrThrow (Ldev/inmo/tgbotapi/types/media/InputPollOptionMedia;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo; public static final fun telegramMediaVideoOrThrow (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVideo; + public static final fun telegramMediaVoiceNoteOrNull (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; + public static final fun telegramMediaVoiceNoteOrThrow (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/TelegramMediaVoiceNote; public static final fun telegramPaidMediaLivePhotoOrNull (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/TelegramPaidMediaLivePhoto; public static final fun telegramPaidMediaLivePhotoOrThrow (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/TelegramPaidMediaLivePhoto; public static final fun telegramPaidMediaOrNull (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/TelegramPaidMedia; diff --git a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCastsNew.kt b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCastsNew.kt index 8670209609..6086bb3f74 100644 --- a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCastsNew.kt +++ b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCastsNew.kt @@ -262,6 +262,7 @@ import dev.inmo.tgbotapi.types.media.InputPollMedia import dev.inmo.tgbotapi.types.media.InputPollOptionMedia import dev.inmo.tgbotapi.types.media.MediaGroupMemberTelegramMedia import dev.inmo.tgbotapi.types.media.PollMedia +import dev.inmo.tgbotapi.types.media.RichMessageMemberTelegramMedia import dev.inmo.tgbotapi.types.media.SizedTelegramMedia import dev.inmo.tgbotapi.types.media.SpoilerableTelegramMedia import dev.inmo.tgbotapi.types.media.TelegramFreeMedia @@ -276,6 +277,7 @@ import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto import dev.inmo.tgbotapi.types.media.TelegramMediaSticker import dev.inmo.tgbotapi.types.media.TelegramMediaVenue import dev.inmo.tgbotapi.types.media.TelegramMediaVideo +import dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote import dev.inmo.tgbotapi.types.media.TelegramPaidMedia import dev.inmo.tgbotapi.types.media.TelegramPaidMediaLivePhoto import dev.inmo.tgbotapi.types.media.TelegramPaidMediaPhoto @@ -550,6 +552,29 @@ 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.InputRichBlock +import dev.inmo.tgbotapi.types.rich.InputRichBlockAnchor +import dev.inmo.tgbotapi.types.rich.InputRichBlockAnimation +import dev.inmo.tgbotapi.types.rich.InputRichBlockAudio +import dev.inmo.tgbotapi.types.rich.InputRichBlockBlockQuotation +import dev.inmo.tgbotapi.types.rich.InputRichBlockCollage +import dev.inmo.tgbotapi.types.rich.InputRichBlockDetails +import dev.inmo.tgbotapi.types.rich.InputRichBlockDivider +import dev.inmo.tgbotapi.types.rich.InputRichBlockFooter +import dev.inmo.tgbotapi.types.rich.InputRichBlockList +import dev.inmo.tgbotapi.types.rich.InputRichBlockMap +import dev.inmo.tgbotapi.types.rich.InputRichBlockMathematicalExpression +import dev.inmo.tgbotapi.types.rich.InputRichBlockMedia +import dev.inmo.tgbotapi.types.rich.InputRichBlockParagraph +import dev.inmo.tgbotapi.types.rich.InputRichBlockPhoto +import dev.inmo.tgbotapi.types.rich.InputRichBlockPreformatted +import dev.inmo.tgbotapi.types.rich.InputRichBlockPullQuotation +import dev.inmo.tgbotapi.types.rich.InputRichBlockSectionHeading +import dev.inmo.tgbotapi.types.rich.InputRichBlockSlideshow +import dev.inmo.tgbotapi.types.rich.InputRichBlockTable +import dev.inmo.tgbotapi.types.rich.InputRichBlockThinking +import dev.inmo.tgbotapi.types.rich.InputRichBlockVideo +import dev.inmo.tgbotapi.types.rich.InputRichBlockVoiceNote import dev.inmo.tgbotapi.types.rich.RichBlock import dev.inmo.tgbotapi.types.rich.RichBlockAnchor import dev.inmo.tgbotapi.types.rich.RichBlockAnimation @@ -882,6 +907,12 @@ public inline fun TelegramMedia.duratedTelegramMediaOrThrow(): DuratedTelegramMe public inline fun TelegramMedia.ifDuratedTelegramMedia(block: (DuratedTelegramMedia) -> T): T? = duratedTelegramMediaOrNull() ?.let(block) +public inline fun TelegramMedia.telegramMediaVoiceNoteOrNull(): TelegramMediaVoiceNote? = this as? dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote + +public inline fun TelegramMedia.telegramMediaVoiceNoteOrThrow(): TelegramMediaVoiceNote = this as dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote + +public inline fun TelegramMedia.ifTelegramMediaVoiceNote(block: (TelegramMediaVoiceNote) -> T): T? = telegramMediaVoiceNoteOrNull() ?.let(block) + public inline fun TelegramMedia.titledTelegramMediaOrNull(): TitledTelegramMedia? = this as? dev.inmo.tgbotapi.types.media.TitledTelegramMedia public inline fun TelegramMedia.titledTelegramMediaOrThrow(): TitledTelegramMedia = this as dev.inmo.tgbotapi.types.media.TitledTelegramMedia @@ -936,6 +967,12 @@ public inline fun TelegramMedia.telegramMediaAnimationOrThrow(): TelegramMediaAn public inline fun TelegramMedia.ifTelegramMediaAnimation(block: (TelegramMediaAnimation) -> T): T? = telegramMediaAnimationOrNull() ?.let(block) +public inline fun TelegramMedia.richMessageMemberTelegramMediaOrNull(): RichMessageMemberTelegramMedia? = this as? dev.inmo.tgbotapi.types.media.RichMessageMemberTelegramMedia + +public inline fun TelegramMedia.richMessageMemberTelegramMediaOrThrow(): RichMessageMemberTelegramMedia = this as dev.inmo.tgbotapi.types.media.RichMessageMemberTelegramMedia + +public inline fun TelegramMedia.ifRichMessageMemberTelegramMedia(block: (RichMessageMemberTelegramMedia) -> T): T? = richMessageMemberTelegramMediaOrNull() ?.let(block) + public inline fun TelegramMedia.telegramMediaVideoOrNull(): TelegramMediaVideo? = this as? dev.inmo.tgbotapi.types.media.TelegramMediaVideo public inline fun TelegramMedia.telegramMediaVideoOrThrow(): TelegramMediaVideo = this as dev.inmo.tgbotapi.types.media.TelegramMediaVideo @@ -3336,6 +3373,138 @@ public inline fun InputMessageContent.inputRichMessageContentOrThrow(): InputRic public inline fun InputMessageContent.ifInputRichMessageContent(block: (InputRichMessageContent) -> T): T? = inputRichMessageContentOrNull() ?.let(block) +public inline fun InputRichBlock.inputRichBlockMediaOrNull(): InputRichBlockMedia? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockMedia + +public inline fun InputRichBlock.inputRichBlockMediaOrThrow(): InputRichBlockMedia = this as dev.inmo.tgbotapi.types.rich.InputRichBlockMedia + +public inline fun InputRichBlock.ifInputRichBlockMedia(block: (InputRichBlockMedia) -> T): T? = inputRichBlockMediaOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockParagraphOrNull(): InputRichBlockParagraph? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockParagraph + +public inline fun InputRichBlock.inputRichBlockParagraphOrThrow(): InputRichBlockParagraph = this as dev.inmo.tgbotapi.types.rich.InputRichBlockParagraph + +public inline fun InputRichBlock.ifInputRichBlockParagraph(block: (InputRichBlockParagraph) -> T): T? = inputRichBlockParagraphOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockSectionHeadingOrNull(): InputRichBlockSectionHeading? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockSectionHeading + +public inline fun InputRichBlock.inputRichBlockSectionHeadingOrThrow(): InputRichBlockSectionHeading = this as dev.inmo.tgbotapi.types.rich.InputRichBlockSectionHeading + +public inline fun InputRichBlock.ifInputRichBlockSectionHeading(block: (InputRichBlockSectionHeading) -> T): T? = inputRichBlockSectionHeadingOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockPreformattedOrNull(): InputRichBlockPreformatted? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockPreformatted + +public inline fun InputRichBlock.inputRichBlockPreformattedOrThrow(): InputRichBlockPreformatted = this as dev.inmo.tgbotapi.types.rich.InputRichBlockPreformatted + +public inline fun InputRichBlock.ifInputRichBlockPreformatted(block: (InputRichBlockPreformatted) -> T): T? = inputRichBlockPreformattedOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockFooterOrNull(): InputRichBlockFooter? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockFooter + +public inline fun InputRichBlock.inputRichBlockFooterOrThrow(): InputRichBlockFooter = this as dev.inmo.tgbotapi.types.rich.InputRichBlockFooter + +public inline fun InputRichBlock.ifInputRichBlockFooter(block: (InputRichBlockFooter) -> T): T? = inputRichBlockFooterOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockDividerOrNull(): InputRichBlockDivider? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockDivider + +public inline fun InputRichBlock.inputRichBlockDividerOrThrow(): InputRichBlockDivider = this as dev.inmo.tgbotapi.types.rich.InputRichBlockDivider + +public inline fun InputRichBlock.ifInputRichBlockDivider(block: (InputRichBlockDivider) -> T): T? = inputRichBlockDividerOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockMathematicalExpressionOrNull(): InputRichBlockMathematicalExpression? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockMathematicalExpression + +public inline fun InputRichBlock.inputRichBlockMathematicalExpressionOrThrow(): InputRichBlockMathematicalExpression = this as dev.inmo.tgbotapi.types.rich.InputRichBlockMathematicalExpression + +public inline fun InputRichBlock.ifInputRichBlockMathematicalExpression(block: (InputRichBlockMathematicalExpression) -> T): T? = inputRichBlockMathematicalExpressionOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockAnchorOrNull(): InputRichBlockAnchor? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockAnchor + +public inline fun InputRichBlock.inputRichBlockAnchorOrThrow(): InputRichBlockAnchor = this as dev.inmo.tgbotapi.types.rich.InputRichBlockAnchor + +public inline fun InputRichBlock.ifInputRichBlockAnchor(block: (InputRichBlockAnchor) -> T): T? = inputRichBlockAnchorOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockListOrNull(): InputRichBlockList? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockList + +public inline fun InputRichBlock.inputRichBlockListOrThrow(): InputRichBlockList = this as dev.inmo.tgbotapi.types.rich.InputRichBlockList + +public inline fun InputRichBlock.ifInputRichBlockList(block: (InputRichBlockList) -> T): T? = inputRichBlockListOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockBlockQuotationOrNull(): InputRichBlockBlockQuotation? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockBlockQuotation + +public inline fun InputRichBlock.inputRichBlockBlockQuotationOrThrow(): InputRichBlockBlockQuotation = this as dev.inmo.tgbotapi.types.rich.InputRichBlockBlockQuotation + +public inline fun InputRichBlock.ifInputRichBlockBlockQuotation(block: (InputRichBlockBlockQuotation) -> T): T? = inputRichBlockBlockQuotationOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockPullQuotationOrNull(): InputRichBlockPullQuotation? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockPullQuotation + +public inline fun InputRichBlock.inputRichBlockPullQuotationOrThrow(): InputRichBlockPullQuotation = this as dev.inmo.tgbotapi.types.rich.InputRichBlockPullQuotation + +public inline fun InputRichBlock.ifInputRichBlockPullQuotation(block: (InputRichBlockPullQuotation) -> T): T? = inputRichBlockPullQuotationOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockCollageOrNull(): InputRichBlockCollage? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockCollage + +public inline fun InputRichBlock.inputRichBlockCollageOrThrow(): InputRichBlockCollage = this as dev.inmo.tgbotapi.types.rich.InputRichBlockCollage + +public inline fun InputRichBlock.ifInputRichBlockCollage(block: (InputRichBlockCollage) -> T): T? = inputRichBlockCollageOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockSlideshowOrNull(): InputRichBlockSlideshow? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockSlideshow + +public inline fun InputRichBlock.inputRichBlockSlideshowOrThrow(): InputRichBlockSlideshow = this as dev.inmo.tgbotapi.types.rich.InputRichBlockSlideshow + +public inline fun InputRichBlock.ifInputRichBlockSlideshow(block: (InputRichBlockSlideshow) -> T): T? = inputRichBlockSlideshowOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockTableOrNull(): InputRichBlockTable? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockTable + +public inline fun InputRichBlock.inputRichBlockTableOrThrow(): InputRichBlockTable = this as dev.inmo.tgbotapi.types.rich.InputRichBlockTable + +public inline fun InputRichBlock.ifInputRichBlockTable(block: (InputRichBlockTable) -> T): T? = inputRichBlockTableOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockDetailsOrNull(): InputRichBlockDetails? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockDetails + +public inline fun InputRichBlock.inputRichBlockDetailsOrThrow(): InputRichBlockDetails = this as dev.inmo.tgbotapi.types.rich.InputRichBlockDetails + +public inline fun InputRichBlock.ifInputRichBlockDetails(block: (InputRichBlockDetails) -> T): T? = inputRichBlockDetailsOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockMapOrNull(): InputRichBlockMap? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockMap + +public inline fun InputRichBlock.inputRichBlockMapOrThrow(): InputRichBlockMap = this as dev.inmo.tgbotapi.types.rich.InputRichBlockMap + +public inline fun InputRichBlock.ifInputRichBlockMap(block: (InputRichBlockMap) -> T): T? = inputRichBlockMapOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockAnimationOrNull(): InputRichBlockAnimation? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockAnimation + +public inline fun InputRichBlock.inputRichBlockAnimationOrThrow(): InputRichBlockAnimation = this as dev.inmo.tgbotapi.types.rich.InputRichBlockAnimation + +public inline fun InputRichBlock.ifInputRichBlockAnimation(block: (InputRichBlockAnimation) -> T): T? = inputRichBlockAnimationOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockAudioOrNull(): InputRichBlockAudio? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockAudio + +public inline fun InputRichBlock.inputRichBlockAudioOrThrow(): InputRichBlockAudio = this as dev.inmo.tgbotapi.types.rich.InputRichBlockAudio + +public inline fun InputRichBlock.ifInputRichBlockAudio(block: (InputRichBlockAudio) -> T): T? = inputRichBlockAudioOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockPhotoOrNull(): InputRichBlockPhoto? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockPhoto + +public inline fun InputRichBlock.inputRichBlockPhotoOrThrow(): InputRichBlockPhoto = this as dev.inmo.tgbotapi.types.rich.InputRichBlockPhoto + +public inline fun InputRichBlock.ifInputRichBlockPhoto(block: (InputRichBlockPhoto) -> T): T? = inputRichBlockPhotoOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockVideoOrNull(): InputRichBlockVideo? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockVideo + +public inline fun InputRichBlock.inputRichBlockVideoOrThrow(): InputRichBlockVideo = this as dev.inmo.tgbotapi.types.rich.InputRichBlockVideo + +public inline fun InputRichBlock.ifInputRichBlockVideo(block: (InputRichBlockVideo) -> T): T? = inputRichBlockVideoOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockVoiceNoteOrNull(): InputRichBlockVoiceNote? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockVoiceNote + +public inline fun InputRichBlock.inputRichBlockVoiceNoteOrThrow(): InputRichBlockVoiceNote = this as dev.inmo.tgbotapi.types.rich.InputRichBlockVoiceNote + +public inline fun InputRichBlock.ifInputRichBlockVoiceNote(block: (InputRichBlockVoiceNote) -> T): T? = inputRichBlockVoiceNoteOrNull() ?.let(block) + +public inline fun InputRichBlock.inputRichBlockThinkingOrNull(): InputRichBlockThinking? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockThinking + +public inline fun InputRichBlock.inputRichBlockThinkingOrThrow(): InputRichBlockThinking = this as dev.inmo.tgbotapi.types.rich.InputRichBlockThinking + +public inline fun InputRichBlock.ifInputRichBlockThinking(block: (InputRichBlockThinking) -> T): T? = inputRichBlockThinkingOrNull() ?.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