1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2024-11-22 16:23:48 +00:00

add support of MessageOrigin

This commit is contained in:
InsanusMokrassar 2024-01-07 17:12:37 +06:00
parent b5f4219635
commit 6c76e1c47a
9 changed files with 351 additions and 86 deletions

View File

@ -201,6 +201,10 @@ const val tgWebAppStartParamField = "tgWebAppStartParam"
const val chatIdField = "chat_id" const val chatIdField = "chat_id"
const val senderChatIdField = "sender_chat_id" const val senderChatIdField = "sender_chat_id"
const val senderChatField = "sender_chat"
const val authorSignatureField = "author_signature"
const val senderUserField = "sender_user"
const val senderUserNameField = "sender_user_name"
const val messageIdField = "message_id" const val messageIdField = "message_id"
const val giveawayMessageIdField = "giveaway_message_id" const val giveawayMessageIdField = "giveaway_message_id"
const val messageIdsField = "message_ids" const val messageIdsField = "message_ids"

View File

@ -15,10 +15,27 @@ data class ChannelContentMessageImpl<T: MessageContent>(
override val date: DateTime, override val date: DateTime,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?, override val replyMarkup: InlineKeyboardMarkup?,
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val authorSignature: AuthorSignature?, override val authorSignature: AuthorSignature?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : ChannelContentMessage<T> ) : ChannelContentMessage<T> {
constructor(
messageId: MessageId,
chat: PreviewChannelChat,
content: T,
date: DateTime,
editDate: DateTime?,
hasProtectedContent: Boolean,
forwardInfo: ForwardInfo,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
senderBot: CommonBot?,
authorSignature: AuthorSignature?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
messageId, chat, content, date, editDate, hasProtectedContent, forwardInfo.messageOrigin(), replyTo, replyMarkup, senderBot, authorSignature, mediaGroupId
)
}

View File

@ -57,3 +57,55 @@ sealed interface ForwardInfo {
} }
} }
} }
fun MessageOrigin.forwardInfo() = when(this) {
is MessageOrigin.HiddenUser -> ForwardInfo.ByAnonymous(
date,
name
)
is MessageOrigin.Public.Channel -> ForwardInfo.PublicChat.FromChannel(
date,
messageId,
chat,
authorSignature
)
is MessageOrigin.Public.Sender -> when (chat) {
is ChannelChat -> ForwardInfo.PublicChat.SentByChannel(
date,
chat
)
is SupergroupChat -> ForwardInfo.PublicChat.FromSupergroup(
date,
chat
)
}
is MessageOrigin.User -> ForwardInfo.ByUser(
date,
user
)
}
fun ForwardInfo.messageOrigin() = when (this) {
is ForwardInfo.ByAnonymous -> MessageOrigin.HiddenUser(
senderName,
dateOfOriginal
)
is ForwardInfo.ByUser -> MessageOrigin.User(
user,
dateOfOriginal
)
is ForwardInfo.PublicChat.FromChannel -> MessageOrigin.Public.Channel(
channelChat,
messageId,
dateOfOriginal,
signature
)
is ForwardInfo.PublicChat.FromSupergroup -> MessageOrigin.Public.Sender(
group,
dateOfOriginal
)
is ForwardInfo.PublicChat.SentByChannel -> MessageOrigin.Public.Sender(
channelChat,
dateOfOriginal
)
}

View File

