mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-09-14 12:04:18 +00:00
feat(api)!: use direct message threads for drafts
BREAKING CHANGE: draft APIs replace threadId/MessageThreadId with directMessageThreadId/DirectMessageThreadId and serialize direct_messages_topic_id.
This commit is contained in:
@@ -6951,20 +6951,21 @@ public final class dev/inmo/tgbotapi/requests/send/SendLocationKt {
|
||||
public static synthetic fun SendStaticLocation-bYfvUCQ$default (Ldev/inmo/tgbotapi/types/ChatIdentifier;DDLdev/inmo/tgbotapi/types/MessageThreadId;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/String;Ldev/inmo/tgbotapi/types/EphemeralMessageParameters;ZZZLjava/lang/String;Ldev/inmo/tgbotapi/types/message/SuggestedPostParameters;Ldev/inmo/tgbotapi/types/ReplyParameters;Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/send/SendLocation$Static;
|
||||
}
|
||||
|
||||
public final class dev/inmo/tgbotapi/requests/send/SendMessageDraft : dev/inmo/tgbotapi/abstracts/TextedOutput, dev/inmo/tgbotapi/requests/send/abstracts/OptionallyMessageThreadRequest, dev/inmo/tgbotapi/requests/send/abstracts/SendChatMessageRequest {
|
||||
public final class dev/inmo/tgbotapi/requests/send/SendMessageDraft : dev/inmo/tgbotapi/abstracts/TextedOutput, dev/inmo/tgbotapi/requests/send/abstracts/OptionallyDirectMessageThreadRequest, dev/inmo/tgbotapi/requests/send/abstracts/SendChatMessageRequest {
|
||||
public static final field Companion Ldev/inmo/tgbotapi/requests/send/SendMessageDraft$Companion;
|
||||
public synthetic fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public synthetic fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ljava/util/List;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ldev/inmo/tgbotapi/types/IdChatIdentifier;
|
||||
public final fun component2-12UPeIw ()J
|
||||
public final fun component3 ()Ljava/lang/String;
|
||||
public final fun component4 ()Ldev/inmo/tgbotapi/types/message/ParseMode;
|
||||
public final fun component6-S3HF-10 ()Ldev/inmo/tgbotapi/types/MessageThreadId;
|
||||
public final fun component6-1osv_qQ ()Ldev/inmo/tgbotapi/types/DirectMessageThreadId;
|
||||
public final fun component7 ()Ljava/lang/Boolean;
|
||||
public final fun component8 ()Ljava/lang/Boolean;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getCanStop ()Ljava/lang/Boolean;
|
||||
public synthetic fun getChatId ()Ldev/inmo/tgbotapi/types/ChatIdentifier;
|
||||
public fun getChatId ()Ldev/inmo/tgbotapi/types/IdChatIdentifier;
|
||||
public fun getDirectMessageThreadId-1osv_qQ ()Ldev/inmo/tgbotapi/types/DirectMessageThreadId;
|
||||
public final fun getDraftId-12UPeIw ()J
|
||||
public fun getEntities ()Ljava/util/List;
|
||||
public final fun getKeepOnStop ()Ljava/lang/Boolean;
|
||||
@@ -6973,7 +6974,6 @@ public final class dev/inmo/tgbotapi/requests/send/SendMessageDraft : dev/inmo/t
|
||||
public fun getResultDeserializer ()Lkotlinx/serialization/DeserializationStrategy;
|
||||
public fun getText ()Ljava/lang/String;
|
||||
public fun getTextSources ()Ljava/util/List;
|
||||
public fun getThreadId-S3HF-10 ()Ldev/inmo/tgbotapi/types/MessageThreadId;
|
||||
public fun hashCode ()I
|
||||
public fun method ()Ljava/lang/String;
|
||||
public fun toString ()Ljava/lang/String;
|
||||
@@ -6995,10 +6995,10 @@ public final class dev/inmo/tgbotapi/requests/send/SendMessageDraft$Companion {
|
||||
}
|
||||
|
||||
public final class dev/inmo/tgbotapi/requests/send/SendMessageDraftKt {
|
||||
public static final fun SendMessageDraft-89UPcpI (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/util/List;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/requests/send/SendMessageDraft;
|
||||
public static synthetic fun SendMessageDraft-89UPcpI$default (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/util/List;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/send/SendMessageDraft;
|
||||
public static final fun SendMessageDraft-pJUp6k4 (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/requests/send/SendMessageDraft;
|
||||
public static synthetic fun SendMessageDraft-pJUp6k4$default (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/send/SendMessageDraft;
|
||||
public static final fun SendMessageDraft-XkbMyLA (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/requests/send/SendMessageDraft;
|
||||
public static synthetic fun SendMessageDraft-XkbMyLA$default (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/lang/String;Ldev/inmo/tgbotapi/types/message/ParseMode;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/send/SendMessageDraft;
|
||||
public static final fun SendMessageDraft-rrT3ZwM (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/util/List;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/requests/send/SendMessageDraft;
|
||||
public static synthetic fun SendMessageDraft-rrT3ZwM$default (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLjava/util/List;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/send/SendMessageDraft;
|
||||
}
|
||||
|
||||
public final class dev/inmo/tgbotapi/requests/send/SendMessageKt {
|
||||
@@ -7070,25 +7070,25 @@ public final class dev/inmo/tgbotapi/requests/send/SendRichMessage$Companion {
|
||||
|
||||
public final class dev/inmo/tgbotapi/requests/send/SendRichMessageDraft : dev/inmo/tgbotapi/requests/abstracts/SimpleRequest {
|
||||
public static final field Companion Ldev/inmo/tgbotapi/requests/send/SendRichMessageDraft$Companion;
|
||||
public synthetic fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public synthetic fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public synthetic fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public synthetic fun <init> (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ldev/inmo/tgbotapi/types/IdChatIdentifier;
|
||||
public final fun component2 ()J
|
||||
public final fun component3 ()Ldev/inmo/tgbotapi/types/rich/InputRichMessage;
|
||||
public final fun component4-S3HF-10 ()Ldev/inmo/tgbotapi/types/MessageThreadId;
|
||||
public final fun component4-1osv_qQ ()Ldev/inmo/tgbotapi/types/DirectMessageThreadId;
|
||||
public final fun component5 ()Ljava/lang/Boolean;
|
||||
public final fun component6 ()Ljava/lang/Boolean;
|
||||
public final fun copy-GAvqYPo (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/requests/send/SendRichMessageDraft;
|
||||
public static synthetic fun copy-GAvqYPo$default (Ldev/inmo/tgbotapi/requests/send/SendRichMessageDraft;Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/MessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/send/SendRichMessageDraft;
|
||||
public final fun copy--nslZuo (Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;)Ldev/inmo/tgbotapi/requests/send/SendRichMessageDraft;
|
||||
public static synthetic fun copy--nslZuo$default (Ldev/inmo/tgbotapi/requests/send/SendRichMessageDraft;Ldev/inmo/tgbotapi/types/IdChatIdentifier;JLdev/inmo/tgbotapi/types/rich/InputRichMessage;Ldev/inmo/tgbotapi/types/DirectMessageThreadId;Ljava/lang/Boolean;Ljava/lang/Boolean;ILjava/lang/Object;)Ldev/inmo/tgbotapi/requests/send/SendRichMessageDraft;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getCanStop ()Ljava/lang/Boolean;
|
||||
public final fun getChatId ()Ldev/inmo/tgbotapi/types/IdChatIdentifier;
|
||||
public final fun getDirectMessageThreadId-1osv_qQ ()Ldev/inmo/tgbotapi/types/DirectMessageThreadId;
|
||||
public final fun getDraftId ()J
|
||||
public final fun getKeepOnStop ()Ljava/lang/Boolean;
|
||||
public fun getRequestSerializer ()Lkotlinx/serialization/SerializationStrategy;
|
||||
public fun getResultDeserializer ()Lkotlinx/serialization/DeserializationStrategy;
|
||||
public final fun getRichMessage ()Ldev/inmo/tgbotapi/types/rich/InputRichMessage;
|
||||
public final fun getThreadId-S3HF-10 ()Ldev/inmo/tgbotapi/types/MessageThreadId;
|
||||
public fun hashCode ()I
|
||||
public fun method ()Ljava/lang/String;
|
||||
public fun toString ()Ljava/lang/String;
|
||||
|
||||
@@ -9,23 +9,23 @@ import dev.inmo.tgbotapi.types.message.ParseMode
|
||||
import dev.inmo.tgbotapi.types.message.parseModeField
|
||||
import dev.inmo.tgbotapi.types.message.*
|
||||
import dev.inmo.tgbotapi.types.message.RawMessageEntity
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializationStrategyClass
|
||||
import dev.inmo.tgbotapi.types.message.content.TextContent
|
||||
import dev.inmo.tgbotapi.types.message.toRawMessageEntities
|
||||
import dev.inmo.tgbotapi.utils.DefaultKTgBotAPIKSLog
|
||||
import dev.inmo.tgbotapi.utils.extensions.makeString
|
||||
import dev.inmo.tgbotapi.utils.serializers.UnitFromBooleanSerializer
|
||||
import dev.inmo.tgbotapi.utils.throwRangeError
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
|
||||
/**
|
||||
* Creates a plain-text draft for a direct messages topic.
|
||||
*
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
fun SendMessageDraft(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
text: String,
|
||||
parseMode: ParseMode? = null,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
) = SendMessageDraft(
|
||||
@@ -34,16 +34,21 @@ fun SendMessageDraft(
|
||||
text = text,
|
||||
parseMode = parseMode,
|
||||
rawEntities = null,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* Creates an entity-formatted draft for a direct messages topic.
|
||||
*
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
fun SendMessageDraft(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
entities: TextSourcesList,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
) = SendMessageDraft(
|
||||
@@ -52,11 +57,16 @@ fun SendMessageDraft(
|
||||
text = entities.makeString(),
|
||||
parseMode = null,
|
||||
rawEntities = entities.toRawMessageEntities(),
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* Streams a partial text message draft to a direct messages topic.
|
||||
*
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
@ConsistentCopyVisibility
|
||||
@Serializable
|
||||
data class SendMessageDraft internal constructor(
|
||||
@@ -71,16 +81,16 @@ data class SendMessageDraft internal constructor(
|
||||
@SerialName(entitiesField)
|
||||
private val rawEntities: List<RawMessageEntity>? = null,
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@SerialName(messageThreadIdField)
|
||||
@SerialName(directMessagesTopicIdField)
|
||||
@EncodeDefault
|
||||
override val threadId: MessageThreadId? = chatId.threadId,
|
||||
override val directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
@SerialName(canStopField)
|
||||
val canStop: Boolean? = null,
|
||||
@SerialName(keepOnStopField)
|
||||
val keepOnStop: Boolean? = null
|
||||
) : SendChatMessageRequest<Unit>,
|
||||
TextedOutput,
|
||||
OptionallyMessageThreadRequest
|
||||
OptionallyDirectMessageThreadRequest
|
||||
{
|
||||
override val textSources: TextSourcesList? by lazy {
|
||||
rawEntities ?.asTextSources(text)
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package dev.inmo.tgbotapi.requests.send
|
||||
|
||||
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
|
||||
import dev.inmo.tgbotapi.types.DirectMessageThreadId
|
||||
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.canStopField
|
||||
import dev.inmo.tgbotapi.types.chatIdField
|
||||
import dev.inmo.tgbotapi.types.directMessagesTopicIdField
|
||||
import dev.inmo.tgbotapi.types.draftIdField
|
||||
import dev.inmo.tgbotapi.types.keepOnStopField
|
||||
import dev.inmo.tgbotapi.types.messageThreadIdField
|
||||
import dev.inmo.tgbotapi.types.richMessageField
|
||||
import dev.inmo.tgbotapi.types.rich.InputRichMessage
|
||||
import dev.inmo.tgbotapi.types.rich.multipartFiles
|
||||
@@ -22,7 +22,8 @@ import kotlinx.serialization.SerializationStrategy
|
||||
* ephemeral and acts as a temporary 30-second preview - once the output is finalized, [SendRichMessage] must be called
|
||||
* with the complete message to persist it in the user's chat.
|
||||
*
|
||||
* @param chatId Numeric target chat identifier. Identifiers carrying a thread supply the default [threadId].
|
||||
* @param chatId Numeric target chat identifier.
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
* @see <a href="https://core.telegram.org/bots/api#sendrichmessagedraft">sendRichMessageDraft</a>
|
||||
*/
|
||||
@Serializable
|
||||
@@ -36,8 +37,8 @@ data class SendRichMessageDraft(
|
||||
val draftId: Long,
|
||||
@SerialName(richMessageField)
|
||||
val richMessage: InputRichMessage,
|
||||
@SerialName(messageThreadIdField)
|
||||
val threadId: MessageThreadId? = chatId.threadId,
|
||||
@SerialName(directMessagesTopicIdField)
|
||||
val directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
@SerialName(canStopField)
|
||||
val canStop: Boolean? = null,
|
||||
@SerialName(keepOnStopField)
|
||||
|
||||
@@ -38,15 +38,23 @@ class GeneralBotApi103Test {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `rich draft accepts thread-bearing chat identifiers`() {
|
||||
val chatId = ChatIdWithThreadId(RawChatId(3L), MessageThreadId(4L))
|
||||
fun `drafts accept direct-message-thread chat identifiers`() {
|
||||
val chatId = ChatIdWithChannelDirectMessageThreadId(RawChatId(3L), DirectMessageThreadId(4L))
|
||||
val messageDraft = SendMessageDraft(chatId, DraftId(5L), "draft")
|
||||
val richDraft = SendRichMessageDraft(chatId, 5L, InputRichMessageHTML("draft"))
|
||||
val messageDraftJson = json.encodeToJsonElement(SendMessageDraft.serializer(), messageDraft).jsonObject
|
||||
val richDraftJson = json.encodeToJsonElement(SendRichMessageDraft.serializer(), richDraft).jsonObject
|
||||
|
||||
assertEquals(chatId, messageDraft.chatId)
|
||||
assertEquals(chatId, richDraft.chatId)
|
||||
assertEquals(MessageThreadId(4L), richDraft.threadId)
|
||||
assertEquals(DirectMessageThreadId(4L), messageDraft.directMessageThreadId)
|
||||
assertEquals(DirectMessageThreadId(4L), richDraft.directMessageThreadId)
|
||||
assertEquals("3", messageDraftJson[chatIdField].toString())
|
||||
assertEquals("3", richDraftJson[chatIdField].toString())
|
||||
assertEquals("4", richDraftJson[messageThreadIdField].toString())
|
||||
assertEquals("4", messageDraftJson[directMessagesTopicIdField].toString())
|
||||
assertEquals("4", richDraftJson[directMessagesTopicIdField].toString())
|
||||
assertEquals(null, messageDraftJson[messageThreadIdField])
|
||||
assertEquals(null, richDraftJson[messageThreadIdField])
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user