diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a789dbb1c..b24f8c29cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ **THIS UPDATE CONTAINS SUPPORT OF [TELEGRAM BOTS API 10.3](https://core.telegram.org/bots/api-changelog#august-24-2026)** * `Core`: + * (`Rich Messages`) Added rich-message button actions, rich-text/button-row entities, typed button styles/alignment, expandable block quotations, compact tables, document blocks, document media links and direct document uploads * (`Reply markup`) Added `DisabledButton`/`DisabledInlineKeyboardButton` support for disabled inline buttons * (`Reply markup`) Added `forceReply` support to `InlineKeyboardMarkup` and `ReplyKeyboardMarkup` * `Utils`: diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index bcb6d3c01a..0ec2fd243f 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -11526,6 +11526,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt { public static final field businessOpeningHoursField Ljava/lang/String; public static final field buttonField Ljava/lang/String; public static final field buttonTextField Ljava/lang/String; + public static final field buttonsField Ljava/lang/String; public static final field cacheTimeField Ljava/lang/String; public static final field callbackDataField Ljava/lang/String; public static final field callbackGameField Ljava/lang/String; @@ -11780,6 +11781,7 @@ public final class dev/inmo/tgbotapi/types/CommonKt { public static final field isCanceledField Ljava/lang/String; public static final field isCheckedField Ljava/lang/String; public static final field isClosedField Ljava/lang/String; + public static final field isCompactField Ljava/lang/String; public static final field isDarkField Ljava/lang/String; public static final field isDirectMessagesField Ljava/lang/String; public static final field isDisabledField Ljava/lang/String; @@ -25566,7 +25568,7 @@ public final class dev/inmo/tgbotapi/types/media/TelegramMediaAudioKt { public static synthetic fun toTelegramMediaAudio$default (Ldev/inmo/tgbotapi/types/files/AudioFile;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/media/TelegramMediaAudio; } -public final class dev/inmo/tgbotapi/types/media/TelegramMediaDocument : dev/inmo/tgbotapi/types/media/DocumentMediaGroupMemberTelegramMedia, dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/ThumbedTelegramMedia { +public final class dev/inmo/tgbotapi/types/media/TelegramMediaDocument : dev/inmo/tgbotapi/types/media/DocumentMediaGroupMemberTelegramMedia, dev/inmo/tgbotapi/types/media/InputPollMedia, dev/inmo/tgbotapi/types/media/RichMessageMemberTelegramMedia, dev/inmo/tgbotapi/types/media/TelegramFreeMedia, dev/inmo/tgbotapi/types/media/ThumbedTelegramMedia { public static final field Companion Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument$Companion; public static final field TYPE Ljava/lang/String; public final fun component1 ()Ldev/inmo/tgbotapi/requests/abstracts/InputFile; @@ -35370,6 +35372,38 @@ public final class dev/inmo/tgbotapi/types/rich/InputRichBlockBlockQuotation$Com public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockButtons : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockButtons$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;)V + public synthetic fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment; + public final fun copy (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockButtons; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockButtons;Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockButtons; + public fun equals (Ljava/lang/Object;)Z + public final fun getAlign ()Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment; + public final fun getButtons ()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/InputRichBlockButtons$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockButtons$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockButtons; + 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/InputRichBlockButtons;)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/InputRichBlockButtons$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; @@ -35461,6 +35495,71 @@ 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/InputRichBlockDocument : dev/inmo/tgbotapi/types/rich/InputRichBlockMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockDocument$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDocument; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockDocument;Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDocument; + public fun equals (Ljava/lang/Object;)Z + public fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun getDocument ()Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument; + 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/InputRichBlockDocument$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockDocument$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDocument; + 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/InputRichBlockDocument;)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/InputRichBlockDocument$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/InputRichBlockExpandableBlockQuotation : dev/inmo/tgbotapi/types/rich/InputRichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/InputRichBlockExpandableBlockQuotation$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/InputRichBlockExpandableBlockQuotation; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlockExpandableBlockQuotation;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockExpandableBlockQuotation; + 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/InputRichBlockExpandableBlockQuotation$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/InputRichBlockExpandableBlockQuotation$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockExpandableBlockQuotation; + 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/InputRichBlockExpandableBlockQuotation;)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/InputRichBlockExpandableBlockQuotation$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; @@ -35869,20 +35968,22 @@ public final class dev/inmo/tgbotapi/types/rich/InputRichBlockSlideshow$Companio 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 fun (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;)V + public synthetic fun (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;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 final fun component5 ()Ljava/lang/Boolean; + public final fun copy (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;)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;Ljava/lang/Boolean;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 isCompact ()Ljava/lang/Boolean; public final fun isStriped ()Ljava/lang/Boolean; public fun toString ()Ljava/lang/String; } @@ -36031,6 +36132,8 @@ public final class dev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder { 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 buttons (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;)V + public static synthetic fun buttons$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;ILjava/lang/Object;)V 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 @@ -36038,6 +36141,10 @@ public final class dev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder { 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 document (Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public static synthetic fun document$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/media/TelegramMediaDocument;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)V + public final fun expandableBlockQuotation (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun expandableBlockQuotation$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public final fun footer (Ljava/lang/String;)V public final fun footer (Lkotlin/jvm/functions/Function1;)V public final fun h1 (Ljava/lang/String;)V @@ -36068,8 +36175,8 @@ public final class dev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder { 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/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun table$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public final fun table (Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun table$default (Ldev/inmo/tgbotapi/types/rich/InputRichBlocksBuilder;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;Lkotlin/jvm/functions/Function1;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 @@ -36378,6 +36485,87 @@ public final class dev/inmo/tgbotapi/types/rich/RichBlockBlockQuotation$Companio public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public abstract interface class dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Companion; + public abstract fun getName ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Center : dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Center; + public fun equals (Ljava/lang/Object;)Z + public fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun serializer ()Lkotlinx/serialization/KSerializer; + public fun toString ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Left : dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Left; + public fun equals (Ljava/lang/Object;)Z + public fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun serializer ()Lkotlinx/serialization/KSerializer; + public fun toString ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Right : dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Right; + public fun equals (Ljava/lang/Object;)Z + public fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun serializer ()Lkotlinx/serialization/KSerializer; + public fun toString ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Serializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment$Serializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +} + +public final class dev/inmo/tgbotapi/types/rich/RichBlockButtons : dev/inmo/tgbotapi/types/rich/RichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichBlockButtons$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;)V + public synthetic fun (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/util/List; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment; + public final fun copy (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;)Ldev/inmo/tgbotapi/types/rich/RichBlockButtons; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichBlockButtons;Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichBlockButtons; + public fun equals (Ljava/lang/Object;)Z + public final fun getAlign ()Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment; + public final fun getButtons ()Ljava/util/List; + public fun getHtml ()Ljava/lang/String; + public fun getMarkdown ()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/RichBlockButtons$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichBlockButtons$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichBlockButtons; + 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/RichBlockButtons;)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/RichBlockButtons$Companion { + public final fun html (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;)Ljava/lang/String; + public final fun markdown (Ljava/util/List;Ldev/inmo/tgbotapi/types/rich/RichBlockButtonAlignment;)Ljava/lang/String; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/inmo/tgbotapi/types/rich/RichBlockCaption { public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichBlockCaption$Companion; public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;)V @@ -36511,6 +36699,79 @@ public final class dev/inmo/tgbotapi/types/rich/RichBlockDivider$Companion { public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class dev/inmo/tgbotapi/types/rich/RichBlockDocument : dev/inmo/tgbotapi/types/rich/RichBlockMedia { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichBlockDocument$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/files/DocumentFile;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/files/DocumentFile;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/files/DocumentFile; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun copy (Ldev/inmo/tgbotapi/types/files/DocumentFile;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ldev/inmo/tgbotapi/types/rich/RichBlockDocument; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichBlockDocument;Ldev/inmo/tgbotapi/types/files/DocumentFile;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichBlockDocument; + public fun equals (Ljava/lang/Object;)Z + public fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichBlockCaption; + public final fun getDocument ()Ldev/inmo/tgbotapi/types/files/DocumentFile; + public fun getHtml ()Ljava/lang/String; + public fun getMarkdown ()Ljava/lang/String; + public fun getMedia ()Ldev/inmo/tgbotapi/types/files/TelegramMediaFile; + 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/RichBlockDocument$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichBlockDocument$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichBlockDocument; + 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/RichBlockDocument;)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/RichBlockDocument$Companion { + public final fun html (Ldev/inmo/tgbotapi/types/files/DocumentFile;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ljava/lang/String; + public final fun markdown (Ldev/inmo/tgbotapi/types/files/DocumentFile;Ldev/inmo/tgbotapi/types/rich/RichBlockCaption;)Ljava/lang/String; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichBlockExpandableBlockQuotation : dev/inmo/tgbotapi/types/rich/RichBlock { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichBlockExpandableBlockQuotation$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/RichBlockExpandableBlockQuotation; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichBlockExpandableBlockQuotation;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichBlockExpandableBlockQuotation; + public fun equals (Ljava/lang/Object;)Z + public final fun getCredit ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun getHtml ()Ljava/lang/String; + public fun getMarkdown ()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/RichBlockExpandableBlockQuotation$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichBlockExpandableBlockQuotation$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichBlockExpandableBlockQuotation; + 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/RichBlockExpandableBlockQuotation;)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/RichBlockExpandableBlockQuotation$Companion { + public final fun html (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;)Ljava/lang/String; + public final fun markdown (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichText;)Ljava/lang/String; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/inmo/tgbotapi/types/rich/RichBlockFooter : dev/inmo/tgbotapi/types/rich/RichBlock { public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichBlockFooter$Companion; public static final field TYPE Ljava/lang/String; @@ -36942,14 +37203,15 @@ public final class dev/inmo/tgbotapi/types/rich/RichBlockSlideshow$Companion { public final class dev/inmo/tgbotapi/types/rich/RichBlockTable : dev/inmo/tgbotapi/types/rich/RichBlock { public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichBlockTable$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 fun (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;)V + public synthetic fun (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;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/RichBlockTable; - public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichBlockTable;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichBlockTable; + public final fun component5 ()Ljava/lang/Boolean; + public final fun copy (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/types/rich/RichBlockTable; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichBlockTable;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichBlockTable; public fun equals (Ljava/lang/Object;)Z public final fun getCaption ()Ldev/inmo/tgbotapi/types/rich/RichText; public final fun getCells ()Ljava/util/List; @@ -36958,6 +37220,7 @@ public final class dev/inmo/tgbotapi/types/rich/RichBlockTable : dev/inmo/tgbota public fun getType ()Ljava/lang/String; public fun hashCode ()I public final fun isBordered ()Ljava/lang/Boolean; + public final fun isCompact ()Ljava/lang/Boolean; public final fun isStriped ()Ljava/lang/Boolean; public fun toString ()Ljava/lang/String; } @@ -36975,6 +37238,7 @@ public final synthetic class dev/inmo/tgbotapi/types/rich/RichBlockTable$$serial public final class dev/inmo/tgbotapi/types/rich/RichBlockTable$Companion { public final fun html (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;)Ljava/lang/String; + public final fun html (Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ldev/inmo/tgbotapi/types/rich/RichText;)Ljava/lang/String; public final fun markdown (Ljava/util/List;)Ljava/lang/String; public final fun serializer ()Lkotlinx/serialization/KSerializer; } @@ -37279,6 +37543,366 @@ public final class dev/inmo/tgbotapi/types/rich/RichBlocksBuilder { public final fun unaryPlus (Ldev/inmo/tgbotapi/types/rich/RichBlock;)V } +public abstract interface class dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Companion; + public abstract fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public abstract fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;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 component3 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData; + public fun equals (Ljava/lang/Object;)Z + public final fun getCallbackData ()Ljava/lang/String; + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData; + 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/RichMessageButton$CallbackData;)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/RichMessageButton$CallbackData$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CopyTextButtonData;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CopyTextButtonData;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CopyTextButtonData; + public final fun component3 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CopyTextButtonData;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CopyTextButtonData;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText; + public fun equals (Ljava/lang/Object;)Z + public final fun getCopyText ()Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CopyTextButtonData; + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText; + 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/RichMessageButton$CopyText;)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/RichMessageButton$CopyText$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled; + public fun equals (Ljava/lang/Object;)Z + public final fun getDisabled ()Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/DisabledButton; + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled; + 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/RichMessageButton$Disabled;)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/RichMessageButton$Disabled$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/LoginURL;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/LoginURL;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()Ldev/inmo/tgbotapi/types/LoginURL; + public final fun component3 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/LoginURL;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/LoginURL;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl; + public fun equals (Ljava/lang/Object;)Z + public final fun getLoginUrl ()Ldev/inmo/tgbotapi/types/LoginURL; + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl; + 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/RichMessageButton$LoginUrl;)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/RichMessageButton$LoginUrl$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;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 component3 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery; + public fun equals (Ljava/lang/Object;)Z + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun getSwitchInlineQuery ()Ljava/lang/String; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery; + 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/RichMessageButton$SwitchInlineQuery;)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/RichMessageButton$SwitchInlineQuery$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChat;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChat;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChat; + public final fun component3 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChat;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChat;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat; + public fun equals (Ljava/lang/Object;)Z + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun getSwitchInlineQueryChosenChat ()Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChat; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat; + 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/RichMessageButton$SwitchInlineQueryChosenChat;)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/RichMessageButton$SwitchInlineQueryChosenChat$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;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 component3 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat; + public fun equals (Ljava/lang/Object;)Z + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun getSwitchInlineQueryCurrentChat ()Ljava/lang/String; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat; + 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/RichMessageButton$SwitchInlineQueryCurrentChat;)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/RichMessageButton$SwitchInlineQueryCurrentChat$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$Url : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Url$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;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 component3 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Url; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Url;Ldev/inmo/tgbotapi/types/rich/RichText;Ljava/lang/String;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Url; + public fun equals (Ljava/lang/Object;)Z + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun getUrl ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$Url$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Url$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Url; + 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/RichMessageButton$Url;)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/RichMessageButton$Url$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp : dev/inmo/tgbotapi/types/rich/RichMessageButton { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp$Companion; + public fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/webapps/WebAppInfo;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/webapps/WebAppInfo;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun component2 ()Ldev/inmo/tgbotapi/types/webapps/WebAppInfo; + public final fun component3 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/webapps/WebAppInfo;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp;Ldev/inmo/tgbotapi/types/rich/RichText;Ldev/inmo/tgbotapi/types/webapps/WebAppInfo;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp; + public fun equals (Ljava/lang/Object;)Z + public fun getStyle ()Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public fun getText ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun getWebApp ()Ldev/inmo/tgbotapi/types/webapps/WebAppInfo; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final synthetic class dev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp; + 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/RichMessageButton$WebApp;)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/RichMessageButton$WebApp$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButtonSerializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButtonSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +} + +public abstract interface class dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Companion; + public abstract fun getName ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Companion { + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Danger : dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Danger; + public fun equals (Ljava/lang/Object;)Z + public fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun serializer ()Lkotlinx/serialization/KSerializer; + public fun toString ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Link : dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Link; + public fun equals (Ljava/lang/Object;)Z + public fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun serializer ()Lkotlinx/serialization/KSerializer; + public fun toString ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Primary : dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Primary; + public fun equals (Ljava/lang/Object;)Z + public fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun serializer ()Lkotlinx/serialization/KSerializer; + public fun toString ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Serializer : kotlinx/serialization/KSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Serializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle; + public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +} + +public final class dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Success : dev/inmo/tgbotapi/types/rich/RichMessageButtonStyle { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichMessageButtonStyle$Success; + public fun equals (Ljava/lang/Object;)Z + public fun getName ()Ljava/lang/String; + public fun hashCode ()I + public final fun serializer ()Lkotlinx/serialization/KSerializer; + public fun toString ()Ljava/lang/String; +} + public abstract interface class dev/inmo/tgbotapi/types/rich/RichText { public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichText$Companion; public abstract fun getHtml ()Ljava/lang/String; @@ -37479,6 +38103,7 @@ public final class dev/inmo/tgbotapi/types/rich/RichTextBuilder { public final fun botCommand (Ljava/lang/String;Ljava/lang/String;)V public final fun botCommand (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public final fun build ()Ldev/inmo/tgbotapi/types/rich/RichText; + public final fun button (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)V public final fun cashtag (Ljava/lang/String;Ljava/lang/String;)V public final fun cashtag (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public final fun code (Ljava/lang/String;)V @@ -37521,6 +38146,40 @@ public final class dev/inmo/tgbotapi/types/rich/RichTextBuilder { public final fun url (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V } +public final class dev/inmo/tgbotapi/types/rich/RichTextButton : dev/inmo/tgbotapi/types/rich/RichTextEntity { + public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichTextButton$Companion; + public static final field TYPE Ljava/lang/String; + public fun (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)V + public final fun component1 ()Ldev/inmo/tgbotapi/types/rich/RichMessageButton; + public final fun copy (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichTextButton; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/types/rich/RichTextButton;Ldev/inmo/tgbotapi/types/rich/RichMessageButton;ILjava/lang/Object;)Ldev/inmo/tgbotapi/types/rich/RichTextButton; + public fun equals (Ljava/lang/Object;)Z + public final fun getButton ()Ldev/inmo/tgbotapi/types/rich/RichMessageButton; + public fun getHtml ()Ljava/lang/String; + public fun getMarkdown ()Ljava/lang/String; + public fun getRawText ()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/RichTextButton$$serializer : kotlinx/serialization/internal/GeneratedSerializer { + public static final field INSTANCE Ldev/inmo/tgbotapi/types/rich/RichTextButton$$serializer; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/types/rich/RichTextButton; + 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/RichTextButton;)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/RichTextButton$Companion { + public final fun html (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ljava/lang/String; + public final fun markdown (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ljava/lang/String; + public final fun serializer ()Lkotlinx/serialization/KSerializer; +} + public final class dev/inmo/tgbotapi/types/rich/RichTextCashtag : dev/inmo/tgbotapi/types/rich/RichTextEntity { public static final field Companion Ldev/inmo/tgbotapi/types/rich/RichTextCashtag$Companion; public static final field TYPE Ljava/lang/String; diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt index 3c2eee1258..778b9d5a20 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/Common.kt @@ -609,6 +609,8 @@ const val isCheckedField = "is_checked" const val isOpenField = "is_open" const val isBorderedField = "is_bordered" const val isStripedField = "is_striped" +const val isCompactField = "is_compact" +const val buttonsField = "buttons" const val certificateField = "certificate" const val questionField = "question" const val questionEntitiesField = "question_entities" diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaDocument.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaDocument.kt index 57db36b309..2f5a62b75a 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaDocument.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/media/TelegramMediaDocument.kt @@ -57,7 +57,7 @@ data class TelegramMediaDocument internal constructor( override val thumb: InputFile? = null, @SerialName(disableContentTypeDetectionField) val disableContentTypeDetection: Boolean? = null -) : TelegramFreeMedia, DocumentMediaGroupMemberTelegramMedia, ThumbedTelegramMedia, InputPollMedia { +) : TelegramFreeMedia, DocumentMediaGroupMemberTelegramMedia, RichMessageMemberTelegramMedia, ThumbedTelegramMedia, InputPollMedia { @EncodeDefault override val type: String = TYPE override val textSources: TextSourcesList? by lazy { 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 index 790ea5b1b9..344f2321dd 100644 --- 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 @@ -54,14 +54,17 @@ object InputRichBlockSerializer : JsonContentPolymorphicSerializer InputRichBlockAnchor.serializer() InputRichBlockList.TYPE -> InputRichBlockList.serializer() InputRichBlockBlockQuotation.TYPE -> InputRichBlockBlockQuotation.serializer() + InputRichBlockExpandableBlockQuotation.TYPE -> InputRichBlockExpandableBlockQuotation.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() + InputRichBlockButtons.TYPE -> InputRichBlockButtons.serializer() InputRichBlockAnimation.TYPE -> InputRichBlockAnimation.serializer() InputRichBlockAudio.TYPE -> InputRichBlockAudio.serializer() + InputRichBlockDocument.TYPE -> InputRichBlockDocument.serializer() InputRichBlockPhoto.TYPE -> InputRichBlockPhoto.serializer() InputRichBlockVideo.TYPE -> InputRichBlockVideo.serializer() InputRichBlockVoiceNote.TYPE -> InputRichBlockVoiceNote.serializer() 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 index 7f6e5269ac..b5343c2062 100644 --- 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 @@ -1,14 +1,18 @@ package dev.inmo.tgbotapi.types.rich import dev.inmo.tgbotapi.types.animationField +import dev.inmo.tgbotapi.types.alignField 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.buttonsField import dev.inmo.tgbotapi.types.creditField +import dev.inmo.tgbotapi.types.documentField import dev.inmo.tgbotapi.types.expressionField import dev.inmo.tgbotapi.types.heightField import dev.inmo.tgbotapi.types.isBorderedField +import dev.inmo.tgbotapi.types.isCompactField import dev.inmo.tgbotapi.types.isOpenField import dev.inmo.tgbotapi.types.isStripedField import dev.inmo.tgbotapi.types.itemsField @@ -18,6 +22,7 @@ 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.TelegramMediaDocument import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto import dev.inmo.tgbotapi.types.media.TelegramMediaVideo import dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote @@ -218,6 +223,23 @@ data class InputRichBlockBlockQuotation( } } +/** A block quotation that is collapsed by default. */ +@Serializable +data class InputRichBlockExpandableBlockQuotation( + @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 = "expandable_blockquote" + } +} + /** * A quotation with centered text. * @@ -295,7 +317,9 @@ data class InputRichBlockTable( @SerialName(isStripedField) val isStriped: Boolean? = null, @SerialName(captionField) - val caption: RichText? = null + val caption: RichText? = null, + @SerialName(isCompactField) + val isCompact: Boolean? = null ) : InputRichBlock { @EncodeDefault @SerialName(typeField) @@ -306,6 +330,27 @@ data class InputRichBlockTable( } } +/** A row of rich message buttons. */ +@Serializable +data class InputRichBlockButtons( + @SerialName(buttonsField) + val buttons: List, + @SerialName(alignField) + val align: RichBlockButtonAlignment? = null +) : InputRichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + init { + require(buttons.size in 1..8) { "InputRichBlockButtons requires from 1 to 8 buttons" } + } + + companion object { + const val TYPE = "buttons" + } +} + /** * An expandable block for details disclosure. * @@ -407,6 +452,25 @@ data class InputRichBlockAudio( } } +/** A block with a general file. */ +@Serializable +data class InputRichBlockDocument( + @SerialName(documentField) + val document: TelegramMediaDocument, + @SerialName(captionField) + override val caption: RichBlockCaption? = null +) : InputRichBlockMedia { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + override val media: TelegramMedia + get() = document + + companion object { + const val TYPE = "document" + } +} + /** * A block with a photo. * 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 index 3ecc57e838..e348da42d4 100644 --- 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 @@ -3,6 +3,7 @@ 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.TelegramMediaDocument import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto import dev.inmo.tgbotapi.types.media.TelegramMediaVideo import dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote @@ -148,6 +149,9 @@ class InputRichBlocksBuilder { fun blockQuotation(credit: RichText? = null, block: InputRichBlocksBuilder.() -> Unit) = add(InputRichBlockBlockQuotation(buildInputRichBlocks(block), credit)) + fun expandableBlockQuotation(credit: RichText? = null, block: RichTextBuilder.() -> Unit) = + add(InputRichBlockExpandableBlockQuotation(buildRichText(block), credit)) + fun pullQuotation(credit: RichText? = null, block: RichTextBuilder.() -> Unit) = add(InputRichBlockPullQuotation(buildRichText(block), credit)) @@ -166,6 +170,9 @@ class InputRichBlocksBuilder { fun audio(audio: TelegramMediaAudio, caption: RichBlockCaption? = null) = add(InputRichBlockAudio(audio, caption)) + fun document(document: TelegramMediaDocument, caption: RichBlockCaption? = null) = + add(InputRichBlockDocument(document, caption)) + fun voiceNote(voiceNote: TelegramMediaVoiceNote, caption: RichBlockCaption? = null) = add(InputRichBlockVoiceNote(voiceNote, caption)) @@ -179,8 +186,12 @@ class InputRichBlocksBuilder { isBordered: Boolean? = null, isStriped: Boolean? = null, caption: RichText? = null, + isCompact: Boolean? = null, block: InputRichBlockTableBuilder.() -> Unit - ) = add(InputRichBlockTable(InputRichBlockTableBuilder().apply(block).build(), isBordered, isStriped, caption)) + ) = add(InputRichBlockTable(InputRichBlockTableBuilder().apply(block).build(), isBordered, isStriped, caption, isCompact)) + + fun buttons(buttons: List, align: RichBlockButtonAlignment? = null) = + add(InputRichBlockButtons(buttons, align)) fun map( location: StaticLocation, 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 index 002467084c..f8196eb1b2 100644 --- 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 @@ -10,7 +10,7 @@ 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. + * `tg://video?id=`, `tg://document?id=` and `tg://audio?id=` links. * * @see InputRichMessageMedia */ diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlock.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlock.kt index 8b4af5b63d..8233375818 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlock.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlock.kt @@ -77,14 +77,17 @@ object RichBlockSerializer : JsonContentPolymorphicSerializer(RichBlo RichBlockAnchor.TYPE -> RichBlockAnchor.serializer() RichBlockList.TYPE -> RichBlockList.serializer() RichBlockBlockQuotation.TYPE -> RichBlockBlockQuotation.serializer() + RichBlockExpandableBlockQuotation.TYPE -> RichBlockExpandableBlockQuotation.serializer() RichBlockPullQuotation.TYPE -> RichBlockPullQuotation.serializer() RichBlockCollage.TYPE -> RichBlockCollage.serializer() RichBlockSlideshow.TYPE -> RichBlockSlideshow.serializer() RichBlockTable.TYPE -> RichBlockTable.serializer() RichBlockDetails.TYPE -> RichBlockDetails.serializer() RichBlockMap.TYPE -> RichBlockMap.serializer() + RichBlockButtons.TYPE -> RichBlockButtons.serializer() RichBlockAnimation.TYPE -> RichBlockAnimation.serializer() RichBlockAudio.TYPE -> RichBlockAudio.serializer() + RichBlockDocument.TYPE -> RichBlockDocument.serializer() RichBlockPhoto.TYPE -> RichBlockPhoto.serializer() RichBlockVideo.TYPE -> RichBlockVideo.serializer() RichBlockVoiceNote.TYPE -> RichBlockVoiceNote.serializer() diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlocks.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlocks.kt index 7e7bfd265c..b6424a208e 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlocks.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichBlocks.kt @@ -1,14 +1,18 @@ package dev.inmo.tgbotapi.types.rich import dev.inmo.tgbotapi.types.animationField +import dev.inmo.tgbotapi.types.alignField 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.buttonsField import dev.inmo.tgbotapi.types.creditField +import dev.inmo.tgbotapi.types.documentField import dev.inmo.tgbotapi.types.expressionField import dev.inmo.tgbotapi.types.files.AnimationFile import dev.inmo.tgbotapi.types.files.AudioFile +import dev.inmo.tgbotapi.types.files.DocumentFile import dev.inmo.tgbotapi.types.files.PhotoFile import dev.inmo.tgbotapi.types.files.TelegramMediaFile import dev.inmo.tgbotapi.types.files.VideoFile @@ -16,6 +20,7 @@ import dev.inmo.tgbotapi.types.files.VoiceFile import dev.inmo.tgbotapi.types.hasSpoilerField import dev.inmo.tgbotapi.types.heightField import dev.inmo.tgbotapi.types.isBorderedField +import dev.inmo.tgbotapi.types.isCompactField import dev.inmo.tgbotapi.types.isOpenField import dev.inmo.tgbotapi.types.isStripedField import dev.inmo.tgbotapi.types.itemsField @@ -299,6 +304,34 @@ data class RichBlockBlockQuotation( } } +/** + * A block quotation that is collapsed by default. + * + * @see RichBlockExpandableBlockQuotation + */ +@Serializable +data class RichBlockExpandableBlockQuotation( + @SerialName(textField) + val text: RichText, + @SerialName(creditField) + val credit: RichText? = null +) : RichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + override val markdown: String = markdown(text, credit) + override val html: String = html(text, credit) + + companion object { + const val TYPE = "expandable_blockquote" + fun markdown(text: RichText, credit: RichText?): String = + "
${text.markdown}${creditCiteMarkdown(credit)}
" + fun html(text: RichText, credit: RichText?): String = + "
${text.html}${creditCiteHtml(credit)}
" + } +} + /** * A quotation with centered text. * @@ -395,14 +428,16 @@ data class RichBlockTable( @SerialName(isStripedField) val isStriped: Boolean? = null, @SerialName(captionField) - val caption: RichText? = null + val caption: RichText? = null, + @SerialName(isCompactField) + val isCompact: Boolean? = null ) : RichBlock { @EncodeDefault @SerialName(typeField) override val type: String = TYPE override val markdown: String = markdown(cells) - override val html: String = html(cells, isBordered, isStriped, caption) + override val html: String = html(cells, isBordered, isStriped, isCompact, caption) companion object { const val TYPE = "table" @@ -424,10 +459,11 @@ data class RichBlockTable( return lines.joinToString(separator = "\n") } - fun html(cells: List>, isBordered: Boolean?, isStriped: Boolean?, caption: RichText?): String { + fun html(cells: List>, isBordered: Boolean?, isStriped: Boolean?, isCompact: Boolean?, caption: RichText?): String { val attributes = buildString { if (isBordered == true) append(" bordered") if (isStriped == true) append(" striped") + if (isCompact == true) append(" compact") } val captionPart = caption?.let { "${it.html}" } ?: "" val rows = cells.joinToString(separator = "") { row -> @@ -445,6 +481,32 @@ data class RichBlockTable( } return "$captionPart$rows" } + + fun html(cells: List>, isBordered: Boolean?, isStriped: Boolean?, caption: RichText?): String = + html(cells, isBordered, isStriped, null, caption) + } +} + +/** A row of rich message buttons. */ +@Serializable +data class RichBlockButtons( + @SerialName(buttonsField) + val buttons: List, + @SerialName(alignField) + val align: RichBlockButtonAlignment? = null +) : RichBlock { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + override val markdown: String = markdown(buttons, align) + override val html: String = html(buttons, align) + + companion object { + const val TYPE = "buttons" + fun markdown(buttons: List, align: RichBlockButtonAlignment?): String = + html(buttons, align) + fun html(buttons: List, align: RichBlockButtonAlignment?): String = + "${buttons.joinToString("") { it.toRichMarkup(it.text.html) }}" } } @@ -588,6 +650,31 @@ data class RichBlockAudio( } } +/** A block with a general file. */ +@Serializable +data class RichBlockDocument( + @SerialName(documentField) + val document: DocumentFile, + @SerialName(captionField) + override val caption: RichBlockCaption? = null +) : RichBlockMedia { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + override val media: TelegramMediaFile + get() = document + override val markdown: String = markdown(document, caption) + override val html: String = html(document, caption) + + companion object { + const val TYPE = "document" + fun markdown(document: DocumentFile, caption: RichBlockCaption?): String = + richMediaMarkdown("tg://document?id=${document.fileId.fileId}", caption) + fun html(document: DocumentFile, caption: RichBlockCaption?): String = + richMediaHtml("tg-document", "tg://document?id=${document.fileId.fileId}", spoiler = false, selfClosing = false, caption = caption) + } +} + /** * A block with a photo. * diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichMessageButton.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichMessageButton.kt new file mode 100644 index 0000000000..4fcaa6dce7 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichMessageButton.kt @@ -0,0 +1,291 @@ +package dev.inmo.tgbotapi.types.rich + +import dev.inmo.tgbotapi.types.LoginURL +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CopyTextButtonData +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.DisabledButton +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.SwitchInlineQueryChosenChat as SwitchInlineQueryChosenChatParameters +import dev.inmo.tgbotapi.types.webapps.WebAppInfo +import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.SerializationException +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.JsonDecoder +import kotlinx.serialization.json.JsonEncoder +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonObject + +/** + * A button in a rich message. Every subtype contains exactly one Bot API button action. [text] may contain only plain + * text, custom emoji and date-time entities. [LoginUrl] does not support [LoginURL.botUsername]. + * + * @see RichMessageButton + */ +@Serializable(RichMessageButtonSerializer::class) +@ClassCastsIncluded +sealed interface RichMessageButton { + val text: RichText + val style: RichMessageButtonStyle? + + @Serializable + data class Url( + @SerialName(textField) override val text: RichText, + @SerialName(urlField) val url: String, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { validateRichMessageButton(text, style) } + } + + @Serializable + data class CallbackData( + @SerialName(textField) override val text: RichText, + @SerialName(callbackDataField) val callbackData: String, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { validateRichMessageButton(text, style, allowLinkStyle = true) } + } + + @Serializable + data class WebApp( + @SerialName(textField) override val text: RichText, + @SerialName(webAppField) val webApp: WebAppInfo, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { validateRichMessageButton(text, style) } + } + + @Serializable + data class LoginUrl( + @SerialName(textField) override val text: RichText, + @SerialName(loginUrlField) val loginUrl: LoginURL, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { + validateRichMessageButton(text, style) + require(loginUrl.botUsername == null) { "Rich message login URL buttons do not support bot usernames" } + } + } + + @Serializable + data class SwitchInlineQuery( + @SerialName(textField) override val text: RichText, + @SerialName(switchInlineQueryField) val switchInlineQuery: String, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { validateRichMessageButton(text, style) } + } + + @Serializable + data class SwitchInlineQueryCurrentChat( + @SerialName(textField) override val text: RichText, + @SerialName(switchInlineQueryCurrentChatField) val switchInlineQueryCurrentChat: String, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { validateRichMessageButton(text, style) } + } + + @Serializable + data class SwitchInlineQueryChosenChat( + @SerialName(textField) override val text: RichText, + @SerialName(switchInlineQueryChosenChatField) val switchInlineQueryChosenChat: SwitchInlineQueryChosenChatParameters, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { validateRichMessageButton(text, style) } + } + + @Serializable + data class CopyText( + @SerialName(textField) override val text: RichText, + @SerialName(copyTextField) val copyText: CopyTextButtonData, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { validateRichMessageButton(text, style) } + } + + @Serializable + data class Disabled( + @SerialName(textField) override val text: RichText, + @SerialName(styleField) override val style: RichMessageButtonStyle? = null + ) : RichMessageButton { + init { validateRichMessageButton(text, style) } + @SerialName(disabledField) + @kotlinx.serialization.EncodeDefault + val disabled: DisabledButton = DisabledButton + } +} + +private fun validateRichMessageButton( + text: RichText, + style: RichMessageButtonStyle?, + allowLinkStyle: Boolean = false +) { + require(text.isValidRichMessageButtonText()) { + "Rich message button text can contain only plain text, custom emoji and date-time entities" + } + require(allowLinkStyle || style != RichMessageButtonStyle.Link) { + "The link style is allowed only for callback buttons" + } +} + +private fun RichText.isValidRichMessageButtonText(): Boolean = when (this) { + is RichTextPlain -> true + is RichTextCustomEmoji -> true + is RichTextDateTime -> text.isValidRichMessageButtonText() + is RichTextGroup -> parts.all { it.isValidRichMessageButtonText() } + else -> false +} + +/** Closed set of styles supported by [RichMessageButton]. */ +@Serializable(RichMessageButtonStyle.Serializer::class) +sealed interface RichMessageButtonStyle { + val name: String + + @Serializable(Serializer::class) + data object Danger : RichMessageButtonStyle { override val name = "danger" } + @Serializable(Serializer::class) + data object Success : RichMessageButtonStyle { override val name = "success" } + @Serializable(Serializer::class) + data object Primary : RichMessageButtonStyle { override val name = "primary" } + @Serializable(Serializer::class) + data object Link : RichMessageButtonStyle { override val name = "link" } + + object Serializer : KSerializer { + override val descriptor: SerialDescriptor = String.serializer().descriptor + override fun serialize(encoder: Encoder, value: RichMessageButtonStyle) = encoder.encodeString(value.name) + override fun deserialize(decoder: Decoder): RichMessageButtonStyle = when (val name = decoder.decodeString()) { + Danger.name -> Danger + Success.name -> Success + Primary.name -> Primary + Link.name -> Link + else -> throw SerializationException("Unknown RichMessageButtonStyle: $name") + } + } +} + +object RichMessageButtonSerializer : KSerializer { + override val descriptor: SerialDescriptor = JsonObject.serializer().descriptor + private val actionFields = setOf( + urlField, callbackDataField, webAppField, loginUrlField, switchInlineQueryField, + switchInlineQueryCurrentChatField, switchInlineQueryChosenChatField, copyTextField, disabledField + ) + + override fun deserialize(decoder: Decoder): RichMessageButton { + val input = decoder as? JsonDecoder ?: throw SerializationException("RichMessageButton requires JSON") + val element = input.decodeJsonElement().jsonObject + val actions = element.keys.intersect(actionFields) + if (actions.size != 1) throw SerializationException("RichMessageButton requires exactly one action, got $actions") + return when (actions.single()) { + urlField -> input.json.decodeFromJsonElement(RichMessageButton.Url.serializer(), element) + callbackDataField -> input.json.decodeFromJsonElement(RichMessageButton.CallbackData.serializer(), element) + webAppField -> input.json.decodeFromJsonElement(RichMessageButton.WebApp.serializer(), element) + loginUrlField -> input.json.decodeFromJsonElement(RichMessageButton.LoginUrl.serializer(), element) + switchInlineQueryField -> input.json.decodeFromJsonElement(RichMessageButton.SwitchInlineQuery.serializer(), element) + switchInlineQueryCurrentChatField -> input.json.decodeFromJsonElement(RichMessageButton.SwitchInlineQueryCurrentChat.serializer(), element) + switchInlineQueryChosenChatField -> input.json.decodeFromJsonElement(RichMessageButton.SwitchInlineQueryChosenChat.serializer(), element) + copyTextField -> input.json.decodeFromJsonElement(RichMessageButton.CopyText.serializer(), element) + disabledField -> input.json.decodeFromJsonElement(RichMessageButton.Disabled.serializer(), element) + else -> error("Unreachable RichMessageButton action") + } + } + + override fun serialize(encoder: Encoder, value: RichMessageButton) { + val output = encoder as? JsonEncoder ?: throw SerializationException("RichMessageButton requires JSON") + val element = when (value) { + is RichMessageButton.Url -> output.json.encodeToJsonElement(RichMessageButton.Url.serializer(), value) + is RichMessageButton.CallbackData -> output.json.encodeToJsonElement(RichMessageButton.CallbackData.serializer(), value) + is RichMessageButton.WebApp -> output.json.encodeToJsonElement(RichMessageButton.WebApp.serializer(), value) + is RichMessageButton.LoginUrl -> output.json.encodeToJsonElement(RichMessageButton.LoginUrl.serializer(), value) + is RichMessageButton.SwitchInlineQuery -> output.json.encodeToJsonElement(RichMessageButton.SwitchInlineQuery.serializer(), value) + is RichMessageButton.SwitchInlineQueryCurrentChat -> output.json.encodeToJsonElement(RichMessageButton.SwitchInlineQueryCurrentChat.serializer(), value) + is RichMessageButton.SwitchInlineQueryChosenChat -> output.json.encodeToJsonElement(RichMessageButton.SwitchInlineQueryChosenChat.serializer(), value) + is RichMessageButton.CopyText -> output.json.encodeToJsonElement(RichMessageButton.CopyText.serializer(), value) + is RichMessageButton.Disabled -> output.json.encodeToJsonElement(RichMessageButton.Disabled.serializer(), value) + } + output.encodeJsonElement(element) + } +} + +/** Horizontal alignment of [RichBlockButtons]. */ +@Serializable(RichBlockButtonAlignment.Serializer::class) +sealed interface RichBlockButtonAlignment { + val name: String + + @Serializable(Serializer::class) + data object Left : RichBlockButtonAlignment { override val name = "left" } + @Serializable(Serializer::class) + data object Center : RichBlockButtonAlignment { override val name = "center" } + @Serializable(Serializer::class) + data object Right : RichBlockButtonAlignment { override val name = "right" } + + object Serializer : KSerializer { + override val descriptor: SerialDescriptor = String.serializer().descriptor + override fun serialize(encoder: Encoder, value: RichBlockButtonAlignment) = encoder.encodeString(value.name) + override fun deserialize(decoder: Decoder): RichBlockButtonAlignment = when (val name = decoder.decodeString()) { + Left.name -> Left + Center.name -> Center + Right.name -> Right + else -> throw SerializationException("Unknown RichBlockButtonAlignment: $name") + } + } +} + +internal fun RichMessageButton.toRichMarkup(text: String): String { + val attributes = mutableListOf() + fun attribute(name: String, value: String) { + attributes.add("$name=\"${value.escapeRichMarkupAttribute()}\"") + } + when (this) { + is RichMessageButton.Url -> { + attribute("type", "url") + attribute("url", url) + } + is RichMessageButton.CallbackData -> { + attribute("type", "callback_data") + attribute("data", callbackData) + } + is RichMessageButton.WebApp -> { + attribute("type", "web_app") + attribute("url", webApp.url) + } + is RichMessageButton.LoginUrl -> { + attribute("type", "login_url") + attribute("url", loginUrl.url) + loginUrl.forwardText?.let { attribute("forward-text", it) } + loginUrl.botUsername?.let { attribute("bot-username", it) } + if (loginUrl.requestWriteAccess == true) attributes.add("request-write-access") + } + is RichMessageButton.SwitchInlineQuery -> { + attribute("type", "switch_inline_query") + attribute("query", switchInlineQuery) + } + is RichMessageButton.SwitchInlineQueryCurrentChat -> { + attribute("type", "switch_inline_query_current_chat") + attribute("query", switchInlineQueryCurrentChat) + } + is RichMessageButton.SwitchInlineQueryChosenChat -> { + attribute("type", "switch_inline_query_chosen_chat") + switchInlineQueryChosenChat.query?.let { attribute("query", it) } + if (switchInlineQueryChosenChat.allowUsers) attributes.add("allow-user-chats") + if (switchInlineQueryChosenChat.allowBots) attributes.add("allow-bot-chats") + if (switchInlineQueryChosenChat.allowGroups) attributes.add("allow-group-chats") + if (switchInlineQueryChosenChat.allowChannels) attributes.add("allow-channel-chats") + } + is RichMessageButton.CopyText -> { + attribute("type", "copy_text") + attribute("text", copyText.text) + } + is RichMessageButton.Disabled -> attribute("type", "disabled") + } + style?.let { attribute("style", it.name) } + return "$text" +} + +private fun String.escapeRichMarkupAttribute(): String = replace("&", "&") + .replace("\"", """) + .replace("<", "<") + .replace(">", ">") diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichText.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichText.kt index 800d8dba4e..62f920ec65 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichText.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichText.kt @@ -133,6 +133,7 @@ object RichTextEntitySerializer : JsonContentPolymorphicSerializer RichTextHashtag.serializer() RichTextCashtag.TYPE -> RichTextCashtag.serializer() RichTextBotCommand.TYPE -> RichTextBotCommand.serializer() + RichTextButton.TYPE -> RichTextButton.serializer() RichTextAnchor.TYPE -> RichTextAnchor.serializer() RichTextAnchorLink.TYPE -> RichTextAnchorLink.serializer() RichTextReference.TYPE -> RichTextReference.serializer() diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDsl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDsl.kt index 37383b6b1f..84ba9178fa 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDsl.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextDsl.kt @@ -98,6 +98,8 @@ class RichTextBuilder { fun botCommand(botCommand: String, block: RichTextBuilder.() -> Unit) = add(RichTextBotCommand(buildRichText(block), botCommand)) + fun button(button: RichMessageButton) = add(RichTextButton(button)) + fun anchor(name: String) = add(RichTextAnchor(name)) fun anchorLink(text: String, anchorName: String) = add(RichTextAnchorLink(RichTextPlain(text), anchorName)) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextEntities.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextEntities.kt index d31d779c5c..5681fc223e 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextEntities.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/rich/RichTextEntities.kt @@ -4,6 +4,7 @@ import dev.inmo.tgbotapi.types.CustomEmojiId import dev.inmo.tgbotapi.types.alternativeTextField import dev.inmo.tgbotapi.types.anchorNameField import dev.inmo.tgbotapi.types.bankCardNumberField +import dev.inmo.tgbotapi.types.buttonField import dev.inmo.tgbotapi.types.botCommandFullField import dev.inmo.tgbotapi.types.cashtagField import dev.inmo.tgbotapi.types.chat.User @@ -28,6 +29,31 @@ import kotlinx.serialization.EncodeDefault import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +/** + * A [RichMessageButton] embedded in [RichText]. + * + * @see RichTextButton + */ +@Serializable +data class RichTextButton( + @SerialName(buttonField) + val button: RichMessageButton +) : RichTextEntity { + @EncodeDefault + @SerialName(typeField) + override val type: String = TYPE + + override val rawText: String = button.text.rawText + override val markdown: String = markdown(button) + override val html: String = html(button) + + companion object { + const val TYPE = "button" + fun markdown(button: RichMessageButton): String = button.toRichMarkup(button.text.markdown) + fun html(button: RichMessageButton): String = button.toRichMarkup(button.text.html) + } +} + /** * A bold [RichTextEntity]. * diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/extensions/String.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/extensions/String.kt index bf164c609b..82cf72a8e4 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/extensions/String.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/extensions/String.kt @@ -48,14 +48,14 @@ fun String.escapeMarkdownV2PreAndCode() = escapeMarkdownV2(markdownV2PreAndCodeE fun String.escapeMarkdownV2Common() = escapeMarkdownV2(markdownV2CommonEscapes) fun String.toHtml(): String = replace( + "&", + "&" +).replace( "<", "<" ).replace( ">", ">" -).replace( - "&", - "&" ) fun String.splitForText() = chunked(textLength.last) diff --git a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/RichMessageSerializationTest.kt b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/RichMessageSerializationTest.kt index e8d9b25824..ac3df7373c 100644 --- a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/RichMessageSerializationTest.kt +++ b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/RichMessageSerializationTest.kt @@ -2,8 +2,12 @@ package dev.inmo.tgbotapi.types import dev.inmo.tgbotapi.types.rich.* import kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertFails +import kotlin.test.assertFailsWith import kotlin.test.assertTrue class RichMessageSerializationTest { @@ -68,4 +72,95 @@ class RichMessageSerializationTest { val decoded = json.decodeFromString(RichTextInfo.serializer(), encoded) assertEquals(message, decoded) } + + @Test + fun serializesRichMessageButtonsWithFlatActionShape() { + val button: RichMessageButton = RichMessageButton.CallbackData( + text = RichTextPlain("Press"), + callbackData = "callback", + style = RichMessageButtonStyle.Link + ) + val encoded = json.encodeToString(RichMessageButtonSerializer, button) + val element = json.parseToJsonElement(encoded).jsonObject + assertEquals("callback", element["callback_data"]?.jsonPrimitive?.content) + assertTrue("url" !in element) + assertEquals(button, json.decodeFromString(RichMessageButtonSerializer, encoded)) + assertEquals( + RichMessageButton.Disabled(RichTextPlain("Disabled")), + json.decodeFromString(RichMessageButtonSerializer, "{\"text\":\"Disabled\",\"disabled\":{}}") + ) + } + + @Test + fun rejectsRichMessageButtonsWithZeroOrMultipleActions() { + kotlin.test.assertFailsWith { + json.decodeFromString(RichMessageButtonSerializer, "{\"text\":\"none\"}") + } + kotlin.test.assertFailsWith { + json.decodeFromString(RichMessageButtonSerializer, "{\"text\":\"multiple\",\"url\":\"https://t.me\",\"disabled\":{}}") + } + } + + @Test + fun validatesRichMessageButtonTextContract() { + val plain = RichTextPlain("plain") + val customEmoji = RichTextCustomEmoji(CustomEmojiId("emoji"), "emoji") + val dateTime = RichTextDateTime(RichTextPlain("date"), TelegramDate(1L), "wDT") + val validTexts = listOf( + plain, + customEmoji, + dateTime, + RichTextGroup(listOf(plain, customEmoji, dateTime, RichTextGroup(listOf(plain)))) + ) + + validTexts.forEach { text -> + assertEquals(text, RichMessageButton.Disabled(text).text) + } + + val invalidTexts = listOf( + RichTextBold(plain), + RichTextUrl(plain, "https://example.org"), + RichTextGroup(listOf(plain, RichTextBold(plain))), + RichTextDateTime(RichTextBold(plain), TelegramDate(1L), "wDT") + ) + invalidTexts.forEach { text -> + assertFailsWith { RichMessageButton.Disabled(text) } + } + + assertFails { + json.decodeFromString( + RichMessageButtonSerializer, + "{\"text\":{\"type\":\"bold\",\"text\":\"invalid\"},\"disabled\":{}}" + ) + } + } + + @Test + fun rejectsBotUsernameInRichMessageLoginUrlButtons() { + assertFailsWith { + RichMessageButton.LoginUrl( + RichTextPlain("Login"), + LoginURL("https://example.org", botUsername = "example_bot") + ) + } + + assertFails { + json.decodeFromString( + RichMessageButtonSerializer, + "{\"text\":\"Login\",\"login_url\":{\"url\":\"https://example.org\",\"bot_username\":\"example_bot\"}}" + ) + } + } + + @Test + fun decodesNewRichTextAndBlockVariants() { + val text = json.decodeFromString(RichTextSerializer, "{\"type\":\"button\",\"button\":{\"text\":\"Press\",\"disabled\":{}}}") + assertEquals(RichTextButton(RichMessageButton.Disabled(RichTextPlain("Press"))), text) + val blocks = json.decodeFromString( + kotlinx.serialization.builtins.ListSerializer(RichBlockSerializer), + "[{\"type\":\"buttons\",\"buttons\":[{\"text\":\"Press\",\"disabled\":{}}],\"align\":\"center\"},{\"type\":\"expandable_blockquote\",\"text\":\"quote\"}]" + ) + assertEquals(RichBlockButtons(listOf(RichMessageButton.Disabled(RichTextPlain("Press"))), RichBlockButtonAlignment.Center), blocks[0]) + assertEquals(RichBlockExpandableBlockQuotation(RichTextPlain("quote")), blocks[1]) + } } 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 index 4bc42e44bc..8ac2302d85 100644 --- 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 @@ -2,6 +2,7 @@ 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.TelegramMediaDocument import kotlin.test.Test import kotlin.test.assertEquals @@ -125,4 +126,19 @@ class InputRichBlocksDslTest { blocks ) } + + @Test + fun buildsButtonsExpandableQuotationAndDocument() { + val document = TelegramMediaDocument(FileId("document_file_id")) + val blocks = buildInputRichBlocks { + expandableBlockQuotation { plain("quote") } + buttons(listOf(RichMessageButton.Disabled(RichTextPlain("Disabled"))), RichBlockButtonAlignment.Left) + document(document) + table(isCompact = true) { } + } + assertEquals(InputRichBlockExpandableBlockQuotation(RichTextPlain("quote")), blocks[0]) + assertEquals(InputRichBlockButtons(listOf(RichMessageButton.Disabled(RichTextPlain("Disabled"))), RichBlockButtonAlignment.Left), blocks[1]) + assertEquals(InputRichBlockDocument(document), blocks[2]) + assertEquals(true, (blocks[3] as InputRichBlockTable).isCompact) + } } 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 index 51111b3d04..20cd2a365c 100644 --- 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 @@ -1,7 +1,9 @@ package dev.inmo.tgbotapi.types.rich import dev.inmo.tgbotapi.requests.abstracts.FileId +import dev.inmo.tgbotapi.requests.abstracts.asMultipartFile import dev.inmo.tgbotapi.types.media.TelegramMediaPhoto +import dev.inmo.tgbotapi.types.media.TelegramMediaDocument import dev.inmo.tgbotapi.types.media.TelegramMediaVoiceNote import kotlinx.serialization.builtins.ListSerializer import kotlinx.serialization.SerializationException @@ -73,6 +75,29 @@ class InputRichMessageSerializationTest { assertEquals(true, cell["is_header"]?.jsonPrimitive?.boolean) } + @Test + fun encodesCompactTablesButtonsAndDocuments() { + val document = TelegramMediaDocument("content".encodeToByteArray().asMultipartFile("document.txt")) + val message = InputRichMessageBlocks( + blocks = listOf( + InputRichBlockTable(emptyList(), isCompact = true), + InputRichBlockButtons(listOf(RichMessageButton.Disabled(RichTextPlain("Disabled")))), + InputRichBlockDocument(document) + ) + ) + val blocks = json.encodeToJsonElement(InputRichMessage.serializer(), message).jsonObject["blocks"]!!.jsonArray + assertEquals(true, blocks[0].jsonObject["is_compact"]?.jsonPrimitive?.boolean) + assertEquals("buttons", blocks[1].jsonObject["type"]?.jsonPrimitive?.content) + assertEquals("document", blocks[2].jsonObject["type"]?.jsonPrimitive?.content) + assertEquals(document.file, message.multipartFiles.values.single()) + } + + @Test + fun limitsInputButtonRowsToOneThroughEightButtons() { + assertFailsWith { InputRichBlockButtons(emptyList()) } + assertFailsWith { InputRichBlockButtons(List(9) { RichMessageButton.Disabled(RichTextPlain("x")) }) } + } + @Test fun serializesTableCellVariantsWithSharedFlatShape() { val header: RichBlockTableCell = RichBlockTableCell.Header(RichTextPlain("h"), align = RichBlockTableCellAlign.Left, valign = RichBlockTableCellVAlign.Top) @@ -170,6 +195,17 @@ class InputRichMessageSerializationTest { assertEquals("photo_file_id", mediaJson["media"]!!.jsonObject["media"]?.jsonPrimitive?.content) } + @Test + fun encodesDocumentMediaReferences() { + val message = InputRichMessageMarkdown( + markdown = "See [document](tg://document?id=doc)", + media = listOf(InputRichMessageMedia("doc", TelegramMediaDocument(FileId("document_file_id")))) + ) + val mediaJson = json.encodeToJsonElement(InputRichMessage.serializer(), message).jsonObject["media"]!!.jsonArray.single().jsonObject + assertEquals("document", mediaJson["media"]!!.jsonObject["type"]?.jsonPrimitive?.content) + assertEquals("document_file_id", mediaJson["media"]!!.jsonObject["media"]?.jsonPrimitive?.content) + } + @Test fun roundTripsListOfInputRichBlocks() { val blocks: List = listOf( diff --git a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichBlockFormattingTest.kt b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichBlockFormattingTest.kt index a73d36d289..e0b2b8b4cf 100644 --- a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichBlockFormattingTest.kt +++ b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichBlockFormattingTest.kt @@ -96,6 +96,15 @@ class RichBlockFormattingTest { assertEquals("

q

", block.html) } + @Test + fun expandableBlockQuotationAndButtons() { + val quotation = RichBlockExpandableBlockQuotation(RichTextPlain("q"), RichTextPlain("credit")) + assertEquals("
qcredit
", quotation.markdown) + assertEquals("
qcredit
", quotation.html) + val buttons = RichBlockButtons(listOf(RichMessageButton.Disabled(RichTextPlain("Disabled"))), RichBlockButtonAlignment.Right) + assertEquals("Disabled", buttons.html) + } + @Test fun details() { val block = RichBlockDetails(RichTextPlain("sum"), listOf(RichBlockParagraph(RichTextPlain("body"))), isOpen = true) diff --git a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextFormattingTest.kt b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextFormattingTest.kt index 77ddc4fe0e..e48217ca03 100644 --- a/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextFormattingTest.kt +++ b/tgbotapi.core/src/commonTest/kotlin/dev/inmo/tgbotapi/types/rich/RichTextFormattingTest.kt @@ -2,9 +2,13 @@ package dev.inmo.tgbotapi.types.rich import dev.inmo.tgbotapi.types.ChatId import dev.inmo.tgbotapi.types.CustomEmojiId +import dev.inmo.tgbotapi.types.LoginURL import dev.inmo.tgbotapi.types.RawChatId import dev.inmo.tgbotapi.types.TelegramDate +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.CopyTextButtonData +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardButtons.SwitchInlineQueryChosenChat as SwitchInlineQueryChosenChatParameters import dev.inmo.tgbotapi.types.chat.CommonUser +import dev.inmo.tgbotapi.types.webapps.WebAppInfo import kotlin.test.Test import kotlin.test.assertEquals @@ -206,7 +210,49 @@ class RichTextFormattingTest { @Test fun plainHtmlEscapesAngleBrackets() { - assertEquals("a&lt;b", RichTextPlain("a"))) + assertEquals("<&>", button.html) + } + + @Test + fun buttonAttributesEscapeRichMarkupMetacharacters() { + val rawAttribute = "a&\"<>" + val escapedAttribute = "a&"<>" + val text = RichTextPlain("Button") + val buttonsWithExpectedAttributes = listOf( + RichMessageButton.Url(text, rawAttribute) to + "type=\"url\" url=\"$escapedAttribute\"", + RichMessageButton.CallbackData(text, rawAttribute) to + "type=\"callback_data\" data=\"$escapedAttribute\"", + RichMessageButton.WebApp(text, WebAppInfo(rawAttribute)) to + "type=\"web_app\" url=\"$escapedAttribute\"", + RichMessageButton.LoginUrl( + text, + LoginURL(rawAttribute, rawAttribute, requestWriteAccess = true) + ) to "type=\"login_url\" url=\"$escapedAttribute\" forward-text=\"$escapedAttribute\" " + + "request-write-access", + RichMessageButton.SwitchInlineQuery(text, rawAttribute) to + "type=\"switch_inline_query\" query=\"$escapedAttribute\"", + RichMessageButton.SwitchInlineQueryCurrentChat(text, rawAttribute) to + "type=\"switch_inline_query_current_chat\" query=\"$escapedAttribute\"", + RichMessageButton.SwitchInlineQueryChosenChat( + text, + SwitchInlineQueryChosenChatParameters(rawAttribute, allowUsers = true) + ) to "type=\"switch_inline_query_chosen_chat\" query=\"$escapedAttribute\" allow-user-chats", + RichMessageButton.CopyText(text, CopyTextButtonData(rawAttribute)) to + "type=\"copy_text\" text=\"$escapedAttribute\"" + ) + + buttonsWithExpectedAttributes.forEach { (button, expectedAttributes) -> + val expectedMarkup = "Button" + assertEquals(expectedMarkup, RichTextButton(button).html) + assertEquals(expectedMarkup, RichTextButton(button).markdown) + } } @Test diff --git a/tgbotapi.utils/api/tgbotapi.utils.api b/tgbotapi.utils/api/tgbotapi.utils.api index 9171611f4a..a5ea31c821 100644 --- a/tgbotapi.utils/api/tgbotapi.utils.api +++ b/tgbotapi.utils/api/tgbotapi.utils.api @@ -1165,6 +1165,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun byUserOrThrow (Ldev/inmo/tgbotapi/types/message/ForwardInfo;)Ldev/inmo/tgbotapi/types/message/ForwardInfo$ByUser; public static final fun callbackDataInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CallbackDataInlineKeyboardButton; public static final fun callbackDataInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CallbackDataInlineKeyboardButton; + public static final fun callbackDataOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData; + public static final fun callbackDataOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CallbackData; public static final fun callbackGameInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CallbackGameInlineKeyboardButton; public static final fun callbackGameInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CallbackGameInlineKeyboardButton; public static final fun callbackQueryOrNull (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/queries/callback/CallbackQuery; @@ -1335,6 +1337,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun contentMessageOrThrow (Ldev/inmo/tgbotapi/types/message/abstracts/Message;)Ldev/inmo/tgbotapi/types/message/abstracts/ContentMessage; public static final fun copyTextButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CopyTextButton; public static final fun copyTextButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/CopyTextButton; + public static final fun copyTextOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText; + public static final fun copyTextOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$CopyText; public static final fun coveredMediaFileOrNull (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;)Ldev/inmo/tgbotapi/types/files/CoveredMediaFile; public static final fun coveredMediaFileOrThrow (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;)Ldev/inmo/tgbotapi/types/files/CoveredMediaFile; public static final fun coveredTelegramMediaOrNull (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/CoveredTelegramMedia; @@ -1388,7 +1392,9 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun disabledInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/DisabledInlineKeyboardButton; public static final fun disabledInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/DisabledInlineKeyboardButton; public static final fun disabledOrNull (Ldev/inmo/tgbotapi/types/business_connection/BusinessConnection;)Ldev/inmo/tgbotapi/types/business_connection/BusinessConnection$Disabled; + public static final fun disabledOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled; public static final fun disabledOrThrow (Ldev/inmo/tgbotapi/types/business_connection/BusinessConnection;)Ldev/inmo/tgbotapi/types/business_connection/BusinessConnection$Disabled; + public static final fun disabledOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Disabled; public static final fun documentContentOrNull (Ldev/inmo/tgbotapi/types/message/content/ResendableContent;)Ldev/inmo/tgbotapi/types/message/content/DocumentContent; public static final fun documentContentOrThrow (Ldev/inmo/tgbotapi/types/message/content/ResendableContent;)Ldev/inmo/tgbotapi/types/message/content/DocumentContent; public static final fun documentFileOrNull (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;)Ldev/inmo/tgbotapi/types/files/DocumentFile; @@ -1660,6 +1666,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifByUser (Ldev/inmo/tgbotapi/types/boosts/ChatBoostSource;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifByUser (Ldev/inmo/tgbotapi/types/chat/ChatMessageReactionUpdated;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifByUser (Ldev/inmo/tgbotapi/types/message/ForwardInfo;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifCallbackData (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifCallbackDataInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifCallbackGameInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifCallbackQuery (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -1745,6 +1752,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifConnectedFromChannelGroupContentMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifContactContent (Ldev/inmo/tgbotapi/types/message/content/ResendableContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifContentMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifCopyText (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifCopyTextButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifCoveredMediaFile (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifCoveredTelegramMedia (Ldev/inmo/tgbotapi/types/media/TelegramMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -1772,6 +1780,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifDirectMessagesConfigurationChangedPaid (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifDirectMessagesTopic (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifDisabled (Ldev/inmo/tgbotapi/types/business_connection/BusinessConnection;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifDisabled (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifDisabledInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifDocumentContent (Ldev/inmo/tgbotapi/types/message/content/ResendableContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifDocumentFile (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -1931,9 +1940,12 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { 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 ifInputRichBlockButtons (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 ifInputRichBlockDocument (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifInputRichBlockExpandableBlockQuotation (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; @@ -1971,6 +1983,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifLocationContent (Ldev/inmo/tgbotapi/types/message/content/ResendableContent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifLocationInlineQuery (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifLoginURLInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifLoginUrl (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifManagedBotCreated (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifManagedBotUpdate (Ldev/inmo/tgbotapi/types/update/abstracts/Update;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifMask (Ldev/inmo/tgbotapi/requests/stickers/InputSticker;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -2131,9 +2144,12 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifRichBlockAnimation (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichBlockAudio (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichBlockBlockQuotation (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifRichBlockButtons (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichBlockCollage (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichBlockDetails (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichBlockDivider (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifRichBlockDocument (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifRichBlockExpandableBlockQuotation (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichBlockFooter (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichBlockList (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichBlockMap (Ldev/inmo/tgbotapi/types/rich/RichBlock;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -2156,6 +2172,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifRichTextBankCardNumber (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichTextBold (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichTextBotCommand (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifRichTextButton (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichTextCashtag (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichTextCode (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifRichTextCustomEmoji (Ldev/inmo/tgbotapi/types/rich/RichText;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -2227,7 +2244,10 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifSupergroupEventMessage (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSupergroupEventMessage (Ldev/inmo/tgbotapi/types/message/abstracts/Message;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSupergroupForumChat (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifSwitchInlineQuery (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifSwitchInlineQueryChosenChat (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSwitchInlineQueryChosenChatInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifSwitchInlineQueryCurrentChat (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSwitchInlineQueryCurrentChatInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifSwitchInlineQueryInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifTelegramAPI (Ldev/inmo/tgbotapi/types/payments/stars/TransactionPartner;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -2307,6 +2327,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifUploadVideoAction (Ldev/inmo/tgbotapi/types/actions/BotAction;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifUploadVideoNoteAction (Ldev/inmo/tgbotapi/types/actions/BotAction;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifUploadVoiceAction (Ldev/inmo/tgbotapi/types/actions/BotAction;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifUrl (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifUrlInlineQueryResult (Ldev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/InlineQueryResult;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifUsefulAsPaidMediaFile (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifUser (Ldev/inmo/tgbotapi/types/chat/Chat;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -2338,6 +2359,7 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun ifVoiceFile (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifWallpaper (Ldev/inmo/tgbotapi/types/BackgroundType;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifWebApp (Ldev/inmo/tgbotapi/requests/answers/InlineQueryResultsButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static final fun ifWebApp (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifWebAppData (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifWebAppInlineKeyboardButton (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static final fun ifWithCustomStartTelegramMedia (Ldev/inmo/tgbotapi/types/media/TelegramMedia;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -2448,12 +2470,18 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { 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 inputRichBlockButtonsOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockButtons; + public static final fun inputRichBlockButtonsOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockButtons; 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 inputRichBlockDocumentOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDocument; + public static final fun inputRichBlockDocumentOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockDocument; + public static final fun inputRichBlockExpandableBlockQuotationOrNull (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockExpandableBlockQuotation; + public static final fun inputRichBlockExpandableBlockQuotationOrThrow (Ldev/inmo/tgbotapi/types/rich/InputRichBlock;)Ldev/inmo/tgbotapi/types/rich/InputRichBlockExpandableBlockQuotation; 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; @@ -2528,6 +2556,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun locationInlineQueryOrThrow (Ldev/inmo/tgbotapi/abstracts/OptionallyWithUser;)Ldev/inmo/tgbotapi/types/InlineQueries/query/LocationInlineQuery; public static final fun loginURLInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/LoginURLInlineKeyboardButton; public static final fun loginURLInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/LoginURLInlineKeyboardButton; + public static final fun loginUrlOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl; + public static final fun loginUrlOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$LoginUrl; public static final fun managedBotCreatedOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/managed_bots/ManagedBotCreated; public static final fun managedBotCreatedOrThrow (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/managed_bots/ManagedBotCreated; public static final fun managedBotUpdateOrNull (Ldev/inmo/tgbotapi/types/update/abstracts/Update;)Ldev/inmo/tgbotapi/types/update/ManagedBotUpdate; @@ -2848,12 +2878,18 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun richBlockAudioOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockAudio; public static final fun richBlockBlockQuotationOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockBlockQuotation; public static final fun richBlockBlockQuotationOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockBlockQuotation; + public static final fun richBlockButtonsOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockButtons; + public static final fun richBlockButtonsOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockButtons; public static final fun richBlockCollageOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockCollage; public static final fun richBlockCollageOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockCollage; public static final fun richBlockDetailsOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDetails; public static final fun richBlockDetailsOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDetails; public static final fun richBlockDividerOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDivider; public static final fun richBlockDividerOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDivider; + public static final fun richBlockDocumentOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDocument; + public static final fun richBlockDocumentOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockDocument; + public static final fun richBlockExpandableBlockQuotationOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockExpandableBlockQuotation; + public static final fun richBlockExpandableBlockQuotationOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockExpandableBlockQuotation; public static final fun richBlockFooterOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockFooter; public static final fun richBlockFooterOrThrow (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockFooter; public static final fun richBlockListOrNull (Ldev/inmo/tgbotapi/types/rich/RichBlock;)Ldev/inmo/tgbotapi/types/rich/RichBlockList; @@ -2898,6 +2934,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun richTextBoldOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBold; public static final fun richTextBotCommandOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBotCommand; public static final fun richTextBotCommandOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextBotCommand; + public static final fun richTextButtonOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextButton; + public static final fun richTextButtonOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextButton; public static final fun richTextCashtagOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCashtag; public static final fun richTextCashtagOrThrow (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCashtag; public static final fun richTextCodeOrNull (Ldev/inmo/tgbotapi/types/rich/RichText;)Ldev/inmo/tgbotapi/types/rich/RichTextCode; @@ -3042,10 +3080,16 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun supergroupForumChatOrThrow (Ldev/inmo/tgbotapi/types/chat/Chat;)Ldev/inmo/tgbotapi/types/chat/SupergroupForumChat; public static final fun switchInlineQueryChosenChatInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChatInlineKeyboardButton; public static final fun switchInlineQueryChosenChatInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryChosenChatInlineKeyboardButton; + public static final fun switchInlineQueryChosenChatOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat; + public static final fun switchInlineQueryChosenChatOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryChosenChat; public static final fun switchInlineQueryCurrentChatInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryCurrentChatInlineKeyboardButton; public static final fun switchInlineQueryCurrentChatInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryCurrentChatInlineKeyboardButton; + public static final fun switchInlineQueryCurrentChatOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat; + public static final fun switchInlineQueryCurrentChatOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQueryCurrentChat; public static final fun switchInlineQueryInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryInlineKeyboardButton; public static final fun switchInlineQueryInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/SwitchInlineQueryInlineKeyboardButton; + public static final fun switchInlineQueryOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery; + public static final fun switchInlineQueryOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$SwitchInlineQuery; public static final fun telegramAPIOrNull (Ldev/inmo/tgbotapi/types/payments/stars/TransactionPartner;)Ldev/inmo/tgbotapi/types/payments/stars/TransactionPartner$TelegramAPI; public static final fun telegramAPIOrThrow (Ldev/inmo/tgbotapi/types/payments/stars/TransactionPartner;)Ldev/inmo/tgbotapi/types/payments/stars/TransactionPartner$TelegramAPI; public static final fun telegramFreeMediaOrNull (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/TelegramFreeMedia; @@ -3202,6 +3246,8 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun uploadVoiceActionOrThrow (Ldev/inmo/tgbotapi/types/actions/BotAction;)Ldev/inmo/tgbotapi/types/actions/UploadVoiceAction; public static final fun urlInlineQueryResultOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/InlineQueryResult;)Ldev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/UrlInlineQueryResult; public static final fun urlInlineQueryResultOrThrow (Ldev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/InlineQueryResult;)Ldev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/UrlInlineQueryResult; + public static final fun urlOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Url; + public static final fun urlOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$Url; public static final fun usefulAsPaidMediaFileOrNull (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;)Ldev/inmo/tgbotapi/types/files/UsefulAsPaidMediaFile; public static final fun usefulAsPaidMediaFileOrThrow (Ldev/inmo/tgbotapi/types/media/BaseTelegramMediaFile;)Ldev/inmo/tgbotapi/types/files/UsefulAsPaidMediaFile; public static final fun userLoggedInOrNull (Ldev/inmo/tgbotapi/types/message/ChatEvents/abstracts/ChatEvent;)Ldev/inmo/tgbotapi/types/message/ChatEvents/UserLoggedIn; @@ -3265,7 +3311,9 @@ public final class dev/inmo/tgbotapi/extensions/utils/ClassCastsNewKt { public static final fun webAppInlineKeyboardButtonOrNull (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/WebAppInlineKeyboardButton; public static final fun webAppInlineKeyboardButtonOrThrow (Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/InlineKeyboardButton;)Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardButtons/WebAppInlineKeyboardButton; public static final fun webAppOrNull (Ldev/inmo/tgbotapi/requests/answers/InlineQueryResultsButton;)Ldev/inmo/tgbotapi/requests/answers/InlineQueryResultsButton$WebApp; + public static final fun webAppOrNull (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp; public static final fun webAppOrThrow (Ldev/inmo/tgbotapi/requests/answers/InlineQueryResultsButton;)Ldev/inmo/tgbotapi/requests/answers/InlineQueryResultsButton$WebApp; + public static final fun webAppOrThrow (Ldev/inmo/tgbotapi/types/rich/RichMessageButton;)Ldev/inmo/tgbotapi/types/rich/RichMessageButton$WebApp; public static final fun withCustomStartTelegramMediaOrNull (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/WithCustomStartTelegramMedia; public static final fun withCustomStartTelegramMediaOrThrow (Ldev/inmo/tgbotapi/types/media/TelegramMedia;)Ldev/inmo/tgbotapi/types/media/WithCustomStartTelegramMedia; public static final fun withCustomizableCaptionInlineQueryResultOrNull (Ldev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/InlineQueryResult;)Ldev/inmo/tgbotapi/types/InlineQueries/InlineQueryResult/abstracts/WithCustomizableCaptionInlineQueryResult; 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 c2a56ac254..895c0b09bb 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 @@ -563,9 +563,12 @@ 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.InputRichBlockButtons 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.InputRichBlockDocument +import dev.inmo.tgbotapi.types.rich.InputRichBlockExpandableBlockQuotation import dev.inmo.tgbotapi.types.rich.InputRichBlockFooter import dev.inmo.tgbotapi.types.rich.InputRichBlockList import dev.inmo.tgbotapi.types.rich.InputRichBlockMap @@ -586,9 +589,12 @@ import dev.inmo.tgbotapi.types.rich.RichBlockAnchor import dev.inmo.tgbotapi.types.rich.RichBlockAnimation import dev.inmo.tgbotapi.types.rich.RichBlockAudio import dev.inmo.tgbotapi.types.rich.RichBlockBlockQuotation +import dev.inmo.tgbotapi.types.rich.RichBlockButtons import dev.inmo.tgbotapi.types.rich.RichBlockCollage import dev.inmo.tgbotapi.types.rich.RichBlockDetails import dev.inmo.tgbotapi.types.rich.RichBlockDivider +import dev.inmo.tgbotapi.types.rich.RichBlockDocument +import dev.inmo.tgbotapi.types.rich.RichBlockExpandableBlockQuotation import dev.inmo.tgbotapi.types.rich.RichBlockFooter import dev.inmo.tgbotapi.types.rich.RichBlockList import dev.inmo.tgbotapi.types.rich.RichBlockMap @@ -604,12 +610,14 @@ import dev.inmo.tgbotapi.types.rich.RichBlockTable import dev.inmo.tgbotapi.types.rich.RichBlockThinking import dev.inmo.tgbotapi.types.rich.RichBlockVideo import dev.inmo.tgbotapi.types.rich.RichBlockVoiceNote +import dev.inmo.tgbotapi.types.rich.RichMessageButton import dev.inmo.tgbotapi.types.rich.RichText import dev.inmo.tgbotapi.types.rich.RichTextAnchor import dev.inmo.tgbotapi.types.rich.RichTextAnchorLink import dev.inmo.tgbotapi.types.rich.RichTextBankCardNumber import dev.inmo.tgbotapi.types.rich.RichTextBold import dev.inmo.tgbotapi.types.rich.RichTextBotCommand +import dev.inmo.tgbotapi.types.rich.RichTextButton import dev.inmo.tgbotapi.types.rich.RichTextCashtag import dev.inmo.tgbotapi.types.rich.RichTextCode import dev.inmo.tgbotapi.types.rich.RichTextCustomEmoji @@ -3404,6 +3412,60 @@ public inline fun InputMessageContent.inputRichMessageContentOrThrow(): InputRic public inline fun InputMessageContent.ifInputRichMessageContent(block: (InputRichMessageContent) -> T): T? = inputRichMessageContentOrNull() ?.let(block) +public inline fun RichMessageButton.urlOrNull(): RichMessageButton.Url? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.Url + +public inline fun RichMessageButton.urlOrThrow(): RichMessageButton.Url = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.Url + +public inline fun RichMessageButton.ifUrl(block: (RichMessageButton.Url) -> T): T? = urlOrNull() ?.let(block) + +public inline fun RichMessageButton.callbackDataOrNull(): RichMessageButton.CallbackData? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.CallbackData + +public inline fun RichMessageButton.callbackDataOrThrow(): RichMessageButton.CallbackData = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.CallbackData + +public inline fun RichMessageButton.ifCallbackData(block: (RichMessageButton.CallbackData) -> T): T? = callbackDataOrNull() ?.let(block) + +public inline fun RichMessageButton.webAppOrNull(): RichMessageButton.WebApp? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.WebApp + +public inline fun RichMessageButton.webAppOrThrow(): RichMessageButton.WebApp = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.WebApp + +public inline fun RichMessageButton.ifWebApp(block: (RichMessageButton.WebApp) -> T): T? = webAppOrNull() ?.let(block) + +public inline fun RichMessageButton.loginUrlOrNull(): RichMessageButton.LoginUrl? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.LoginUrl + +public inline fun RichMessageButton.loginUrlOrThrow(): RichMessageButton.LoginUrl = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.LoginUrl + +public inline fun RichMessageButton.ifLoginUrl(block: (RichMessageButton.LoginUrl) -> T): T? = loginUrlOrNull() ?.let(block) + +public inline fun RichMessageButton.switchInlineQueryOrNull(): RichMessageButton.SwitchInlineQuery? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.SwitchInlineQuery + +public inline fun RichMessageButton.switchInlineQueryOrThrow(): RichMessageButton.SwitchInlineQuery = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.SwitchInlineQuery + +public inline fun RichMessageButton.ifSwitchInlineQuery(block: (RichMessageButton.SwitchInlineQuery) -> T): T? = switchInlineQueryOrNull() ?.let(block) + +public inline fun RichMessageButton.switchInlineQueryCurrentChatOrNull(): RichMessageButton.SwitchInlineQueryCurrentChat? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.SwitchInlineQueryCurrentChat + +public inline fun RichMessageButton.switchInlineQueryCurrentChatOrThrow(): RichMessageButton.SwitchInlineQueryCurrentChat = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.SwitchInlineQueryCurrentChat + +public inline fun RichMessageButton.ifSwitchInlineQueryCurrentChat(block: (RichMessageButton.SwitchInlineQueryCurrentChat) -> T): T? = switchInlineQueryCurrentChatOrNull() ?.let(block) + +public inline fun RichMessageButton.switchInlineQueryChosenChatOrNull(): RichMessageButton.SwitchInlineQueryChosenChat? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.SwitchInlineQueryChosenChat + +public inline fun RichMessageButton.switchInlineQueryChosenChatOrThrow(): RichMessageButton.SwitchInlineQueryChosenChat = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.SwitchInlineQueryChosenChat + +public inline fun RichMessageButton.ifSwitchInlineQueryChosenChat(block: (RichMessageButton.SwitchInlineQueryChosenChat) -> T): T? = switchInlineQueryChosenChatOrNull() ?.let(block) + +public inline fun RichMessageButton.copyTextOrNull(): RichMessageButton.CopyText? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.CopyText + +public inline fun RichMessageButton.copyTextOrThrow(): RichMessageButton.CopyText = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.CopyText + +public inline fun RichMessageButton.ifCopyText(block: (RichMessageButton.CopyText) -> T): T? = copyTextOrNull() ?.let(block) + +public inline fun RichMessageButton.disabledOrNull(): RichMessageButton.Disabled? = this as? dev.inmo.tgbotapi.types.rich.RichMessageButton.Disabled + +public inline fun RichMessageButton.disabledOrThrow(): RichMessageButton.Disabled = this as dev.inmo.tgbotapi.types.rich.RichMessageButton.Disabled + +public inline fun RichMessageButton.ifDisabled(block: (RichMessageButton.Disabled) -> T): T? = disabledOrNull() ?.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 @@ -3464,6 +3526,12 @@ public inline fun InputRichBlock.inputRichBlockBlockQuotationOrThrow(): InputRic public inline fun InputRichBlock.ifInputRichBlockBlockQuotation(block: (InputRichBlockBlockQuotation) -> T): T? = inputRichBlockBlockQuotationOrNull() ?.let(block) +public inline fun InputRichBlock.inputRichBlockExpandableBlockQuotationOrNull(): InputRichBlockExpandableBlockQuotation? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockExpandableBlockQuotation + +public inline fun InputRichBlock.inputRichBlockExpandableBlockQuotationOrThrow(): InputRichBlockExpandableBlockQuotation = this as dev.inmo.tgbotapi.types.rich.InputRichBlockExpandableBlockQuotation + +public inline fun InputRichBlock.ifInputRichBlockExpandableBlockQuotation(block: (InputRichBlockExpandableBlockQuotation) -> T): T? = inputRichBlockExpandableBlockQuotationOrNull() ?.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 @@ -3488,6 +3556,12 @@ public inline fun InputRichBlock.inputRichBlockTableOrThrow(): InputRichBlockTab public inline fun InputRichBlock.ifInputRichBlockTable(block: (InputRichBlockTable) -> T): T? = inputRichBlockTableOrNull() ?.let(block) +public inline fun InputRichBlock.inputRichBlockButtonsOrNull(): InputRichBlockButtons? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockButtons + +public inline fun InputRichBlock.inputRichBlockButtonsOrThrow(): InputRichBlockButtons = this as dev.inmo.tgbotapi.types.rich.InputRichBlockButtons + +public inline fun InputRichBlock.ifInputRichBlockButtons(block: (InputRichBlockButtons) -> T): T? = inputRichBlockButtonsOrNull() ?.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 @@ -3512,6 +3586,12 @@ public inline fun InputRichBlock.inputRichBlockAudioOrThrow(): InputRichBlockAud public inline fun InputRichBlock.ifInputRichBlockAudio(block: (InputRichBlockAudio) -> T): T? = inputRichBlockAudioOrNull() ?.let(block) +public inline fun InputRichBlock.inputRichBlockDocumentOrNull(): InputRichBlockDocument? = this as? dev.inmo.tgbotapi.types.rich.InputRichBlockDocument + +public inline fun InputRichBlock.inputRichBlockDocumentOrThrow(): InputRichBlockDocument = this as dev.inmo.tgbotapi.types.rich.InputRichBlockDocument + +public inline fun InputRichBlock.ifInputRichBlockDocument(block: (InputRichBlockDocument) -> T): T? = inputRichBlockDocumentOrNull() ?.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 @@ -3536,6 +3616,12 @@ public inline fun InputRichBlock.inputRichBlockThinkingOrThrow(): InputRichBlock public inline fun InputRichBlock.ifInputRichBlockThinking(block: (InputRichBlockThinking) -> T): T? = inputRichBlockThinkingOrNull() ?.let(block) +public inline fun RichText.richTextButtonOrNull(): RichTextButton? = this as? dev.inmo.tgbotapi.types.rich.RichTextButton + +public inline fun RichText.richTextButtonOrThrow(): RichTextButton = this as dev.inmo.tgbotapi.types.rich.RichTextButton + +public inline fun RichText.ifRichTextButton(block: (RichTextButton) -> T): T? = richTextButtonOrNull() ?.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 @@ -3758,6 +3844,12 @@ public inline fun RichBlock.richBlockBlockQuotationOrThrow(): RichBlockBlockQuot public inline fun RichBlock.ifRichBlockBlockQuotation(block: (RichBlockBlockQuotation) -> T): T? = richBlockBlockQuotationOrNull() ?.let(block) +public inline fun RichBlock.richBlockExpandableBlockQuotationOrNull(): RichBlockExpandableBlockQuotation? = this as? dev.inmo.tgbotapi.types.rich.RichBlockExpandableBlockQuotation + +public inline fun RichBlock.richBlockExpandableBlockQuotationOrThrow(): RichBlockExpandableBlockQuotation = this as dev.inmo.tgbotapi.types.rich.RichBlockExpandableBlockQuotation + +public inline fun RichBlock.ifRichBlockExpandableBlockQuotation(block: (RichBlockExpandableBlockQuotation) -> T): T? = richBlockExpandableBlockQuotationOrNull() ?.let(block) + public inline fun RichBlock.richBlockPullQuotationOrNull(): RichBlockPullQuotation? = this as? dev.inmo.tgbotapi.types.rich.RichBlockPullQuotation public inline fun RichBlock.richBlockPullQuotationOrThrow(): RichBlockPullQuotation = this as dev.inmo.tgbotapi.types.rich.RichBlockPullQuotation @@ -3782,6 +3874,12 @@ public inline fun RichBlock.richBlockTableOrThrow(): RichBlockTable = this as de public inline fun RichBlock.ifRichBlockTable(block: (RichBlockTable) -> T): T? = richBlockTableOrNull() ?.let(block) +public inline fun RichBlock.richBlockButtonsOrNull(): RichBlockButtons? = this as? dev.inmo.tgbotapi.types.rich.RichBlockButtons + +public inline fun RichBlock.richBlockButtonsOrThrow(): RichBlockButtons = this as dev.inmo.tgbotapi.types.rich.RichBlockButtons + +public inline fun RichBlock.ifRichBlockButtons(block: (RichBlockButtons) -> T): T? = richBlockButtonsOrNull() ?.let(block) + public inline fun RichBlock.richBlockDetailsOrNull(): RichBlockDetails? = this as? dev.inmo.tgbotapi.types.rich.RichBlockDetails public inline fun RichBlock.richBlockDetailsOrThrow(): RichBlockDetails = this as dev.inmo.tgbotapi.types.rich.RichBlockDetails @@ -3806,6 +3904,12 @@ public inline fun RichBlock.richBlockAudioOrThrow(): RichBlockAudio = this as de public inline fun RichBlock.ifRichBlockAudio(block: (RichBlockAudio) -> T): T? = richBlockAudioOrNull() ?.let(block) +public inline fun RichBlock.richBlockDocumentOrNull(): RichBlockDocument? = this as? dev.inmo.tgbotapi.types.rich.RichBlockDocument + +public inline fun RichBlock.richBlockDocumentOrThrow(): RichBlockDocument = this as dev.inmo.tgbotapi.types.rich.RichBlockDocument + +public inline fun RichBlock.ifRichBlockDocument(block: (RichBlockDocument) -> T): T? = richBlockDocumentOrNull() ?.let(block) + public inline fun RichBlock.richBlockPhotoOrNull(): RichBlockPhoto? = this as? dev.inmo.tgbotapi.types.rich.RichBlockPhoto public inline fun RichBlock.richBlockPhotoOrThrow(): RichBlockPhoto = this as dev.inmo.tgbotapi.types.rich.RichBlockPhoto