@ -14,7 +14,7 @@ data class ConnectedFromChannelGroupContentMessageImpl<T : MessageContent>(
override val channel: PreviewChannelChat, override val channel: PreviewChannelChat,
override val messageId: MessageId, override val messageId: MessageId,
override val date: DateTime, override val date: DateTime,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
@ -23,14 +23,33 @@ data class ConnectedFromChannelGroupContentMessageImpl<T : MessageContent>(
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val authorSignature: AuthorSignature?, override val authorSignature: AuthorSignature?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : ConnectedFromChannelGroupContentMessage<T> ) : ConnectedFromChannelGroupContentMessage<T> {
constructor(
chat: PreviewGroupChat,
channel: PreviewChannelChat,
messageId: MessageId,
date: DateTime,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
content: T,
senderBot: CommonBot?,
authorSignature: AuthorSignature?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
chat, channel, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
)
}
data class UnconnectedFromChannelGroupContentMessageImpl<T: MessageContent>( data class UnconnectedFromChannelGroupContentMessageImpl<T: MessageContent>(
override val chat: PreviewGroupChat, override val chat: PreviewGroupChat,
override val channel: PreviewChannelChat, override val channel: PreviewChannelChat,
override val messageId: MessageId, override val messageId: MessageId,
override val date: DateTime, override val date: DateTime,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
@ -39,13 +58,31 @@ data class UnconnectedFromChannelGroupContentMessageImpl<T: MessageContent>(
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val authorSignature: AuthorSignature?, override val authorSignature: AuthorSignature?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : UnconnectedFromChannelGroupContentMessage<T> ) : UnconnectedFromChannelGroupContentMessage<T> {
constructor(
chat: PreviewGroupChat,
channel: PreviewChannelChat,
messageId: MessageId,
date: DateTime,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
content: T,
senderBot: CommonBot?,
authorSignature: AuthorSignature?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
chat, channel, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
)
}
data class AnonymousGroupContentMessageImpl<T : MessageContent>( data class AnonymousGroupContentMessageImpl<T : MessageContent>(
override val chat: PreviewGroupChat, override val chat: PreviewGroupChat,
override val messageId: MessageId, override val messageId: MessageId,
override val date: DateTime, override val date: DateTime,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
@ -54,14 +91,31 @@ data class AnonymousGroupContentMessageImpl<T : MessageContent>(
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val authorSignature: AuthorSignature?, override val authorSignature: AuthorSignature?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : AnonymousGroupContentMessage<T> ) : AnonymousGroupContentMessage<T> {
constructor(
chat: PreviewGroupChat,
messageId: MessageId,
date: DateTime,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
content: T,
senderBot: CommonBot?,
authorSignature: AuthorSignature?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
chat, messageId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
)
}
data class CommonGroupContentMessageImpl<T : MessageContent>( data class CommonGroupContentMessageImpl<T : MessageContent>(
override val chat: PreviewGroupChat, override val chat: PreviewGroupChat,
override val messageId: MessageId, override val messageId: MessageId,
override val from: User, override val from: User,
override val date: DateTime, override val date: DateTime,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
@ -69,7 +123,24 @@ data class CommonGroupContentMessageImpl<T : MessageContent>(
override val content: T, override val content: T,
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : CommonGroupContentMessage<T> ) : CommonGroupContentMessage<T> {
constructor(
chat: PreviewGroupChat,
messageId: MessageId,
from: User,
date: DateTime,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
content: T,
senderBot: CommonBot?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
chat, messageId, from, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, mediaGroupId
)
}
data class FromChannelForumContentMessageImpl<T: MessageContent>( data class FromChannelForumContentMessageImpl<T: MessageContent>(
override val chat: PreviewForumChat, override val chat: PreviewForumChat,
@ -77,7 +148,7 @@ data class FromChannelForumContentMessageImpl<T: MessageContent>(
override val messageId: MessageId, override val messageId: MessageId,
override val threadId: MessageThreadId, override val threadId: MessageThreadId,
override val date: DateTime, override val date: DateTime,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
@ -86,14 +157,33 @@ data class FromChannelForumContentMessageImpl<T: MessageContent>(
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val authorSignature: AuthorSignature?, override val authorSignature: AuthorSignature?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : FromChannelForumContentMessage<T> ) : FromChannelForumContentMessage<T> {
constructor(
chat: PreviewForumChat,
channel: PreviewChannelChat,
messageId: MessageId,
threadId: MessageThreadId,
date: DateTime,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
content: T,
senderBot: CommonBot?,
authorSignature: AuthorSignature?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
chat, channel, messageId, threadId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
)
}
data class AnonymousForumContentMessageImpl<T : MessageContent>( data class AnonymousForumContentMessageImpl<T : MessageContent>(
override val chat: PreviewForumChat, override val chat: PreviewForumChat,
override val messageId: MessageId, override val messageId: MessageId,
override val threadId: MessageThreadId, override val threadId: MessageThreadId,
override val date: DateTime, override val date: DateTime,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
@ -102,7 +192,25 @@ data class AnonymousForumContentMessageImpl<T : MessageContent>(
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val authorSignature: AuthorSignature?, override val authorSignature: AuthorSignature?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : AnonymousForumContentMessage<T> ) : AnonymousForumContentMessage<T> {
constructor(
chat: PreviewForumChat,
messageId: MessageId,
threadId: MessageThreadId,
date: DateTime,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
content: T,
senderBot: CommonBot?,
authorSignature: AuthorSignature?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
chat, messageId, threadId, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, authorSignature, mediaGroupId
)
}
data class CommonForumContentMessageImpl<T : MessageContent>( data class CommonForumContentMessageImpl<T : MessageContent>(
override val chat: PreviewForumChat, override val chat: PreviewForumChat,
@ -110,7 +218,7 @@ data class CommonForumContentMessageImpl<T : MessageContent>(
override val threadId: MessageThreadId, override val threadId: MessageThreadId,
override val from: User, override val from: User,
override val date: DateTime, override val date: DateTime,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
@ -118,4 +226,22 @@ data class CommonForumContentMessageImpl<T : MessageContent>(
override val content: T, override val content: T,
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : CommonForumContentMessage<T> ) : CommonForumContentMessage<T> {
constructor(
chat: PreviewForumChat,
messageId: MessageId,
threadId: MessageThreadId,
from: User,
date: DateTime,
forwardInfo: ForwardInfo,
editDate: DateTime?,
hasProtectedContent: Boolean,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
content: T,
senderBot: CommonBot?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
chat, messageId, threadId, from, date, forwardInfo.messageOrigin(), editDate, hasProtectedContent, replyTo, replyMarkup, content, senderBot, mediaGroupId
)
}

View File

@ -0,0 +1,89 @@
package dev.inmo.tgbotapi.types.message
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.chat.*
import kotlinx.serialization.Required
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
sealed interface MessageOrigin {
val type: String
val date: TelegramDate
@Serializable
data class User(
@SerialName(senderUserField)
val user: dev.inmo.tgbotapi.types.chat.User,
@SerialName(dateField)
override val date: TelegramDate
) : MessageOrigin {
@SerialName(typeField)
@Required
override val type: String = Companion.type
companion object {
val type: String = "user"
}
}
@Serializable
data class HiddenUser(
@SerialName(senderUserNameField)
val name: String,
@SerialName(dateField)
override val date: TelegramDate
) : MessageOrigin {
@SerialName(typeField)
@Required
override val type: String = Companion.type
companion object {
val type: String = "hidden_user"
}
}
@Serializable
sealed interface Public : MessageOrigin {
val chat: PublicChat
val authorSignature: AuthorSignature?
@Serializable
data class Sender(
@SerialName(senderChatField)
override val chat: SuperPublicChat,
@SerialName(dateField)
override val date: TelegramDate,
@SerialName(authorSignatureField)
override val authorSignature: AuthorSignature? = null
) : Public {
@SerialName(typeField)
@Required
override val type: String = Companion.type
companion object {
val type: String = "chat"
}
}
@Serializable
data class Channel(
@SerialName(chatField)
override val chat: ChannelChat,
@SerialName(messageIdField)
val messageId: MessageId,
@SerialName(dateField)
override val date: TelegramDate,
@SerialName(authorSignatureField)
override val authorSignature: AuthorSignature? = null
) : Public {
@SerialName(typeField)
@Required
override val type: String = Companion.type
companion object {
val type: String = "channel"
}
}
}
}

View File

@ -18,9 +18,26 @@ data class PrivateContentMessageImpl<T: MessageContent>(
override val date: DateTime, override val date: DateTime,
override val editDate: DateTime?, override val editDate: DateTime?,
override val hasProtectedContent: Boolean, override val hasProtectedContent: Boolean,
override val forwardInfo: ForwardInfo?, override val forwardOrigin: MessageOrigin?,
override val replyTo: AccessibleMessage?, override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?, override val replyMarkup: InlineKeyboardMarkup?,
override val senderBot: CommonBot?, override val senderBot: CommonBot?,
override val mediaGroupId: MediaGroupIdentifier?, override val mediaGroupId: MediaGroupIdentifier?,
) : PrivateContentMessage<T> ) : PrivateContentMessage<T> {
constructor(
messageId: MessageId,
from: User,
chat: PreviewPrivateChat,
content: T,
date: DateTime,
editDate: DateTime?,
hasProtectedContent: Boolean,
forwardInfo: ForwardInfo,
replyTo: AccessibleMessage?,
replyMarkup: InlineKeyboardMarkup?,
senderBot: CommonBot?,
mediaGroupId: MediaGroupIdentifier?,
) : this(
messageId, from, chat, content, date, editDate, hasProtectedContent, forwardInfo.messageOrigin(), replyTo, replyMarkup, senderBot, mediaGroupId
)
}

View File

@ -52,12 +52,8 @@ internal data class RawMessage(
private val messageThreadId: MessageThreadId? = null, private val messageThreadId: MessageThreadId? = null,
private val from: User? = null, private val from: User? = null,
private val sender_chat: PreviewPublicChat? = null, private val sender_chat: PreviewPublicChat? = null,
private val forward_from: User? = null, private val forward_origin: MessageOrigin? = null,
private val forward_from_chat: Chat? = null, private val is_topic_message: Boolean? = null,
private val forward_from_message_id: MessageId? = null,
private val forward_signature: ForwardSignature? = null,
private val forward_sender_name: ForwardSenderName? = null,
private val forward_date: TelegramDate? = null,
private val is_automatic_forward: Boolean? = null, private val is_automatic_forward: Boolean? = null,
private val reply_to_message: RawMessage? = null, private val reply_to_message: RawMessage? = null,
private val via_bot: CommonBot? = null, private val via_bot: CommonBot? = null,
@ -201,44 +197,6 @@ internal data class RawMessage(
} }
} }
private val forwarded: ForwardInfo? by lazy {
forward_date
?: return@lazy null // According to the documentation, now any forwarded message contains this field
when {
forward_sender_name != null -> ForwardInfo.ByAnonymous(
forward_date,
forward_sender_name
)
forward_from_chat is ChannelChat -> if (forward_from_message_id == null) {
ForwardInfo.PublicChat.SentByChannel(
forward_date,
forward_from_chat,
forward_signature
)
} else {
ForwardInfo.PublicChat.FromChannel(
forward_date,
forward_from_message_id,
forward_from_chat,
forward_signature
)
}
forward_from_chat is SupergroupChat -> ForwardInfo.PublicChat.FromSupergroup(
forward_date,
forward_from_chat
)
forward_from != null -> ForwardInfo.ByUser(
forward_date,
forward_from
)
else -> null
}
}
private val chatEvent: ChatEvent? by lazy { private val chatEvent: ChatEvent? by lazy {
when { when {
new_chat_members != null -> NewChatMembers(new_chat_members.toList()) new_chat_members != null -> NewChatMembers(new_chat_members.toList())
@ -334,7 +292,7 @@ internal data class RawMessage(
date.asDate, date.asDate,
edit_date?.asDate, edit_date?.asDate,
has_protected_content == true, has_protected_content == true,
forwarded, forward_origin,
reply_to_message?.asMessage, reply_to_message?.asMessage,
reply_markup, reply_markup,
via_bot, via_bot,
@ -356,7 +314,7 @@ internal data class RawMessage(
messageId, messageId,
messageThreadId, messageThreadId,
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -371,7 +329,7 @@ internal data class RawMessage(
messageId, messageId,
messageThreadId, messageThreadId,
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -387,7 +345,7 @@ internal data class RawMessage(
messageThreadId, messageThreadId,
from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"), from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"),
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -405,7 +363,7 @@ internal data class RawMessage(
sender_chat, sender_chat,
messageId, messageId,
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -421,7 +379,7 @@ internal data class RawMessage(
sender_chat, sender_chat,
messageId, messageId,
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -436,7 +394,7 @@ internal data class RawMessage(
chat, chat,
messageId, messageId,
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -451,7 +409,7 @@ internal data class RawMessage(
messageId, messageId,
from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"), from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"),
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -469,7 +427,7 @@ internal data class RawMessage(
sender_chat, sender_chat,
messageId, messageId,
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -485,7 +443,7 @@ internal data class RawMessage(
sender_chat, sender_chat,
messageId, messageId,
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -500,7 +458,7 @@ internal data class RawMessage(
chat, chat,
messageId, messageId,
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -515,7 +473,7 @@ internal data class RawMessage(
messageId, messageId,
from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"), from ?: error("It is expected that in messages from non anonymous users and channels user must be specified"),
date.asDate, date.asDate,
forwarded, forward_origin,
edit_date ?.asDate, edit_date ?.asDate,
has_protected_content == true, has_protected_content == true,
reply_to_message ?.asMessage, reply_to_message ?.asMessage,
@ -534,7 +492,7 @@ internal data class RawMessage(
date.asDate, date.asDate,
edit_date?.asDate, edit_date?.asDate,
has_protected_content == true, has_protected_content == true,
forwarded, forward_origin,
reply_to_message?.asMessage, reply_to_message?.asMessage,
reply_markup, reply_markup,
via_bot, via_bot,

View File

@ -1,7 +1,11 @@
package dev.inmo.tgbotapi.types.message.abstracts package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.message.ForwardInfo import dev.inmo.tgbotapi.types.message.ForwardInfo
import dev.inmo.tgbotapi.types.message.MessageOrigin
import dev.inmo.tgbotapi.types.message.forwardInfo
interface PossiblyForwardedMessage : AccessibleMessage { interface PossiblyForwardedMessage : AccessibleMessage {
val forwardOrigin: MessageOrigin?
val forwardInfo: ForwardInfo? val forwardInfo: ForwardInfo?
get() = forwardOrigin ?.forwardInfo()
} }

View File

@ -1,6 +1,5 @@
package dev.inmo.tgbotapi.utils.extensions package dev.inmo.tgbotapi.utils.extensions
import dev.inmo.tgbotapi.types.MediaGroupIdentifier
import dev.inmo.tgbotapi.types.message.AnonymousForumContentMessageImpl import dev.inmo.tgbotapi.types.message.AnonymousForumContentMessageImpl
import dev.inmo.tgbotapi.types.message.AnonymousGroupContentMessageImpl import dev.inmo.tgbotapi.types.message.AnonymousGroupContentMessageImpl
import dev.inmo.tgbotapi.types.message.ChannelContentMessageImpl import dev.inmo.tgbotapi.types.message.ChannelContentMessageImpl
@ -15,7 +14,6 @@ import dev.inmo.tgbotapi.types.message.abstracts.AnonymousGroupContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage import dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.CommonForumContentMessage import dev.inmo.tgbotapi.types.message.abstracts.CommonForumContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage import dev.inmo.tgbotapi.types.message.abstracts.CommonGroupContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
import dev.inmo.tgbotapi.types.message.abstracts.ConnectedFromChannelGroupContentMessage import dev.inmo.tgbotapi.types.message.abstracts.ConnectedFromChannelGroupContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.FromChannelForumContentMessage import dev.inmo.tgbotapi.types.message.abstracts.FromChannelForumContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage
@ -41,7 +39,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.date, sourceMessage.date,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.replyTo, sourceMessage.replyTo,
sourceMessage.replyMarkup, sourceMessage.replyMarkup,
sourceMessage.senderBot, sourceMessage.senderBot,
@ -56,7 +54,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.date, sourceMessage.date,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.replyTo, sourceMessage.replyTo,
sourceMessage.replyMarkup, sourceMessage.replyMarkup,
sourceMessage.senderBot, sourceMessage.senderBot,
@ -66,7 +64,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.chat, sourceMessage.chat,
sourceMessage.messageId, sourceMessage.messageId,
sourceMessage.date, sourceMessage.date,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.replyTo, sourceMessage.replyTo,
@ -81,7 +79,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.messageId, sourceMessage.messageId,
sourceMessage.user, sourceMessage.user,
sourceMessage.date, sourceMessage.date,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.replyTo, sourceMessage.replyTo,
@ -95,7 +93,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.channel, sourceMessage.channel,
sourceMessage.messageId, sourceMessage.messageId,
sourceMessage.date, sourceMessage.date,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.replyTo, sourceMessage.replyTo,
@ -110,7 +108,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.channel, sourceMessage.channel,
sourceMessage.messageId, sourceMessage.messageId,
sourceMessage.date, sourceMessage.date,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.replyTo, sourceMessage.replyTo,
@ -125,7 +123,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.messageId, sourceMessage.messageId,
sourceMessage.threadId, sourceMessage.threadId,
sourceMessage.date, sourceMessage.date,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.replyTo, sourceMessage.replyTo,
@ -141,7 +139,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.threadId, sourceMessage.threadId,
sourceMessage.user, sourceMessage.user,
sourceMessage.date, sourceMessage.date,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.replyTo, sourceMessage.replyTo,
@ -156,7 +154,7 @@ fun <T : MediaGroupPartContent> List<PossiblySentViaBotCommonMessage<T>>.asMedia
sourceMessage.messageId, sourceMessage.messageId,
sourceMessage.threadId, sourceMessage.threadId,
sourceMessage.date, sourceMessage.date,
sourceMessage.forwardInfo, sourceMessage.forwardOrigin,
sourceMessage.editDate, sourceMessage.editDate,
sourceMessage.hasProtectedContent, sourceMessage.hasProtectedContent,
sourceMessage.replyTo, sourceMessage.replyTo,