diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessageImpl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ConnectedChannelContentMessageImpl.kt similarity index 76% rename from tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessageImpl.kt rename to tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ConnectedChannelContentMessageImpl.kt index 6a0552ac1e..b45675fa97 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessageImpl.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ConnectedChannelContentMessageImpl.kt @@ -4,11 +4,10 @@ import com.soywiz.klock.DateTime import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup import dev.inmo.tgbotapi.types.chat.abstracts.ChannelChat -import dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage -import dev.inmo.tgbotapi.types.message.abstracts.Message +import dev.inmo.tgbotapi.types.message.abstracts.* import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent -data class ChannelContentMessageImpl( +data class ConnectedChannelContentMessageImpl( override val messageId: MessageIdentifier, override val chat: ChannelChat, override val content: T, @@ -19,4 +18,4 @@ data class ChannelContentMessageImpl( override val replyMarkup: InlineKeyboardMarkup?, override val senderBot: CommonBot?, override val authorSignature: AuthorSignature? -) : ChannelContentMessage +) : ConnectedChannelContentMessage diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/RawMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/RawMessage.kt index c17051fd19..ba75c22fde 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/RawMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/RawMessage.kt @@ -42,6 +42,7 @@ internal data class RawMessage( 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 reply_to_message: RawMessage? = null, private val via_bot: CommonBot? = null, private val edit_date: TelegramDate? = null, @@ -269,18 +270,33 @@ internal data class RawMessage( } } ?: when (chat) { is PublicChat -> when (chat) { - is ChannelChat -> ChannelContentMessageImpl( - messageId, - chat, - content, - date.asDate, - edit_date?.asDate, - forwarded, - reply_to_message?.asMessage, - reply_markup, - via_bot, - author_signature - ) + is ChannelChat -> if (is_automatic_forward == true) { + ConnectedChannelContentMessageImpl( + messageId, + chat, + content, + date.asDate, + edit_date?.asDate, + forwarded, + reply_to_message?.asMessage, + reply_markup, + via_bot, + author_signature + ) + } else { + UnconnectedChannelContentMessageImpl( + messageId, + chat, + content, + date.asDate, + edit_date?.asDate, + forwarded, + reply_to_message?.asMessage, + reply_markup, + via_bot, + author_signature + ) + } is GroupChat -> when (sender_chat) { is ChannelChat -> FromChannelGroupContentMessageImpl( chat, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/UnconnectedChannelContentMessageImpl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/UnconnectedChannelContentMessageImpl.kt new file mode 100644 index 0000000000..1e1570cea8 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/UnconnectedChannelContentMessageImpl.kt @@ -0,0 +1,24 @@ +package dev.inmo.tgbotapi.types.message + +import com.soywiz.klock.DateTime +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup +import dev.inmo.tgbotapi.types.chat.abstracts.ChannelChat +import dev.inmo.tgbotapi.types.message.abstracts.* +import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent + +data class UnconnectedChannelContentMessageImpl( + override val messageId: MessageIdentifier, + override val chat: ChannelChat, + override val content: T, + override val date: DateTime, + override val editDate: DateTime?, + override val forwardInfo: ForwardInfo?, + override val replyTo: Message?, + override val replyMarkup: InlineKeyboardMarkup?, + override val senderBot: CommonBot?, + override val authorSignature: AuthorSignature? +) : UnconnectedChannelContentMessage + +@Deprecated("Renamed to UnconnectedChannelContentMessage", ReplaceWith("UnconnectedChannelContentMessage", "dev.inmo.tgbotapi.types.message.UnconnectedChannelContentMessageImpl")) +typealias ChannelContentMessageImpl = UnconnectedChannelContentMessage diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ChannelMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ChannelContentMessage.kt similarity index 73% rename from tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ChannelMessage.kt rename to tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ChannelContentMessage.kt index a7ddbc6e66..2cc958d347 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ChannelMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ChannelContentMessage.kt @@ -4,7 +4,7 @@ import dev.inmo.tgbotapi.types.chat.abstracts.ChannelChat import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent import dev.inmo.tgbotapi.types.message.content.abstracts.PossiblySentViaBotCommonMessage -interface ChannelContentMessage : PossiblySentViaBotCommonMessage, SignedMessage, WithSenderChatMessage { +sealed interface ChannelContentMessage : PossiblySentViaBotCommonMessage, SignedMessage, WithSenderChatMessage { override val chat: ChannelChat override val senderChat: ChannelChat get() = chat diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ConnectedChannelContentMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ConnectedChannelContentMessage.kt new file mode 100644 index 0000000000..27fa4dc2e6 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ConnectedChannelContentMessage.kt @@ -0,0 +1,5 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent + +interface ConnectedChannelContentMessage : ChannelContentMessage diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/UnconnectedChannelContentMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/UnconnectedChannelContentMessage.kt new file mode 100644 index 0000000000..c9b8b346cd --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/UnconnectedChannelContentMessage.kt @@ -0,0 +1,5 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent + +interface UnconnectedChannelContentMessage : ChannelContentMessage diff --git a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCasts.kt b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCasts.kt index d10233d1e5..1d1d559479 100644 --- a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCasts.kt +++ b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/ClassCasts.kt @@ -915,15 +915,15 @@ inline fun Message.requireAnonymousGroupContentMessageImpl(): AnonymousGroupCont this as AnonymousGroupContentMessageImpl @PreviewFeature -inline fun Message.whenChannelContentMessageImpl(block: (ChannelContentMessageImpl) -> T) = asChannelContentMessageImpl() ?.let(block) +inline fun Message.whenChannelContentMessageImpl(block: (UnconnectedChannelContentMessageImpl) -> T) = asChannelContentMessageImpl() ?.let(block) @PreviewFeature -inline fun Message.asChannelContentMessageImpl(): ChannelContentMessageImpl? = - this as? ChannelContentMessageImpl +inline fun Message.asChannelContentMessageImpl(): UnconnectedChannelContentMessageImpl? = + this as? UnconnectedChannelContentMessageImpl @PreviewFeature -inline fun Message.requireChannelContentMessageImpl(): ChannelContentMessageImpl = - this as ChannelContentMessageImpl +inline fun Message.requireChannelContentMessageImpl(): UnconnectedChannelContentMessageImpl = + this as UnconnectedChannelContentMessageImpl @PreviewFeature inline fun Message.whenFromChannelGroupContentMessageImpl(block: (FromChannelGroupContentMessageImpl) -> T) = asFromChannelGroupContentMessageImpl() ?.let(block) @@ -1027,11 +1027,33 @@ inline fun Message.whenChannelContentMessage(block: (ChannelContentMessage? = - this as? ChannelContentMessageImpl + this as? ChannelContentMessage @PreviewFeature -inline fun Message.requireChannelContentMessage(): ChannelContentMessageImpl = - this as ChannelContentMessageImpl +inline fun Message.requireChannelContentMessage(): ChannelContentMessage = + this as ChannelContentMessage + +@PreviewFeature +inline fun Message.whenConnectedChannelContentMessage(block: (ConnectedChannelContentMessage) -> T) = asConnectedChannelContentMessage() ?.let(block) + +@PreviewFeature +inline fun Message.asConnectedChannelContentMessage(): ConnectedChannelContentMessage? = + this as? ConnectedChannelContentMessageImpl + +@PreviewFeature +inline fun Message.requireConnectedChannelContentMessage(): ConnectedChannelContentMessage = + this as ConnectedChannelContentMessage + +@PreviewFeature +inline fun Message.whenUnconnectedChannelContentMessage(block: (UnconnectedChannelContentMessage) -> T) = asUnconnectedChannelContentMessage() ?.let(block) + +@PreviewFeature +inline fun Message.asUnconnectedChannelContentMessage(): UnconnectedChannelContentMessage? = + this as? UnconnectedChannelContentMessage + +@PreviewFeature +inline fun Message.requireUnconnectedChannelContentMessage(): UnconnectedChannelContentMessage = + this as UnconnectedChannelContentMessage @PreviewFeature inline fun Message.whenChatEventMessage(block: (ChatEventMessage) -> T) = asChatEventMessage() ?.let(block)