mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2026-10-26 06:27:00 +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:
1 parent
3ca3e571b5
commit
b1304ef10d
11 files changed
+288
-133
No files matched your search
+55
-24
@@ -18,15 +18,16 @@ import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlin.js.JsName
|
||||
import kotlin.jvm.JvmName
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
text: String,
|
||||
parseMode: ParseMode? = null,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = execute(
|
||||
@@ -35,7 +36,7 @@ public suspend fun TelegramBot.sendMessageDraft(
|
||||
draftId = draftId,
|
||||
text = text,
|
||||
parseMode = parseMode,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
@@ -61,10 +62,13 @@ private suspend fun TelegramBot.sendMessageDraftFlow(
|
||||
|
||||
public val GlobalDraftIdAllocator: DraftIdAllocator by lazy { DraftIdAllocator() }
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraftFlow(
|
||||
chatId: IdChatIdentifier,
|
||||
messagesFlow: Flow<TextSourcesList>,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
draftId: DraftId? = null,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
@@ -72,15 +76,18 @@ public suspend fun TelegramBot.sendMessageDraftFlow(
|
||||
val draftId = draftId ?: GlobalDraftIdAllocator.allocate()
|
||||
return sendMessageDraftFlow(
|
||||
messagesFlow.map {
|
||||
SendMessageDraft(chatId = chatId, draftId = draftId, entities = it, threadId = threadId, canStop = canStop, keepOnStop = keepOnStop)
|
||||
SendMessageDraft(chatId = chatId, draftId = draftId, entities = it, directMessageThreadId = directMessageThreadId, canStop = canStop, keepOnStop = keepOnStop)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraftFlowWithTextsAndParseMode(
|
||||
chatId: IdChatIdentifier,
|
||||
messagesFlow: Flow<Pair<String, ParseMode?>>,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
draftId: DraftId? = null,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
@@ -88,15 +95,18 @@ public suspend fun TelegramBot.sendMessageDraftFlowWithTextsAndParseMode(
|
||||
val draftId = draftId ?: GlobalDraftIdAllocator.allocate()
|
||||
return sendMessageDraftFlow(
|
||||
messagesFlow.map {
|
||||
SendMessageDraft(chatId = chatId, draftId = draftId, text = it.first, parseMode = it.second, threadId = threadId, canStop = canStop, keepOnStop = keepOnStop)
|
||||
SendMessageDraft(chatId = chatId, draftId = draftId, text = it.first, parseMode = it.second, directMessageThreadId = directMessageThreadId, canStop = canStop, keepOnStop = keepOnStop)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraftFlowWithTexts(
|
||||
chatId: IdChatIdentifier,
|
||||
messagesFlow: Flow<String>,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
draftId: DraftId? = null,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
@@ -107,19 +117,22 @@ public suspend fun TelegramBot.sendMessageDraftFlowWithTexts(
|
||||
messagesFlow = messagesFlow.map {
|
||||
it.escapeMarkdownV2Common() to MarkdownV2
|
||||
},
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
draftId = draftId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chat].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraft(
|
||||
chat: Chat,
|
||||
draftId: DraftId,
|
||||
text: String,
|
||||
parseMode: ParseMode? = null,
|
||||
threadId: MessageThreadId? = chat.id.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = sendMessageDraft(
|
||||
@@ -127,16 +140,19 @@ public suspend fun TelegramBot.sendMessageDraft(
|
||||
draftId = draftId,
|
||||
text = text,
|
||||
parseMode = parseMode,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
entities: TextSourcesList,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = execute(
|
||||
@@ -144,33 +160,39 @@ public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId = chatId,
|
||||
draftId = draftId,
|
||||
entities = entities,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
)
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chat].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraft(
|
||||
chat: Chat,
|
||||
draftId: DraftId,
|
||||
entities: TextSourcesList,
|
||||
threadId: MessageThreadId? = chat.id.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = sendMessageDraft(
|
||||
chatId = chat.id,
|
||||
draftId = draftId,
|
||||
entities = entities,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
separator: TextSource? = null,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null,
|
||||
builderBody: EntitiesBuilderBody
|
||||
@@ -178,16 +200,19 @@ public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId = chatId,
|
||||
draftId = draftId,
|
||||
entities = buildEntities(separator, builderBody),
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
separator: String,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null,
|
||||
builderBody: EntitiesBuilderBody
|
||||
@@ -195,16 +220,19 @@ public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId = chatId,
|
||||
draftId = draftId,
|
||||
entities = buildEntities(separator, builderBody),
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chat].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraft(
|
||||
chat: Chat,
|
||||
draftId: DraftId,
|
||||
separator: TextSource? = null,
|
||||
threadId: MessageThreadId? = chat.id.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null,
|
||||
builderBody: EntitiesBuilderBody
|
||||
@@ -212,17 +240,20 @@ public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId = chat.id,
|
||||
draftId = draftId,
|
||||
separator = separator,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop,
|
||||
builderBody = builderBody
|
||||
)
|
||||
|
||||
/**
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chat].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendMessageDraft(
|
||||
chat: Chat,
|
||||
draftId: DraftId,
|
||||
separator: String,
|
||||
threadId: MessageThreadId? = chat.id.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null,
|
||||
builderBody: EntitiesBuilderBody
|
||||
@@ -230,7 +261,7 @@ public suspend fun TelegramBot.sendMessageDraft(
|
||||
chatId = chat.id,
|
||||
draftId = draftId,
|
||||
separator = separator,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop,
|
||||
builderBody = builderBody
|
||||
|
||||
+5
-4
@@ -2,18 +2,19 @@ package dev.inmo.tgbotapi.extensions.api.send
|
||||
|
||||
import dev.inmo.tgbotapi.bot.TelegramBot
|
||||
import dev.inmo.tgbotapi.requests.send.SendRichMessageDraft
|
||||
import dev.inmo.tgbotapi.types.DirectMessageThreadId
|
||||
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.rich.InputRichMessage
|
||||
|
||||
/**
|
||||
* @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].
|
||||
*/
|
||||
public suspend fun TelegramBot.sendRichMessageDraft(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: Long,
|
||||
richMessage: InputRichMessage,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = execute(
|
||||
@@ -21,7 +22,7 @@ public suspend fun TelegramBot.sendRichMessageDraft(
|
||||
chatId = chatId,
|
||||
draftId = draftId,
|
||||
richMessage = richMessage,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
@@ -2438,13 +2438,14 @@ public suspend fun TelegramBot.send(
|
||||
|
||||
/**
|
||||
* Will execute [sendMessageDraft] request
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
text: String,
|
||||
parseMode: ParseMode? = null,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = sendMessageDraft(
|
||||
@@ -2452,20 +2453,21 @@ public suspend fun TelegramBot.send(
|
||||
draftId = draftId,
|
||||
text = text,
|
||||
parseMode = parseMode,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* Will execute [sendMessageDraft] request
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chat].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chat: Chat,
|
||||
draftId: DraftId,
|
||||
text: String,
|
||||
parseMode: ParseMode? = null,
|
||||
threadId: MessageThreadId? = chat.id.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = sendMessageDraft(
|
||||
@@ -2473,57 +2475,60 @@ public suspend fun TelegramBot.send(
|
||||
draftId = draftId,
|
||||
text = text,
|
||||
parseMode = parseMode,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* Will execute [sendMessageDraft] request
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
entities: TextSourcesList,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = sendMessageDraft(
|
||||
chatId = chatId,
|
||||
draftId = draftId,
|
||||
entities = entities,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* Will execute [sendMessageDraft] request
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chat].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chat: Chat,
|
||||
draftId: DraftId,
|
||||
entities: TextSourcesList,
|
||||
threadId: MessageThreadId? = chat.id.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = sendMessageDraft(
|
||||
chat = chat,
|
||||
draftId = draftId,
|
||||
entities = entities,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
/**
|
||||
* Will execute [sendMessageDraft] request
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
separator: TextSource? = null,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null,
|
||||
builderBody: EntitiesBuilderBody
|
||||
@@ -2531,7 +2536,7 @@ public suspend fun TelegramBot.send(
|
||||
chatId = chatId,
|
||||
draftId = draftId,
|
||||
separator = separator,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop,
|
||||
builderBody = builderBody
|
||||
@@ -2539,12 +2544,13 @@ public suspend fun TelegramBot.send(
|
||||
|
||||
/**
|
||||
* Will execute [sendMessageDraft] request
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chatId].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: DraftId,
|
||||
separator: String,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null,
|
||||
builderBody: EntitiesBuilderBody
|
||||
@@ -2552,7 +2558,7 @@ public suspend fun TelegramBot.send(
|
||||
chatId = chatId,
|
||||
draftId = draftId,
|
||||
separator = separator,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop,
|
||||
builderBody = builderBody
|
||||
@@ -2560,12 +2566,13 @@ public suspend fun TelegramBot.send(
|
||||
|
||||
/**
|
||||
* Will execute [sendMessageDraft] request
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chat].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chat: Chat,
|
||||
draftId: DraftId,
|
||||
separator: TextSource? = null,
|
||||
threadId: MessageThreadId? = chat.id.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null,
|
||||
builderBody: EntitiesBuilderBody
|
||||
@@ -2573,7 +2580,7 @@ public suspend fun TelegramBot.send(
|
||||
chat = chat,
|
||||
draftId = draftId,
|
||||
separator = separator,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop,
|
||||
builderBody = builderBody
|
||||
@@ -2581,12 +2588,13 @@ public suspend fun TelegramBot.send(
|
||||
|
||||
/**
|
||||
* Will execute [sendMessageDraft] request
|
||||
* @param directMessageThreadId Direct messages topic identifier. Defaults from [chat].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chat: Chat,
|
||||
draftId: DraftId,
|
||||
separator: String,
|
||||
threadId: MessageThreadId? = chat.id.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chat.id.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null,
|
||||
builderBody: EntitiesBuilderBody
|
||||
@@ -2594,7 +2602,7 @@ public suspend fun TelegramBot.send(
|
||||
chat = chat,
|
||||
draftId = draftId,
|
||||
separator = separator,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop,
|
||||
builderBody = builderBody
|
||||
@@ -2602,20 +2610,21 @@ public suspend fun TelegramBot.send(
|
||||
|
||||
/**
|
||||
* Will execute [sendRichMessageDraft] request
|
||||
* @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].
|
||||
*/
|
||||
public suspend fun TelegramBot.send(
|
||||
chatId: IdChatIdentifier,
|
||||
draftId: Long,
|
||||
richMessage: InputRichMessage,
|
||||
threadId: MessageThreadId? = chatId.threadId,
|
||||
directMessageThreadId: DirectMessageThreadId? = chatId.directMessageThreadId,
|
||||
canStop: Boolean? = null,
|
||||
keepOnStop: Boolean? = null
|
||||
): Unit = sendRichMessageDraft(
|
||||
chatId = chatId,
|
||||
draftId = draftId,
|
||||
richMessage = richMessage,
|
||||
threadId = threadId,
|
||||
directMessageThreadId = directMessageThreadId,
|
||||
canStop = canStop,
|
||||
keepOnStop = keepOnStop
|
||||
)
|
||||
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
package dev.inmo.tgbotapi.extensions.api.send
|
||||
|
||||
import dev.inmo.tgbotapi.bot.RequestsExecutor
|
||||
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||
import dev.inmo.tgbotapi.requests.send.SendMessageDraft
|
||||
import dev.inmo.tgbotapi.types.ChatIdWithChannelDirectMessageThreadId
|
||||
import dev.inmo.tgbotapi.types.DirectMessageThreadId
|
||||
import dev.inmo.tgbotapi.types.DraftId
|
||||
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.RawChatId
|
||||
import kotlin.coroutines.Continuation
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
import kotlin.coroutines.startCoroutine
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertIs
|
||||
import kotlin.test.assertSame
|
||||
|
||||
class SendMessageDraftTest {
|
||||
private object RequestCaptured : Throwable()
|
||||
|
||||
private class CapturingBot : RequestsExecutor {
|
||||
lateinit var request: Request<*>
|
||||
|
||||
override suspend fun <T : Any> execute(request: Request<T>): T {
|
||||
this.request = request
|
||||
throw RequestCaptured
|
||||
}
|
||||
|
||||
override fun close() = Unit
|
||||
}
|
||||
|
||||
private fun CapturingBot.capture(block: suspend CapturingBot.() -> Unit): Request<*> {
|
||||
var completion: Result<Unit>? = null
|
||||
block.startCoroutine(
|
||||
this,
|
||||
object : Continuation<Unit> {
|
||||
override val context = EmptyCoroutineContext
|
||||
|
||||
override fun resumeWith(result: Result<Unit>) {
|
||||
completion = result
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
val completed = completion ?: error("Request coroutine did not complete synchronously")
|
||||
assertSame(RequestCaptured, completed.exceptionOrNull())
|
||||
return request
|
||||
}
|
||||
|
||||
@Test
|
||||
fun directExtensionForwardsDirectMessageThreadId() {
|
||||
val chatId: IdChatIdentifier = ChatIdWithChannelDirectMessageThreadId(
|
||||
RawChatId(1L),
|
||||
DirectMessageThreadId(2L)
|
||||
)
|
||||
val request = assertIs<SendMessageDraft>(
|
||||
CapturingBot().capture {
|
||||
sendMessageDraft(
|
||||
chatId,
|
||||
DraftId(3L),
|
||||
"direct",
|
||||
directMessageThreadId = DirectMessageThreadId(7L)
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
assertEquals(chatId, request.chatId)
|
||||
assertEquals(DirectMessageThreadId(7L), request.directMessageThreadId)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun genericExtensionForwardsDirectMessageThreadId() {
|
||||
val chatId: IdChatIdentifier = ChatIdWithChannelDirectMessageThreadId(
|
||||
RawChatId(4L),
|
||||
DirectMessageThreadId(5L)
|
||||
)
|
||||
val request = assertIs<SendMessageDraft>(
|
||||
CapturingBot().capture {
|
||||
send(chatId, DraftId(6L), "generic")
|
||||
}
|
||||
)
|
||||
|
||||
assertEquals(chatId, request.chatId)
|
||||
assertEquals(DirectMessageThreadId(5L), request.directMessageThreadId)
|
||||
}
|
||||
}
|
||||
+12
-7
@@ -3,9 +3,9 @@ package dev.inmo.tgbotapi.extensions.api.send
|
||||
import dev.inmo.tgbotapi.bot.RequestsExecutor
|
||||
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||
import dev.inmo.tgbotapi.requests.send.SendRichMessageDraft
|
||||
import dev.inmo.tgbotapi.types.ChatIdWithThreadId
|
||||
import dev.inmo.tgbotapi.types.ChatIdWithChannelDirectMessageThreadId
|
||||
import dev.inmo.tgbotapi.types.DirectMessageThreadId
|
||||
import dev.inmo.tgbotapi.types.IdChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.RawChatId
|
||||
import dev.inmo.tgbotapi.types.rich.InputRichMessageHTML
|
||||
import kotlin.coroutines.Continuation
|
||||
@@ -50,20 +50,25 @@ class SendRichMessageDraftTest {
|
||||
|
||||
@Test
|
||||
fun directExtensionAcceptsIdChatIdentifier() {
|
||||
val chatId: IdChatIdentifier = ChatIdWithThreadId(RawChatId(1L), MessageThreadId(2L))
|
||||
val chatId: IdChatIdentifier = ChatIdWithChannelDirectMessageThreadId(RawChatId(1L), DirectMessageThreadId(2L))
|
||||
val request = assertIs<SendRichMessageDraft>(
|
||||
CapturingBot().capture {
|
||||
sendRichMessageDraft(chatId, 3L, InputRichMessageHTML("direct"))
|
||||
sendRichMessageDraft(
|
||||
chatId,
|
||||
3L,
|
||||
InputRichMessageHTML("direct"),
|
||||
directMessageThreadId = DirectMessageThreadId(7L)
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
assertEquals(chatId, request.chatId)
|
||||
assertEquals(MessageThreadId(2L), request.threadId)
|
||||
assertEquals(DirectMessageThreadId(7L), request.directMessageThreadId)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun genericExtensionAcceptsIdChatIdentifier() {
|
||||
val chatId: IdChatIdentifier = ChatIdWithThreadId(RawChatId(4L), MessageThreadId(5L))
|
||||
val chatId: IdChatIdentifier = ChatIdWithChannelDirectMessageThreadId(RawChatId(4L), DirectMessageThreadId(5L))
|
||||
val request = assertIs<SendRichMessageDraft>(
|
||||
CapturingBot().capture {
|
||||
send(chatId, 6L, InputRichMessageHTML("generic"))
|
||||
@@ -71,6 +76,6 @@ class SendRichMessageDraftTest {
|
||||
)
|
||||
|
||||
assertEquals(chatId, request.chatId)
|
||||
assertEquals(MessageThreadId(5L), request.threadId)
|
||||
assertEquals(DirectMessageThreadId(5L), request.directMessageThreadId)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user