1
0
mirror of https://github.com/InsanusMokrassar/TelegramBotAPI.git synced 2025-09-16 13:49:26 +00:00

fixes in inaccessible message support

This commit is contained in:
2024-01-07 15:52:49 +06:00
parent 5190f7b856
commit b5f4219635
63 changed files with 493 additions and 390 deletions

View File

@@ -1,6 +1,5 @@
package dev.inmo.tgbotapi.requests
import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.update.abstracts.Update
import dev.inmo.tgbotapi.types.update.abstracts.UpdateSerializerWithoutSerialization
@@ -15,7 +14,7 @@ private val updatesListSerializer = ListSerializer(
* Request updates from Telegram Bot API system. It is important, that the result updates WILL NOT include
* [dev.inmo.tgbotapi.types.update.MediaGroupUpdates.MediaGroupUpdate] objects due to the fact,
* that it is internal abstraction and in fact any [dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage]
* is just a common [dev.inmo.tgbotapi.types.message.abstracts.Message]
* is just a common [dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage]
*
* @see dev.inmo.tgbotapi.extensions.utils.updates.retrieving.updateHandlerWithMediaGroupsAdaptation
* @see dev.inmo.tgbotapi.utils.convertWithMediaGroupUpdates

View File

@@ -2,10 +2,10 @@ package dev.inmo.tgbotapi.types.chat
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.colors.ColorId
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializer
import dev.inmo.tgbotapi.types.reactions.Reaction
import korlibs.time.DateTime
import kotlinx.serialization.Serializable
@Serializable(ExtendedChatSerializer.Companion::class)

View File

@@ -1,9 +1,7 @@
package dev.inmo.tgbotapi.types.giveaway
import dev.inmo.tgbotapi.types.chat.PreviewChat
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelEvent
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChatEvent
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
@@ -12,5 +10,5 @@ data class GiveawayPrivateResults(
override val chat: PreviewChat,
override val unclaimedCount: Int,
@Transient // TODO::Add message serializer
val message: Message? = null
val message: AccessibleMessage? = null
) : GiveawayResults

View File

@@ -3,7 +3,6 @@ package dev.inmo.tgbotapi.types.message
import korlibs.time.DateTime
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
import dev.inmo.tgbotapi.types.chat.ChannelChat
import dev.inmo.tgbotapi.types.chat.CommonBot
import dev.inmo.tgbotapi.types.chat.PreviewChannelChat
import dev.inmo.tgbotapi.types.message.abstracts.*
@@ -17,7 +16,7 @@ data class ChannelContentMessageImpl<T: MessageContent>(
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val forwardInfo: ForwardInfo?,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val senderBot: CommonBot?,
override val authorSignature: AuthorSignature?,

View File

@@ -1,6 +1,7 @@
package dev.inmo.tgbotapi.types.message.ChatEvents
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.CommonEvent
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.message.abstracts.Message
data class PinnedMessage(

View File

@@ -17,7 +17,7 @@ data class ConnectedFromChannelGroupContentMessageImpl<T : MessageContent>(
override val forwardInfo: ForwardInfo?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val content: T,
override val senderBot: CommonBot?,
@@ -33,7 +33,7 @@ data class UnconnectedFromChannelGroupContentMessageImpl<T: MessageContent>(
override val forwardInfo: ForwardInfo?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val content: T,
override val senderBot: CommonBot?,
@@ -48,7 +48,7 @@ data class AnonymousGroupContentMessageImpl<T : MessageContent>(
override val forwardInfo: ForwardInfo?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val content: T,
override val senderBot: CommonBot?,
@@ -64,7 +64,7 @@ data class CommonGroupContentMessageImpl<T : MessageContent>(
override val forwardInfo: ForwardInfo?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val content: T,
override val senderBot: CommonBot?,
@@ -80,7 +80,7 @@ data class FromChannelForumContentMessageImpl<T: MessageContent>(
override val forwardInfo: ForwardInfo?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val content: T,
override val senderBot: CommonBot?,
@@ -96,7 +96,7 @@ data class AnonymousForumContentMessageImpl<T : MessageContent>(
override val forwardInfo: ForwardInfo?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val content: T,
override val senderBot: CommonBot?,
@@ -113,7 +113,7 @@ data class CommonForumContentMessageImpl<T : MessageContent>(
override val forwardInfo: ForwardInfo?,
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val content: T,
override val senderBot: CommonBot?,

View File

@@ -3,10 +3,9 @@ package dev.inmo.tgbotapi.types.message
import korlibs.time.DateTime
import dev.inmo.tgbotapi.types.MessageId
import dev.inmo.tgbotapi.types.chat.User
import dev.inmo.tgbotapi.types.chat.Chat
import dev.inmo.tgbotapi.types.chat.PreviewChat
import dev.inmo.tgbotapi.types.message.abstracts.FromUserMessage
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.passport.PassportData
data class PassportMessage(
@@ -15,4 +14,4 @@ data class PassportMessage(
override val from: User,
override val date: DateTime,
val passportData: PassportData
) : Message, FromUserMessage
) : AccessibleMessage, FromUserMessage

View File

@@ -6,7 +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.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage
import dev.inmo.tgbotapi.types.message.content.MessageContent
@@ -19,7 +19,7 @@ data class PrivateContentMessageImpl<T: MessageContent>(
override val editDate: DateTime?,
override val hasProtectedContent: Boolean,
override val forwardInfo: ForwardInfo?,
override val replyTo: Message?,
override val replyTo: AccessibleMessage?,
override val replyMarkup: InlineKeyboardMarkup?,
override val senderBot: CommonBot?,
override val mediaGroupId: MediaGroupIdentifier?,

View File

@@ -286,7 +286,7 @@ internal data class RawMessage(
}
}
val asMessage: Message by lazy {
val asMessage: AccessibleMessage by lazy {
if (date.date == 0L) {
return@lazy InaccessibleMessage(
chat,

View File

@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChatEvent
interface ChatEventMessage<T : ChatEvent> : Message {
interface ChatEventMessage<T : ChatEvent> : AccessibleMessage {
val chatEvent: T
}

View File

@@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.message.content.MessageContent
sealed interface CommonMessage<out T: MessageContent> : Message,
sealed interface CommonMessage<out T: MessageContent> : AccessibleMessage,
PossiblyForwardedMessage,
PossiblyEditedMessage,
PossiblyReplyMessage,

View File

@@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.message.content.MessageContent
interface ContentMessage<out T: MessageContent>: Message {
interface ContentMessage<out T: MessageContent>: AccessibleMessage {
val hasProtectedContent: Boolean
val content: T

View File

@@ -2,4 +2,4 @@ package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.abstracts.FromUser
interface FromUserMessage : FromUser, Message
interface FromUserMessage : FromUser, AccessibleMessage

View File

@@ -1,12 +1,9 @@
package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.abstracts.WithMessageId
import korlibs.time.DateTime
import dev.inmo.tgbotapi.abstracts.WithPreviewChat
import dev.inmo.tgbotapi.abstracts.WithPreviewChatAndMessageId
import dev.inmo.tgbotapi.utils.internal.ClassCastsIncluded
import dev.inmo.tgbotapi.types.MessageId
import dev.inmo.tgbotapi.types.chat.Chat
import dev.inmo.tgbotapi.types.chat.PreviewChat
import dev.inmo.tgbotapi.types.message.RawMessage
import kotlinx.serialization.*
@@ -19,11 +16,13 @@ interface Message : WithPreviewChatAndMessageId {
val date: DateTime
}
interface AccessibleMessage : Message
@Serializable
data class InaccessibleMessage(
override val chat: PreviewChat,
override val messageId: MessageId,
) : Message {
) : AccessibleMessage {
override val date: DateTime
get() = DateTime.invoke(0L)
}
@@ -33,7 +32,7 @@ data class UnknownMessageType(
override val chat: PreviewChat,
override val date: DateTime,
val insideException: Exception
) : Message
) : AccessibleMessage
internal class TelegramBotAPIMessageDeserializationStrategyClass<T> : DeserializationStrategy<T> {
@OptIn(InternalSerializationApi::class)

View File

@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
import korlibs.time.DateTime
interface PossiblyEditedMessage : Message {
interface PossiblyEditedMessage : AccessibleMessage {
val editDate: DateTime?
}

View File

@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.message.ForwardInfo
interface PossiblyForwardedMessage : Message {
interface PossiblyForwardedMessage : AccessibleMessage {
val forwardInfo: ForwardInfo?
}

View File

@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.message.payments.abstracts.PaymentInfo
interface PossiblyPaymentMessage : Message {
interface PossiblyPaymentMessage : AccessibleMessage {
val paymentInfo: PaymentInfo?
}

View File

@@ -1,5 +1,5 @@
package dev.inmo.tgbotapi.types.message.abstracts
interface PossiblyReplyMessage {
val replyTo: Message?
val replyTo: AccessibleMessage?
}

View File

@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.MessageThreadId
interface PossiblyTopicMessage : Message {
interface PossiblyTopicMessage : AccessibleMessage {
val threadId: MessageThreadId?
}

View File

@@ -2,6 +2,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
import dev.inmo.tgbotapi.types.AuthorSignature
interface SignedMessage : Message {
interface SignedMessage : AccessibleMessage {
val authorSignature: AuthorSignature?
}

View File

@@ -165,5 +165,5 @@ sealed interface ResendableContent {
replyToMessageId: MessageId? = null,
allowSendingWithoutReply: Boolean? = null,
replyMarkup: KeyboardMarkup? = null
): Request<out Message>
): Request<out AccessibleMessage>
}

View File

@@ -10,7 +10,6 @@ import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
import dev.inmo.tgbotapi.types.files.TelegramMediaFile
import dev.inmo.tgbotapi.types.media.TelegramMedia
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.textsources.TextSource
import kotlinx.serialization.Serializable

View File

@@ -7,8 +7,6 @@ import dev.inmo.tgbotapi.types.MessageId
import dev.inmo.tgbotapi.types.MessageThreadId
import dev.inmo.tgbotapi.types.buttons.KeyboardMarkup
import dev.inmo.tgbotapi.types.chat.Chat
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyForwardedMessage
import dev.inmo.tgbotapi.types.stories.Story
import kotlinx.serialization.Serializable

View File

@@ -0,0 +1,9 @@
package dev.inmo.tgbotapi.types.queries.callback
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.content.MessageContent
sealed interface AbstractMessageCallbackQuery : CallbackQuery {
val message: Message
}

View File

@@ -0,0 +1,7 @@
package dev.inmo.tgbotapi.types.queries.callback
import dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
sealed interface InaccessibleMessageCallbackQuery : AbstractMessageCallbackQuery {
override val message: InaccessibleMessage
}

View File

@@ -0,0 +1,16 @@
package dev.inmo.tgbotapi.types.queries.callback
import dev.inmo.tgbotapi.types.CallbackQueryIdentifier
import dev.inmo.tgbotapi.types.chat.CommonUser
import dev.inmo.tgbotapi.types.chat.User
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
import dev.inmo.tgbotapi.types.message.content.MessageContent
data class InaccessibleMessageDataCallbackQuery(
override val id: CallbackQueryIdentifier,
override val from: CommonUser,
override val chatInstance: String,
override val message: InaccessibleMessage,
override val data: String
) : DataCallbackQuery, InaccessibleMessageCallbackQuery

View File

@@ -0,0 +1,16 @@
package dev.inmo.tgbotapi.types.queries.callback
import dev.inmo.tgbotapi.types.CallbackQueryIdentifier
import dev.inmo.tgbotapi.types.chat.CommonUser
import dev.inmo.tgbotapi.types.chat.User
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.message.abstracts.InaccessibleMessage
import dev.inmo.tgbotapi.types.message.content.MessageContent
data class InaccessibleMessageGameShortNameCallbackQuery(
override val id: CallbackQueryIdentifier,
override val from: CommonUser,
override val chatInstance: String,
override val message: InaccessibleMessage,
override val gameShortName: String
) : GameShortNameCallbackQuery, InaccessibleMessageCallbackQuery

View File

@@ -3,6 +3,6 @@ package dev.inmo.tgbotapi.types.queries.callback
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
import dev.inmo.tgbotapi.types.message.content.MessageContent
sealed interface MessageCallbackQuery : CallbackQuery {
val message: ContentMessage<MessageContent>
sealed interface MessageCallbackQuery : AbstractMessageCallbackQuery {
override val message: ContentMessage<MessageContent>
}

View File

@@ -16,7 +16,7 @@ internal data class RawCallbackQuery(
@SerialName(fromField)
val from: CommonUser,
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
val message: ContentMessage<MessageContent>? = null,
val message: Message? = null,
@SerialName(inlineMessageIdField)
val inlineMessageId: InlineMessageIdentifier? = null,
@SerialName("chat_instance")
@@ -28,8 +28,26 @@ internal data class RawCallbackQuery(
private var inited: CallbackQuery? = null
fun asCallbackQuery(raw: String): CallbackQuery {
return inited ?: when {
message != null && data != null -> MessageDataCallbackQuery(id, from, chatInstance, message, data)
message != null && gameShortName != null -> MessageGameShortNameCallbackQuery(id, from, chatInstance, message, gameShortName)
message != null && data != null -> when {
message is ContentMessage<*> -> MessageDataCallbackQuery(id, from, chatInstance, message, data)
message is InaccessibleMessage -> InaccessibleMessageDataCallbackQuery(id, from, chatInstance, message, data)
else -> UnknownCallbackQueryType(
id,
from,
chatInstance,
raw
)
}
message != null && gameShortName != null -> when {
message is ContentMessage<*> -> MessageGameShortNameCallbackQuery(id, from, chatInstance, message, gameShortName)
message is InaccessibleMessage -> InaccessibleMessageGameShortNameCallbackQuery(id, from, chatInstance, message, gameShortName)
else -> UnknownCallbackQueryType(
id,
from,
chatInstance,
raw
)
}
inlineMessageId != null && data != null -> InlineMessageIdDataCallbackQuery(id, from, chatInstance, inlineMessageId, data)
inlineMessageId != null && gameShortName != null -> InlineMessageIdGameShortNameCallbackQuery(id, from, chatInstance, inlineMessageId, gameShortName)
else -> UnknownCallbackQueryType(

View File

@@ -1,12 +1,12 @@
package dev.inmo.tgbotapi.types.update
import dev.inmo.tgbotapi.types.UpdateIdentifier
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate
data class ChannelPostUpdate(
override val updateId: UpdateIdentifier,
override val data: Message
override val data: AccessibleMessage
) : BaseSentMessageUpdate {
override fun copy(newData: Message): BaseSentMessageUpdate = copy(updateId, newData)
override fun copy(newData: AccessibleMessage): BaseSentMessageUpdate = copy(updateId, newData)
}

View File

@@ -1,12 +1,12 @@
package dev.inmo.tgbotapi.types.update
import dev.inmo.tgbotapi.types.UpdateIdentifier
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.update.abstracts.BaseSentMessageUpdate
data class MessageUpdate(
override val updateId: UpdateIdentifier,
override val data: Message
override val data: AccessibleMessage
) : BaseSentMessageUpdate {
override fun copy(newData: Message) = copy(updateId, newData)
override fun copy(newData: AccessibleMessage) = copy(updateId, newData)
}

View File

@@ -28,11 +28,11 @@ internal data class RawUpdate constructor(
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
private val edited_message: CommonMessage<*>? = null,
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
private val message: Message? = null,
private val message: AccessibleMessage? = null,
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
private val edited_channel_post: CommonMessage<*>? = null,
@Serializable(TelegramBotAPIMessageDeserializeOnlySerializer::class)
private val channel_post: Message? = null,
private val channel_post: AccessibleMessage? = null,
private val inline_query: RawInlineQuery? = null,
private val chosen_inline_result: RawChosenInlineResult? = null,
private val callback_query: RawCallbackQuery? = null,

View File

@@ -1,7 +1,7 @@
package dev.inmo.tgbotapi.types.update.abstracts
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
interface BaseMessageUpdate : Update {
override val data: Message
override val data: AccessibleMessage
}

View File

@@ -1,7 +1,7 @@
package dev.inmo.tgbotapi.types.update.abstracts
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
interface BaseSentMessageUpdate : BaseMessageUpdate {
fun copy(newData: Message): BaseSentMessageUpdate
fun copy(newData: AccessibleMessage): BaseSentMessageUpdate
}

View File

@@ -1,7 +1,7 @@
package dev.inmo.tgbotapi.utils.extensions
import dev.inmo.tgbotapi.types.message.abstracts.Message
import dev.inmo.tgbotapi.types.message.abstracts.AccessibleMessage
import dev.inmo.tgbotapi.types.message.abstracts.PossiblyTopicMessage
val Message.threadIdOrNull
val AccessibleMessage.threadIdOrNull
get() = (this as? PossiblyTopicMessage) ?.threadId