1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-12-14 18:25:44 +00:00

Partially add DirectMessagesTopic

This commit is contained in:
2025-08-25 16:39:23 +06:00
parent b69be31362
commit 048f65b8d4
14 changed files with 121 additions and 34 deletions

View File

@@ -524,6 +524,7 @@ const val creatorField = "creator"
const val subscriptionPeriodField = "subscription_period"
const val subscriptionPriceField = "subscription_price"
const val copyTextField = "copy_text"
const val topicIdField = "topic_id"
const val isPublicField = "is_public"

View File

@@ -0,0 +1,17 @@
package dev.inmo.tgbotapi.types.chat
import dev.inmo.tgbotapi.abstracts.OptionallyWithUser
import dev.inmo.tgbotapi.types.MessageThreadId
import dev.inmo.tgbotapi.types.topicIdField
import dev.inmo.tgbotapi.types.userField
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class DirectMessagesTopic(
@SerialName(topicIdField)
val threadId: MessageThreadId,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(userField)
override val user: PreviewUser? = null,
) : OptionallyWithUser

View File

@@ -13,6 +13,7 @@ import kotlinx.serialization.Serializable
data class SuggestedPostApprovalFailed(
@SerialName(priceField) // TODO::Test that this field will never be null
val price: SuggestedPostPrice,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(suggestedPostMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
val suggestedPostMessage: ChannelDirectMessagesContentMessage<*>? = null,

View File

@@ -15,6 +15,7 @@ import kotlinx.serialization.Serializable
data class SuggestedPostApproved(
@SerialName(sendDateField)
val sendDate: TelegramDate,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(suggestedPostMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
val suggestedPostMessage: ChannelDirectMessagesContentMessage<*>? = null,

View File

@@ -10,6 +10,7 @@ import kotlinx.serialization.Serializable
@Serializable
data class SuggestedPostDeclined(
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(suggestedPostMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
val suggestedPostMessage: ChannelDirectMessagesContentMessage<*>? = null,

View File

@@ -30,12 +30,14 @@ sealed interface SuggestedPostPaid : Currencied, ChannelDirectMessagesEvent {
data class XTR(
@SerialName(starAmountField)
override val starAmount: StarAmount,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(suggestedPostMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
override val suggestedPostMessage: ChannelDirectMessagesContentMessage<*>? = null,
) : SuggestedPostPaid {
override val amount: Long?
get() = null
@Suppress("OPT_IN_USAGE")
@EncodeDefault
override val currency: Currency = Currency.XTR
}
@@ -43,12 +45,14 @@ sealed interface SuggestedPostPaid : Currencied, ChannelDirectMessagesEvent {
data class TON(
@SerialName(amountField)
override val amount: Long,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(suggestedPostMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
override val suggestedPostMessage: ChannelDirectMessagesContentMessage<*>? = null
) : SuggestedPostPaid {
override val starAmount: StarAmount?
get() = null
@Suppress("OPT_IN_USAGE")
@EncodeDefault
override val currency: Currency = Currency.TON
}
@@ -56,6 +60,7 @@ sealed interface SuggestedPostPaid : Currencied, ChannelDirectMessagesEvent {
data class Other(
@SerialName(currencyField)
override val currency: Currency,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(suggestedPostMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
override val suggestedPostMessage: ChannelDirectMessagesContentMessage<*>? = null,

View File

@@ -12,6 +12,7 @@ import kotlinx.serialization.Serializable
data class SuggestedPostRefunded(
@SerialName(reasonField)
val reason: String,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@SerialName(suggestedPostMessageField)
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
val suggestedPostMessage: ChannelDirectMessagesContentMessage<*>? = null

View File

@@ -282,6 +282,7 @@ data class FromChannelChannelDirectMessagesContentMessageImpl<T: MessageContent>
override val messageId: MessageId,
override val threadId: MessageThreadId,
override val date: DateTime,
override val directMessageTopic: DirectMessagesTopic,
override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
@@ -301,6 +302,7 @@ data class FromChannelChannelDirectMessagesContentMessageImpl<T: MessageContent>
messageId: MessageId,
threadId: MessageThreadId,
date: DateTime,
directMessageTopic: DirectMessagesTopic,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
@@ -318,6 +320,7 @@ data class FromChannelChannelDirectMessagesContentMessageImpl<T: MessageContent>
messageId = messageId,
threadId = threadId,
date = date,
directMessageTopic = directMessageTopic,
forwardOrigin = forwardInfo.messageOrigin(),
editDate = editDate,
hasProtectedContent = hasProtectedContent,
@@ -448,6 +451,7 @@ data class CommonChannelDirectMessagesContentMessageImpl<T : MessageContent>(
override val threadId: MessageThreadId,
override val from: User,
override val date: DateTime,
override val directMessageTopic: DirectMessagesTopic,
override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
@@ -467,6 +471,7 @@ data class CommonChannelDirectMessagesContentMessageImpl<T : MessageContent>(
threadId: MessageThreadId,
from: User,
date: DateTime,
directMessageTopic: DirectMessagesTopic,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
@@ -484,6 +489,7 @@ data class CommonChannelDirectMessagesContentMessageImpl<T : MessageContent>(
threadId = threadId,
from = from,
date = date,
directMessageTopic = directMessageTopic,
forwardOrigin = forwardInfo.messageOrigin(),
editDate = editDate,
hasProtectedContent = hasProtectedContent,

View File

@@ -62,6 +62,7 @@ internal data class RawMessage(
private val chat: PreviewChat,
@SerialName(messageThreadIdField)
private val messageThreadId: MessageThreadId? = null,
private val direct_messages_topic: DirectMessagesTopic? = null,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
private val from: PreviewUser? = null,
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
@@ -417,6 +418,7 @@ internal data class RawMessage(
)
is PreviewForumChat -> when(chat) {
is PreviewChannelDirectMessagesChat -> {
val messageThreadId = direct_messages_topic ?.threadId ?: messageThreadId
if (messageThreadId != null) {
val chatId = ChatIdWithThreadId(
chat.id.chatId,
@@ -432,6 +434,7 @@ internal data class RawMessage(
messageId = messageId,
threadId = messageThreadId,
date = date.asDate,
directMessageTopic = direct_messages_topic ?: error("direct_messages_topic must be presented for FromChannelChannelDirectMessagesContentMessage"),
forwardOrigin = forward_origin,
editDate = edit_date ?.asDate,
hasProtectedContent = has_protected_content == true,
@@ -451,6 +454,7 @@ internal data class RawMessage(
threadId = messageThreadId,
from = checkedFrom ?: from ?: error("It is expected that in direct channel messages from non anonymous channels user must be specified"),
date = date.asDate,
directMessageTopic = direct_messages_topic ?: error("direct_messages_topic must be presented for CommonChannelDirectMessagesContentMessage"),
forwardOrigin = forward_origin,
editDate = edit_date ?.asDate,
hasProtectedContent = has_protected_content == true,

View File

@@ -24,6 +24,7 @@ sealed interface ForumContentMessage<T : MessageContent> : GroupContentMessage<T
sealed interface ChannelDirectMessagesContentMessage<T : MessageContent> : ForumContentMessage<T>, PossiblyTopicMessage {
override val chat: PreviewChannelDirectMessagesChat
val directMessageTopic: DirectMessagesTopic
}
sealed interface FromChannelGroupContentMessage<T : MessageContent> : GroupContentMessage<T>, SignedMessage, WithSenderChatMessage {

View File

@@ -175,6 +175,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
threadId = sourceMessage.threadId,
from = sourceMessage.user,
date = sourceMessage.date,
directMessageTopic = sourceMessage.directMessageTopic,
forwardOrigin = sourceMessage.forwardOrigin,
editDate = sourceMessage.editDate,
hasProtectedContent = sourceMessage.hasProtectedContent,
@@ -212,6 +213,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
messageId = sourceMessage.messageId,
threadId = sourceMessage.threadId,
date = sourceMessage.date,
directMessageTopic = sourceMessage.directMessageTopic,
forwardOrigin = sourceMessage.forwardOrigin,
editDate = sourceMessage.editDate,
hasProtectedContent = sourceMessage.hasProtectedContent,