From ff34b23777b9652301e0d35e951b7049e77d6ce8 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 5 Nov 2020 12:39:59 +0600 Subject: [PATCH] implementation of sender_chat and author_signature --- CHANGELOG.md | 15 ++++ ...hannelMessage.kt => ChannelMessageImpl.kt} | 13 +++- .../tgbotapi/types/message/GroupMessages.kt | 49 ++++++++++++ ...onMessageImpl.kt => PrivateMessageImpl.kt} | 10 ++- .../inmo/tgbotapi/types/message/RawMessage.kt | 75 ++++++++++++++----- .../types/message/abstracts/ChannelMessage.kt | 12 +++ .../types/message/abstracts/GroupMessages.kt | 19 +++++ .../types/message/abstracts/PrivateMessage.kt | 6 ++ .../types/message/abstracts/PublicMessage.kt | 9 +++ .../types/message/abstracts/SignedMessage.kt | 7 ++ .../abstracts/WithSenderChatMessage.kt | 7 ++ 11 files changed, 196 insertions(+), 26 deletions(-) rename tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/{ChannelMessage.kt => ChannelMessageImpl.kt} (62%) create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/GroupMessages.kt rename tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/{CommonMessageImpl.kt => PrivateMessageImpl.kt} (75%) create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ChannelMessage.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/GroupMessages.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PrivateMessage.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PublicMessage.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/SignedMessage.kt create mode 100644 tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/WithSenderChatMessage.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index e301b4e153..20119d562a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 0.30.0 Bot API 5.0 +**THIS UPDATE CONTAINS A LOT OF BREAKING CHANGES. PLEASE, BE CAREFUL ON UPGRADING OF YOUR PROJECT** + * `Core`: * Support of `logOut` method (`LogOut` object as a `Request`) * Support of `close` method (`Close` object as a `Request`) @@ -43,6 +45,19 @@ * Property `pollQuestionTextLength` now have maximum up to `300` * Anonymous Admins: * New field `AdministratorChatMember#isAnonymous` + * Several new interfaces of messages: + * `SignedMessage` - any message which possibly have `authorSignature` + * `WithSenderChatMessage` - any message which have `senderChat`. Property `senderChat` is not-nullable due to + separation of implementators + * `PublicMessage` - all channel messages have property `val chat: PublicChat` instead of common `val chat: Chat` + * `ChannelMessage` - all channel messages have property `val chat: ChannelChat` instead of common `val chat: Chat` + * Old `ChannelMessage` was safely renamed to `ChannelMessageImpl` (old name was set as typealias and deprecated) + * `GroupMessage` - all group messages have property `val chat: GroupChat` instead of common `val chat: Chat` + * `FromChannelGroupMessage` - instances should have property `val channel: ChannelChat` + * `AnonymousGroupMessage` - instances may have setup property `authorSignature` + * `CommonGroupMessage` - just common message + * `PrivateMessage` - works like previous `CommonMessageImpl` + * Previous `CommonMessageImpl` safely renamed to `PrivateMessageImpl` * `API`: * Extensions `TelegramBot#pinChatMessage` now support any `Chat` and `Message`s from any `Chat` * New extensions `TelegramBot#unpinAllChatMessages` diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessageImpl.kt similarity index 62% rename from tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessage.kt rename to tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessageImpl.kt index bc4e26c60e..2be816b343 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessage.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/ChannelMessageImpl.kt @@ -7,10 +7,12 @@ import dev.inmo.tgbotapi.types.message.abstracts.Message import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent import dev.inmo.tgbotapi.types.message.content.abstracts.PossiblySentViaBotCommonMessage import com.soywiz.klock.DateTime +import dev.inmo.tgbotapi.types.chat.abstracts.ChannelChat +import dev.inmo.tgbotapi.types.message.abstracts.ChannelMessage -data class ChannelMessage( +data class ChannelMessageImpl( override val messageId: MessageIdentifier, - override val chat: Chat, + override val chat: ChannelChat, override val content: T, override val date: DateTime, override val editDate: DateTime?, @@ -18,5 +20,8 @@ data class ChannelMessage( override val replyTo: Message?, override val replyMarkup: InlineKeyboardMarkup?, override val senderBot: CommonBot?, - val authorSignature: AuthorSignature? -) : PossiblySentViaBotCommonMessage + override val authorSignature: AuthorSignature? +) : ChannelMessage + +@Deprecated("Renamed", ReplaceWith("ChannelMessageImpl", "dev.inmo.tgbotapi.types.message.ChannelMessageImpl")) +typealias ChannelMessage = ChannelMessageImpl diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/GroupMessages.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/GroupMessages.kt new file mode 100644 index 0000000000..62baeffa7a --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/GroupMessages.kt @@ -0,0 +1,49 @@ +package dev.inmo.tgbotapi.types.message + +import dev.inmo.tgbotapi.types.* +import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup +import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent +import dev.inmo.tgbotapi.types.message.content.abstracts.PossiblySentViaBotCommonMessage +import dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentInfo +import com.soywiz.klock.DateTime +import dev.inmo.tgbotapi.types.chat.abstracts.* +import dev.inmo.tgbotapi.types.message.abstracts.* + +data class FromChannelGroupMessageImpl( + override val chat: GroupChat, + override val channel: ChannelChat, + override val messageId: MessageIdentifier, + override val date: DateTime, + override val forwardInfo: ForwardInfo?, + override val editDate: DateTime?, + override val replyTo: Message?, + override val replyMarkup: InlineKeyboardMarkup?, + override val content: T, + override val senderBot: CommonBot?, + override val authorSignature: AuthorSignature? +) : FromChannelGroupMessage + +data class AnonymousGroupMessageImpl( + override val chat: GroupChat, + override val messageId: MessageIdentifier, + override val date: DateTime, + override val forwardInfo: ForwardInfo?, + override val editDate: DateTime?, + override val replyTo: Message?, + override val replyMarkup: InlineKeyboardMarkup?, + override val content: T, + override val senderBot: CommonBot?, + override val authorSignature: AuthorSignature? +) : AnonymousGroupMessage + +data class CommonGroupMessageImpl( + override val chat: GroupChat, + override val messageId: MessageIdentifier, + override val date: DateTime, + override val forwardInfo: ForwardInfo?, + override val editDate: DateTime?, + override val replyTo: Message?, + override val replyMarkup: InlineKeyboardMarkup?, + override val content: T, + override val senderBot: CommonBot? +) : CommonGroupMessage diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/CommonMessageImpl.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/PrivateMessageImpl.kt similarity index 75% rename from tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/CommonMessageImpl.kt rename to tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/PrivateMessageImpl.kt index b0f51180ea..99dae3d350 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/CommonMessageImpl.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/PrivateMessageImpl.kt @@ -3,14 +3,13 @@ package dev.inmo.tgbotapi.types.message import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup import dev.inmo.tgbotapi.types.chat.abstracts.Chat -import dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage -import dev.inmo.tgbotapi.types.message.abstracts.Message import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent import dev.inmo.tgbotapi.types.message.content.abstracts.PossiblySentViaBotCommonMessage import dev.inmo.tgbotapi.types.message.payments.SuccessfulPaymentInfo import com.soywiz.klock.DateTime +import dev.inmo.tgbotapi.types.message.abstracts.* -data class CommonMessageImpl( +data class PrivateMessageImpl( override val messageId: MessageIdentifier, override val user: User, override val chat: Chat, @@ -22,4 +21,7 @@ data class CommonMessageImpl( override val replyMarkup: InlineKeyboardMarkup?, override val senderBot: CommonBot?, val paymentInfo: SuccessfulPaymentInfo? -) : PossiblySentViaBotCommonMessage, FromUserMessage \ No newline at end of file +) : PrivateMessage + +@Deprecated("Renamed", ReplaceWith("PrivateMessageImpl", "dev.inmo.tgbotapi.types.message.PrivateMessageImpl")) +typealias CommonMessageImpl = PrivateMessageImpl 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 e771b4cdc1..0424ecd0b7 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 @@ -10,7 +10,6 @@ import dev.inmo.tgbotapi.types.files.* import dev.inmo.tgbotapi.types.games.RawGame import dev.inmo.tgbotapi.types.location.Location import dev.inmo.tgbotapi.types.message.ChatEvents.ProximityAlertTriggered -import dev.inmo.tgbotapi.types.location.StaticLocation import dev.inmo.tgbotapi.types.message.ChatEvents.* import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.* import dev.inmo.tgbotapi.types.message.abstracts.Message @@ -31,14 +30,11 @@ import kotlin.reflect.KClass // TODO:: add PassportData type @Serializable internal data class RawMessage( - @SerialName(messageIdField) val messageId: MessageIdentifier, - @SerialName(dateField) val date: TelegramDate, - @SerialName(chatField) private val chat: Chat, - @SerialName(fromField) private val from: User? = null, + private val sender_chat: PublicChat? = null, private val forward_from: User? = null, private val forward_from_chat: Chat? = null, private val forward_from_message_id: MessageIdentifier? = null, @@ -258,19 +254,61 @@ internal data class RawMessage( ) } } ?: when (chat) { - is ChannelChat -> ChannelMessage( - messageId, - chat, - content, - date.asDate, - edit_date?.asDate, - forwarded, - reply_to_message?.asMessage, - reply_markup, - via_bot, - author_signature - ) - else -> CommonMessageImpl( + is PublicChat -> when (chat) { + is ChannelChat -> ChannelMessageImpl( + 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 -> FromChannelGroupMessageImpl( + chat, + sender_chat, + messageId, + date.asDate, + forwarded, + edit_date ?.asDate, + reply_to_message ?.asMessage, + reply_markup, + content, + via_bot, + author_signature + ) + is GroupChat -> AnonymousGroupMessageImpl( + chat, + messageId, + date.asDate, + forwarded, + edit_date ?.asDate, + reply_to_message ?.asMessage, + reply_markup, + content, + via_bot, + author_signature + ) + null -> CommonGroupMessageImpl( + chat, + messageId, + date.asDate, + forwarded, + edit_date ?.asDate, + reply_to_message ?.asMessage, + reply_markup, + content, + via_bot + ) + else -> error("Currently in groups supported only fields \"sender_chat\" with channel, group or null, but was $sender_chat") + } + else -> error("Unknown type of public chat: $chat") + } + is PrivateChat -> PrivateMessageImpl( messageId, from ?: error("Was detected common message, but owner (sender) of the message was not found"), chat, @@ -283,6 +321,7 @@ internal data class RawMessage( via_bot, paymentInfo ) + else -> error("Unknown type of chat: $chat") } } ?: error("Was not found supported type of data") } catch (e: Exception) { 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/ChannelMessage.kt new file mode 100644 index 0000000000..b30ace047c --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/ChannelMessage.kt @@ -0,0 +1,12 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +import dev.inmo.tgbotapi.types.chat.abstracts.ChannelChat +import dev.inmo.tgbotapi.types.chat.abstracts.Chat +import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent +import dev.inmo.tgbotapi.types.message.content.abstracts.PossiblySentViaBotCommonMessage + +interface ChannelMessage : 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/GroupMessages.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/GroupMessages.kt new file mode 100644 index 0000000000..c97eb604a2 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/GroupMessages.kt @@ -0,0 +1,19 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +import dev.inmo.tgbotapi.types.chat.abstracts.* +import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent + +interface GroupMessage : PublicMessage { + override val chat: GroupChat +} + +interface FromChannelGroupMessage : GroupMessage, SignedMessage, WithSenderChatMessage { + val channel: ChannelChat + override val senderChat: ChannelChat + get() = channel +} +interface AnonymousGroupMessage : GroupMessage, SignedMessage, WithSenderChatMessage { + override val senderChat: GroupChat + get() = chat +} +interface CommonGroupMessage : GroupMessage diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PrivateMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PrivateMessage.kt new file mode 100644 index 0000000000..f57d2ce731 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PrivateMessage.kt @@ -0,0 +1,6 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent +import dev.inmo.tgbotapi.types.message.content.abstracts.PossiblySentViaBotCommonMessage + +interface PrivateMessage : PossiblySentViaBotCommonMessage, FromUserMessage diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PublicMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PublicMessage.kt new file mode 100644 index 0000000000..1ab4b3786c --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/PublicMessage.kt @@ -0,0 +1,9 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +import dev.inmo.tgbotapi.types.chat.abstracts.PublicChat +import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent +import dev.inmo.tgbotapi.types.message.content.abstracts.PossiblySentViaBotCommonMessage + +interface PublicMessage : PossiblySentViaBotCommonMessage { + override val chat: PublicChat +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/SignedMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/SignedMessage.kt new file mode 100644 index 0000000000..18aabe8616 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/SignedMessage.kt @@ -0,0 +1,7 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +import dev.inmo.tgbotapi.types.AuthorSignature + +interface SignedMessage : Message { + val authorSignature: AuthorSignature? +} \ No newline at end of file diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/WithSenderChatMessage.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/WithSenderChatMessage.kt new file mode 100644 index 0000000000..55147cd92a --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/abstracts/WithSenderChatMessage.kt @@ -0,0 +1,7 @@ +package dev.inmo.tgbotapi.types.message.abstracts + +import dev.inmo.tgbotapi.types.chat.abstracts.Chat + +interface WithSenderChatMessage { + val senderChat: Chat +} \ No newline at end of file