diff --git a/CHANGELOG.md b/CHANGELOG.md index 0710b19972..a5045a16cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,14 +10,14 @@ * (`Rich Messages`) Added `RichMessage` type and `RichMessageContent` message content; parsed `rich_message` in `RawMessage`; added `RichMessageContentMessage` typealias * (`Rich Messages`) Added `InputRichMessage` (internal constructor with `InputRichMessageHTML`/`InputRichMessageMarkdown` factories) and `InputRichMessageContent` usable as `InputMessageContent` * (`Rich Messages`) Added `SendRichMessage` and `SendRichMessageDraft` requests - * (`Rich Messages`) Added `richMessage` parameter to `EditChatMessageText` + * (`Rich Messages`) Added `richMessage` parameter to `EditChatMessageText`; its `text` is now nullable (per API) and the `EditChatMessageRichText` factory builds a rich edit; widened `EditTextChatMessage.text` to nullable * (`Polls`) Added `Link` type (`dev.inmo.tgbotapi.types.Link`) implementing `PollMedia`, carrying the `url` of a link attached to a poll option * (`Polls`) Added `link` field parsing to `PollMedia` deserialization/serialization * (`Polls`) Added `TelegramMediaLink` (`InputMediaLink`) implementing `InputPollOptionMedia`, usable as a poll option media * (`Join Request Queries`) Added `ChatJoinRequestQueryId` value class and `queryId` field to `ChatJoinRequest` * (`Join Request Queries`) Added `supportsJoinRequestQueries` flag to `ExtendedBot` (`User.supports_join_request_queries`) * (`Join Request Queries`) Added `guardBot` field to `ExtendedChat` (`ChatFullInfo.guard_bot`), parsed for public chats - * (`Join Request Queries`) Added `AnswerChatJoinRequestQuery` request and `ChatJoinRequestQueryResult` enum (`Approve`/`Decline`/`Queue`) + * (`Join Request Queries`) Added `AnswerChatJoinRequestQuery` request and `ChatJoinRequestQueryResult` sealed interface (`Approve`/`Decline`/`Queue`/`Unknown`) serialized as a plain string * (`Join Request Queries`) Added `SendChatJoinRequestWebApp` request * `API`: * (`Rich Messages`) Added `sendRichMessage` and `sendRichMessageDraft` `TelegramBot` extensions diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index 5b0ac9c364..c32d85d9c3 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -3401,20 +3401,46 @@ public final class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestA public static fun getResultDeserializer (Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestAnswer;)Lkotlinx/serialization/DeserializationStrategy; } -public final class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult : java/lang/Enum { - public static final field Approve Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult; +public abstract interface class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult { public static final field Companion Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Companion; - public static final field Decline Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult; - public static final field Queue Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult; - public static fun getEntries ()Lkotlin/enums/EnumEntries; - public static fun valueOf (Ljava/lang/String;)Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult; - public static fun values ()[Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult; + public abstract fun getName ()Ljava/lang/String; } -public final class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Companion { +public final class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Approve : dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult { + public static final field INSTANCE Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Approve; + public fun getName ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Companion : kotlinx/serialization/KSerializer { + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult; + 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/requests/chat/invite_links/ChatJoinRequestQueryResult;)V + public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public final fun serializer ()Lkotlinx/serialization/KSerializer; } +public final class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Decline : dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult { + public static final field INSTANCE Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Decline; + public fun getName ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Queue : dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult { + public static final field INSTANCE Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Queue; + public fun getName ()Ljava/lang/String; +} + +public final class dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Unknown : dev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult { + public fun (Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;)Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Unknown; + public static synthetic fun copy$default (Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Unknown;Ljava/lang/String;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/chat/invite_links/ChatJoinRequestQueryResult$Unknown; + public fun equals (Ljava/lang/Object;)Z + public fun getName ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public abstract interface class dev/inmo/tgbotapi/requests/chat/invite_links/CreateChatInviteLink : dev/inmo/tgbotapi/requests/chat/abstracts/EditChatInviteLinkRequest { public static final field Companion Ldev/inmo/tgbotapi/requests/chat/invite_links/CreateChatInviteLink$Companion; public abstract fun getExpirationUnixTimeStamp ()Ldev/inmo/tgbotapi/types/TelegramDate; @@ -5196,6 +5222,8 @@ public final class dev/inmo/tgbotapi/requests/edit/text/EditChatMessageText$Comp public final class dev/inmo/tgbotapi/requests/edit/text/EditChatMessageTextKt { public static final field editMessageTextMethod Ljava/lang/String; + public static final fun EditChatMessageRichText-FG4LXhY (Ldev/inmo/tgbotapi/types/ChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ljava/lang/String;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardMarkup;)Ldev/inmo/tgbotapi/requests/edit/text/EditChatMessageText; + public static synthetic fun EditChatMessageRichText-FG4LXhY$default (Ldev/inmo/tgbotapi/types/ChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ljava/lang/String;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardMarkup;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/edit/text/EditChatMessageText; public static final fun EditChatMessageText-PljJ14I (Ldev/inmo/tgbotapi/types/ChatIdentifier;JLjava/util/List;Ljava/lang/String;Ldev/inmo/tgbotapi/types/LinkPreviewOptions;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardMarkup;)Ldev/inmo/tgbotapi/requests/edit/text/EditChatMessageText; public static synthetic fun EditChatMessageText-PljJ14I$default (Ldev/inmo/tgbotapi/types/ChatIdentifier;JLjava/util/List;Ljava/lang/String;Ldev/inmo/tgbotapi/types/LinkPreviewOptions;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardMarkup;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/edit/text/EditChatMessageText; public static final fun EditChatMessageText-fLfFtqc (Ldev/inmo/tgbotapi/types/ChatIdentifier;JLjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/lang/String;Ldev/inmo/tgbotapi/types/LinkPreviewOptions;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardMarkup;)Ldev/inmo/tgbotapi/requests/edit/text/EditChatMessageText; diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/chat/invite_links/AnswerChatJoinRequestQuery.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/chat/invite_links/AnswerChatJoinRequestQuery.kt index 157647774b..0207fbacab 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/chat/invite_links/AnswerChatJoinRequestQuery.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/chat/invite_links/AnswerChatJoinRequestQuery.kt @@ -6,34 +6,68 @@ import dev.inmo.tgbotapi.types.chatJoinRequestQueryIdField import dev.inmo.tgbotapi.types.resultField import dev.inmo.tgbotapi.utils.serializers.UnitFromBooleanSerializer import kotlinx.serialization.DeserializationStrategy +import kotlinx.serialization.KSerializer import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.SerializationStrategy +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder /** - * Result of an [AnswerChatJoinRequestQuery]. + * Result of an [AnswerChatJoinRequestQuery]. Serialized as a plain string. * * @see answerChatJoinRequestQuery */ -@Serializable -enum class ChatJoinRequestQueryResult { +@Serializable(ChatJoinRequestQueryResult.Companion::class) +sealed interface ChatJoinRequestQueryResult { + val name: String + /** * Allow the user to join the chat. */ - @SerialName("approve") - Approve, + object Approve : ChatJoinRequestQueryResult { + override val name: String = "approve" + } /** * Disallow the user to join the chat. */ - @SerialName("decline") - Decline, + object Decline : ChatJoinRequestQueryResult { + override val name: String = "decline" + } /** * Leave the decision to other administrators. */ - @SerialName("queue") - Queue + object Queue : ChatJoinRequestQueryResult { + override val name: String = "queue" + } + + /** + * Any other result which is currently unknown to this library. + */ + data class Unknown(override val name: String) : ChatJoinRequestQueryResult + + companion object : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("dev.inmo.tgbotapi.requests.chat.invite_links.ChatJoinRequestQueryResult", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: ChatJoinRequestQueryResult) { + encoder.encodeString(value.name) + } + + override fun deserialize(decoder: Decoder): ChatJoinRequestQueryResult { + return when (val name = decoder.decodeString()) { + Approve.name -> Approve + Decline.name -> Decline + Queue.name -> Queue + else -> Unknown(name) + } + } + } } /** diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/abstracts/EditTextChatMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/abstracts/EditTextChatMessage.kt index 8dbdd24f52..91ebc18ae4 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/abstracts/EditTextChatMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/abstracts/EditTextChatMessage.kt @@ -3,5 +3,5 @@ package dev.inmo.tgbotapi.requests.edit.abstracts import dev.inmo.tgbotapi.abstracts.TextedOutput interface EditTextChatMessage : TextedOutput { - override val text: String + override val text: String? } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/text/EditChatMessageText.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/text/EditChatMessageText.kt index 5b2123ae6b..0219ba57c1 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/text/EditChatMessageText.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/text/EditChatMessageText.kt @@ -56,6 +56,24 @@ fun EditChatMessageText( replyMarkup ) +fun EditChatMessageRichText( + chatId: ChatIdentifier, + messageId: MessageId, + richMessage: InputRichMessage, + businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, + replyMarkup: InlineKeyboardMarkup? = null +) = EditChatMessageText( + chatId = chatId, + messageId = messageId, + text = null, + parseMode = null, + rawEntities = null, + businessConnectionId = businessConnectionId, + linkPreviewOptions = null, + replyMarkup = replyMarkup, + richMessage = richMessage +) + @ConsistentCopyVisibility @Serializable data class EditChatMessageText internal constructor( @@ -64,7 +82,7 @@ data class EditChatMessageText internal constructor( @SerialName(messageIdField) override val messageId: MessageId, @SerialName(textField) - override val text: String, + override val text: String? = null, @SerialName(parseModeField) override val parseMode: ParseMode? = null, @SerialName(entitiesField) @@ -79,7 +97,7 @@ data class EditChatMessageText internal constructor( val richMessage: InputRichMessage? = null ) : EditChatMessage, EditTextChatMessage, EditReplyMessage, EditLinkPreviewOptionsContainer { override val textSources: TextSourcesList? by lazy { - rawEntities ?.asTextSources(text) + text ?.let { rawEntities ?.asTextSources(it) } } override fun method(): String = editMessageTextMethod