mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-12-12 09:15:42 +00:00
improve messages hierarchy
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
package dev.inmo.tgbotapi.types.message.ChatEvents.suggested
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelDirectMessagesEvent
|
||||
import dev.inmo.tgbotapi.types.payments.SuggestedPostPrice
|
||||
import dev.inmo.tgbotapi.types.priceField
|
||||
import dev.inmo.tgbotapi.types.sendDateField
|
||||
@@ -23,7 +22,7 @@ data class SuggestedPostInfo(
|
||||
val price: SuggestedPostPrice? = null,
|
||||
@SerialName(sendDateField)
|
||||
val sendDate: Int? = null
|
||||
) : ChannelDirectMessagesEvent {
|
||||
) {
|
||||
@Serializable(State.Companion::class)
|
||||
sealed interface State {
|
||||
val name: String
|
||||
|
||||
@@ -6,6 +6,7 @@ import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.*
|
||||
import dev.inmo.tgbotapi.types.chat.CommonBot
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.suggested.SuggestedPostInfo
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.*
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
import kotlinx.serialization.SerialName
|
||||
@@ -332,6 +333,65 @@ data class FromChannelChannelDirectMessagesContentMessageImpl<T: MessageContent>
|
||||
)
|
||||
}
|
||||
|
||||
data class FromChannelSuggestedChannelDirectMessagesContentMessageImpl<T: MessageContent>(
|
||||
override val chat: PreviewChannelDirectMessagesChat,
|
||||
override val channel: PreviewChannelChat,
|
||||
override val messageId: MessageId,
|
||||
override val date: DateTime,
|
||||
override val directMessageTopic: DirectMessagesTopic,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyInfo: ReplyInfo?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val authorSignature: AuthorSignature?,
|
||||
override val mediaGroupId: MediaGroupId?,
|
||||
override val fromOffline: Boolean,
|
||||
override val suggestedPostInfo: SuggestedPostInfo,
|
||||
@SerialName(paidMessageStarCountField)
|
||||
override val cost: Int? = null,
|
||||
) : FromChannelSuggestedChannelDirectMessagesContentMessage<T> {
|
||||
constructor(
|
||||
chat: PreviewChannelDirectMessagesChat,
|
||||
channel: PreviewChannelChat,
|
||||
messageId: MessageId,
|
||||
date: DateTime,
|
||||
directMessageTopic: DirectMessagesTopic,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
authorSignature: AuthorSignature?,
|
||||
mediaGroupId: MediaGroupId?,
|
||||
fromOffline: Boolean,
|
||||
suggestedPostInfo: SuggestedPostInfo,
|
||||
cost: Int? = null,
|
||||
) : this(
|
||||
chat = chat,
|
||||
channel = channel,
|
||||
messageId = messageId,
|
||||
date = date,
|
||||
directMessageTopic = directMessageTopic,
|
||||
forwardOrigin = forwardInfo.messageOrigin(),
|
||||
editDate = editDate,
|
||||
hasProtectedContent = hasProtectedContent,
|
||||
replyInfo = replyTo ?.let { ReplyInfo.Internal(it) },
|
||||
replyMarkup = replyMarkup,
|
||||
content = content,
|
||||
senderBot = senderBot,
|
||||
authorSignature = authorSignature,
|
||||
mediaGroupId = mediaGroupId,
|
||||
fromOffline = fromOffline,
|
||||
suggestedPostInfo = suggestedPostInfo,
|
||||
cost = cost,
|
||||
)
|
||||
}
|
||||
|
||||
data class AnonymousForumContentMessageImpl<T : MessageContent>(
|
||||
override val chat: PreviewForumChat,
|
||||
override val messageId: MessageId,
|
||||
@@ -497,3 +557,63 @@ data class CommonChannelDirectMessagesContentMessageImpl<T : MessageContent>(
|
||||
cost = cost,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
data class CommonSuggestedChannelDirectMessagesContentMessageImpl<T : MessageContent>(
|
||||
override val chat: PreviewChannelDirectMessagesChat,
|
||||
override val messageId: MessageId,
|
||||
override val from: User,
|
||||
override val date: DateTime,
|
||||
override val directMessageTopic: DirectMessagesTopic,
|
||||
override val forwardOrigin: MessageOrigin?,
|
||||
override val editDate: DateTime?,
|
||||
override val hasProtectedContent: Boolean,
|
||||
override val replyInfo: ReplyInfo?,
|
||||
override val replyMarkup: InlineKeyboardMarkup?,
|
||||
override val content: T,
|
||||
override val senderBot: CommonBot?,
|
||||
override val mediaGroupId: MediaGroupId?,
|
||||
override val senderBoostsCount: Int?,
|
||||
override val fromOffline: Boolean,
|
||||
override val suggestedPostInfo: SuggestedPostInfo,
|
||||
@SerialName(paidMessageStarCountField)
|
||||
override val cost: Int? = null
|
||||
) : CommonSuggestedChannelDirectMessagesContentMessage<T> {
|
||||
constructor(
|
||||
chat: PreviewChannelDirectMessagesChat,
|
||||
messageId: MessageId,
|
||||
from: User,
|
||||
date: DateTime,
|
||||
directMessageTopic: DirectMessagesTopic,
|
||||
forwardInfo: ForwardInfo,
|
||||
editDate: DateTime?,
|
||||
hasProtectedContent: Boolean,
|
||||
replyTo: AccessibleMessage?,
|
||||
replyMarkup: InlineKeyboardMarkup?,
|
||||
content: T,
|
||||
senderBot: CommonBot?,
|
||||
mediaGroupId: MediaGroupId?,
|
||||
senderBoostsCount: Int?,
|
||||
fromOffline: Boolean,
|
||||
suggestedPostInfo: SuggestedPostInfo,
|
||||
cost: Int? = null,
|
||||
) : this(
|
||||
chat = chat,
|
||||
messageId = messageId,
|
||||
from = from,
|
||||
date = date,
|
||||
directMessageTopic = directMessageTopic,
|
||||
forwardOrigin = forwardInfo.messageOrigin(),
|
||||
editDate = editDate,
|
||||
hasProtectedContent = hasProtectedContent,
|
||||
replyInfo = replyTo ?.let { ReplyInfo.Internal(it) },
|
||||
replyMarkup = replyMarkup,
|
||||
content = content,
|
||||
senderBot = senderBot,
|
||||
mediaGroupId = mediaGroupId,
|
||||
senderBoostsCount = senderBoostsCount,
|
||||
fromOffline = fromOffline,
|
||||
suggestedPostInfo = suggestedPostInfo,
|
||||
cost = cost,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -331,7 +331,6 @@ internal data class RawMessage(
|
||||
checklist_tasks_done != null -> checklist_tasks_done
|
||||
checklist_tasks_added != null -> checklist_tasks_added
|
||||
direct_message_price_changed != null -> direct_message_price_changed
|
||||
suggested_post_info != null -> suggested_post_info
|
||||
suggested_post_approved != null -> suggested_post_approved
|
||||
suggested_post_approval_failed != null -> suggested_post_approval_failed
|
||||
suggested_post_declined != null -> suggested_post_declined
|
||||
@@ -408,44 +407,91 @@ internal data class RawMessage(
|
||||
val actualForumChat = when (chat) {
|
||||
is ChannelDirectMessagesChatImpl -> chat.copy(id = chatId)
|
||||
}
|
||||
when (sender_chat) {
|
||||
is PreviewChannelChat -> FromChannelChannelDirectMessagesContentMessageImpl(
|
||||
chat = actualForumChat,
|
||||
channel = sender_chat,
|
||||
messageId = messageId,
|
||||
date = date.asDate,
|
||||
directMessageTopic = direct_messages_topic,
|
||||
forwardOrigin = forward_origin,
|
||||
editDate = edit_date ?.asDate,
|
||||
hasProtectedContent = has_protected_content == true,
|
||||
replyInfo = replyInfo,
|
||||
replyMarkup = reply_markup,
|
||||
content = content,
|
||||
senderBot = via_bot,
|
||||
authorSignature = author_signature,
|
||||
mediaGroupId = media_group_id,
|
||||
fromOffline = is_from_offline,
|
||||
cost = paid_star_count,
|
||||
)
|
||||
is PreviewGroupChat,
|
||||
null -> CommonChannelDirectMessagesContentMessageImpl(
|
||||
chat = actualForumChat,
|
||||
messageId = messageId,
|
||||
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,
|
||||
forwardOrigin = forward_origin,
|
||||
editDate = edit_date ?.asDate,
|
||||
hasProtectedContent = has_protected_content == true,
|
||||
replyInfo = replyInfo,
|
||||
replyMarkup = reply_markup,
|
||||
content = content,
|
||||
senderBot = via_bot,
|
||||
mediaGroupId = media_group_id,
|
||||
senderBoostsCount = sender_boost_count,
|
||||
fromOffline = is_from_offline,
|
||||
cost = paid_star_count,
|
||||
)
|
||||
when (suggested_post_info) {
|
||||
null -> {
|
||||
when (sender_chat) {
|
||||
is PreviewChannelChat -> FromChannelChannelDirectMessagesContentMessageImpl(
|
||||
chat = actualForumChat,
|
||||
channel = sender_chat,
|
||||
messageId = messageId,
|
||||
date = date.asDate,
|
||||
directMessageTopic = direct_messages_topic,
|
||||
forwardOrigin = forward_origin,
|
||||
editDate = edit_date ?.asDate,
|
||||
hasProtectedContent = has_protected_content == true,
|
||||
replyInfo = replyInfo,
|
||||
replyMarkup = reply_markup,
|
||||
content = content,
|
||||
senderBot = via_bot,
|
||||
authorSignature = author_signature,
|
||||
mediaGroupId = media_group_id,
|
||||
fromOffline = is_from_offline,
|
||||
cost = paid_star_count,
|
||||
)
|
||||
is PreviewGroupChat,
|
||||
null -> CommonChannelDirectMessagesContentMessageImpl(
|
||||
chat = actualForumChat,
|
||||
messageId = messageId,
|
||||
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,
|
||||
forwardOrigin = forward_origin,
|
||||
editDate = edit_date ?.asDate,
|
||||
hasProtectedContent = has_protected_content == true,
|
||||
replyInfo = replyInfo,
|
||||
replyMarkup = reply_markup,
|
||||
content = content,
|
||||
senderBot = via_bot,
|
||||
mediaGroupId = media_group_id,
|
||||
senderBoostsCount = sender_boost_count,
|
||||
fromOffline = is_from_offline,
|
||||
cost = paid_star_count,
|
||||
)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
when (sender_chat) {
|
||||
is PreviewChannelChat -> FromChannelSuggestedChannelDirectMessagesContentMessageImpl(
|
||||
chat = actualForumChat,
|
||||
channel = sender_chat,
|
||||
messageId = messageId,
|
||||
date = date.asDate,
|
||||
directMessageTopic = direct_messages_topic,
|
||||
forwardOrigin = forward_origin,
|
||||
editDate = edit_date ?.asDate,
|
||||
hasProtectedContent = has_protected_content == true,
|
||||
replyInfo = replyInfo,
|
||||
replyMarkup = reply_markup,
|
||||
content = content,
|
||||
senderBot = via_bot,
|
||||
authorSignature = author_signature,
|
||||
mediaGroupId = media_group_id,
|
||||
fromOffline = is_from_offline,
|
||||
suggestedPostInfo = suggested_post_info,
|
||||
cost = paid_star_count,
|
||||
)
|
||||
is PreviewGroupChat,
|
||||
null -> CommonSuggestedChannelDirectMessagesContentMessageImpl(
|
||||
chat = actualForumChat,
|
||||
messageId = messageId,
|
||||
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,
|
||||
forwardOrigin = forward_origin,
|
||||
editDate = edit_date ?.asDate,
|
||||
hasProtectedContent = has_protected_content == true,
|
||||
replyInfo = replyInfo,
|
||||
replyMarkup = reply_markup,
|
||||
content = content,
|
||||
senderBot = via_bot,
|
||||
mediaGroupId = media_group_id,
|
||||
senderBoostsCount = sender_boost_count,
|
||||
fromOffline = is_from_offline,
|
||||
suggestedPostInfo = suggested_post_info,
|
||||
cost = paid_star_count,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
is PreviewPublicChat -> when (chat) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import dev.inmo.tgbotapi.types.DirectMessageThreadId
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.chat.*
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.forum.ForumTopicCreated
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.suggested.SuggestedPostInfo
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
sealed interface GroupContentMessage<T : MessageContent> : PublicContentMessage<T> {
|
||||
@@ -29,6 +30,9 @@ sealed interface ChannelDirectMessagesContentMessage<T : MessageContent> : Group
|
||||
val directMessageThreadId: DirectMessageThreadId
|
||||
get() = directMessageTopic.threadId
|
||||
}
|
||||
sealed interface SuggestedChannelDirectMessagesContentMessage<T : MessageContent> : ChannelDirectMessagesContentMessage<T> {
|
||||
val suggestedPostInfo: SuggestedPostInfo
|
||||
}
|
||||
|
||||
sealed interface FromChannelGroupContentMessage<T : MessageContent> : GroupContentMessage<T>, SignedMessage, WithSenderChatMessage {
|
||||
val channel: PreviewChannelChat
|
||||
@@ -50,6 +54,8 @@ interface FromChannelForumContentMessage<T: MessageContent> : FromChannelGroupCo
|
||||
|
||||
interface FromChannelChannelDirectMessagesContentMessage<T: MessageContent> : FromChannelGroupContentMessage<T>, ChannelDirectMessagesContentMessage<T>
|
||||
|
||||
interface FromChannelSuggestedChannelDirectMessagesContentMessage<T: MessageContent> : FromChannelGroupContentMessage<T>, SuggestedChannelDirectMessagesContentMessage<T>
|
||||
|
||||
interface AnonymousForumContentMessage<T : MessageContent> : ForumContentMessage<T>, SignedMessage, WithSenderChatMessage {
|
||||
override val senderChat: PreviewGroupChat
|
||||
get() = chat
|
||||
@@ -58,3 +64,5 @@ interface AnonymousForumContentMessage<T : MessageContent> : ForumContentMessage
|
||||
interface CommonForumContentMessage<T : MessageContent> : ForumContentMessage<T>, PotentiallyFromUserGroupContentMessage<T>, FromUserMessage
|
||||
|
||||
interface CommonChannelDirectMessagesContentMessage<T : MessageContent> : ChannelDirectMessagesContentMessage<T>, PotentiallyFromUserGroupContentMessage<T>, FromUserMessage
|
||||
|
||||
interface CommonSuggestedChannelDirectMessagesContentMessage<T : MessageContent> : SuggestedChannelDirectMessagesContentMessage<T>, PotentiallyFromUserGroupContentMessage<T>, FromUserMessage
|
||||
|
||||
@@ -224,5 +224,44 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
|
||||
fromOffline = sourceMessage.fromOffline,
|
||||
cost = sourceMessage.cost,
|
||||
)
|
||||
|
||||
is CommonSuggestedChannelDirectMessagesContentMessage<*> -> CommonSuggestedChannelDirectMessagesContentMessageImpl(
|
||||
chat = sourceMessage.chat,
|
||||
messageId = sourceMessage.messageId,
|
||||
from = sourceMessage.user,
|
||||
date = sourceMessage.date,
|
||||
directMessageTopic = sourceMessage.directMessageTopic,
|
||||
forwardOrigin = sourceMessage.forwardOrigin,
|
||||
editDate = sourceMessage.editDate,
|
||||
hasProtectedContent = sourceMessage.hasProtectedContent,
|
||||
replyInfo = sourceMessage.replyInfo,
|
||||
replyMarkup = sourceMessage.replyMarkup,
|
||||
content = content,
|
||||
senderBot = sourceMessage.senderBot,
|
||||
mediaGroupId = sourceMessage.mediaGroupId,
|
||||
senderBoostsCount = sourceMessage.senderBoostsCount,
|
||||
fromOffline = sourceMessage.fromOffline,
|
||||
suggestedPostInfo = sourceMessage.suggestedPostInfo,
|
||||
cost = sourceMessage.cost,
|
||||
)
|
||||
is FromChannelSuggestedChannelDirectMessagesContentMessage<*> -> FromChannelSuggestedChannelDirectMessagesContentMessageImpl(
|
||||
chat = sourceMessage.chat,
|
||||
channel = sourceMessage.channel,
|
||||
messageId = sourceMessage.messageId,
|
||||
date = sourceMessage.date,
|
||||
directMessageTopic = sourceMessage.directMessageTopic,
|
||||
forwardOrigin = sourceMessage.forwardOrigin,
|
||||
editDate = sourceMessage.editDate,
|
||||
hasProtectedContent = sourceMessage.hasProtectedContent,
|
||||
replyInfo = sourceMessage.replyInfo,
|
||||
replyMarkup = sourceMessage.replyMarkup,
|
||||
content = content,
|
||||
senderBot = sourceMessage.senderBot,
|
||||
authorSignature = sourceMessage.authorSignature,
|
||||
mediaGroupId = sourceMessage.mediaGroupId,
|
||||
fromOffline = sourceMessage.fromOffline,
|
||||
suggestedPostInfo = sourceMessage.suggestedPostInfo,
|
||||
cost = sourceMessage.cost,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user