feat(api)!: widen rich draft chat identifier

BREAKING CHANGE: SendRichMessageDraft, sendRichMessageDraft, and the rich-draft send overload now accept IdChatIdentifier. Existing ChatId source calls remain valid; JVM signatures changed.
This commit is contained in:
InsanusMokrassar committed 2026-09-01 19:14:29 +06:00
1 parent af09ef4c29
commit 3ca3e571b5
8 files changed
+111 -15

No files matched your search

@@ -1,7 +1,7 @@
package dev.inmo.tgbotapi.requests.send
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
import dev.inmo.tgbotapi.types.ChatId
import dev.inmo.tgbotapi.types.IdChatIdentifier
import dev.inmo.tgbotapi.types.MessageThreadId
import dev.inmo.tgbotapi.types.canStopField
import dev.inmo.tgbotapi.types.chatIdField
@@ -22,12 +22,13 @@ 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].
* @see <a href="https://core.telegram.org/bots/api#sendrichmessagedraft">sendRichMessageDraft</a>
*/
@Serializable
data class SendRichMessageDraft(
@SerialName(chatIdField)
val chatId: ChatId,
val chatId: IdChatIdentifier,
/**
* Unique identifier of the message draft; must be non-zero. Changes to drafts with the same identifier are animated.
*/
@@ -37,6 +37,18 @@ class GeneralBotApi103Test {
assertEquals("true", richDraftJson[keepOnStopField].toString())
}
@Test
fun `rich draft accepts thread-bearing chat identifiers`() {
val chatId = ChatIdWithThreadId(RawChatId(3L), MessageThreadId(4L))
val richDraft = SendRichMessageDraft(chatId, 5L, InputRichMessageHTML("draft"))
val richDraftJson = json.encodeToJsonElement(SendRichMessageDraft.serializer(), richDraft).jsonObject
assertEquals(chatId, richDraft.chatId)
assertEquals(MessageThreadId(4L), richDraft.threadId)
assertEquals("3", richDraftJson[chatIdField].toString())
assertEquals("4", richDraftJson[messageThreadIdField].toString())
}
@Test
fun `stopped message generation update deserializes`() {
val update = nonstrictJsonFormat.decodeFromString(