mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2024-11-22 08:13:47 +00:00
fix of #793
This commit is contained in:
parent
d5f5a0e30b
commit
80be86454d
@ -2,6 +2,9 @@
|
||||
|
||||
## 9.2.2
|
||||
|
||||
* `Core`:
|
||||
* Fix of [#793](https://github.com/InsanusMokrassar/ktgbotapi/issues/793): Add `PreviewChat`
|
||||
|
||||
## 9.2.1
|
||||
|
||||
* `Version`:
|
||||
|
@ -1,10 +1,17 @@
|
||||
package dev.inmo.tgbotapi.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
|
||||
/**
|
||||
* All inheritors of this interface have [chat] field and related to this [chat]
|
||||
*/
|
||||
interface WithChat {
|
||||
val chat: Chat
|
||||
interface WithPreviewChat {
|
||||
val chat: PreviewChat
|
||||
}
|
||||
|
||||
/**
|
||||
* All inheritors of this interface have [chat] field and related to this [chat]
|
||||
*/
|
||||
@Deprecated("Renamed", ReplaceWith("WithPreviewChat", "dev.inmo.tgbotapi.abstracts.WithPreviewChat"))
|
||||
typealias WithChat = WithPreviewChat
|
||||
|
@ -49,7 +49,7 @@ object ChatTypeSerializer : KSerializer<ChatType> {
|
||||
}
|
||||
|
||||
@RiskFeature
|
||||
object PreviewChatSerializer : KSerializer<Chat> {
|
||||
object ChatSerializer : KSerializer<Chat> {
|
||||
@OptIn(InternalSerializationApi::class)
|
||||
override val descriptor: SerialDescriptor = buildSerialDescriptor("PreviewChatSerializer", PolymorphicKind.OPEN)
|
||||
|
||||
@ -92,6 +92,48 @@ object PreviewChatSerializer : KSerializer<Chat> {
|
||||
}
|
||||
}
|
||||
|
||||
@RiskFeature
|
||||
object PreviewChatSerializer : KSerializer<PreviewChat> {
|
||||
@OptIn(InternalSerializationApi::class)
|
||||
override val descriptor: SerialDescriptor = buildSerialDescriptor("PreviewChatSerializer", PolymorphicKind.OPEN)
|
||||
|
||||
override fun deserialize(decoder: Decoder): PreviewChat {
|
||||
val decodedJson = JsonObject.serializer().deserialize(decoder)
|
||||
|
||||
val type = decodedJson[typeField] ?.jsonPrimitive ?.content ?.asChatType ?: error("Field $typeField must be presented, but absent in $decodedJson")
|
||||
val isForum = decodedJson[isForumField] ?.jsonPrimitive ?.booleanOrNull == true
|
||||
|
||||
return when (type) {
|
||||
ChatType.PrivateChatType -> formatter.decodeFromJsonElement(PrivateChatImpl.serializer(), decodedJson)
|
||||
ChatType.GroupChatType -> formatter.decodeFromJsonElement(GroupChatImpl.serializer(), decodedJson)
|
||||
ChatType.SupergroupChatType -> if (isForum) {
|
||||
formatter.decodeFromJsonElement(ForumChatImpl.serializer(), decodedJson)
|
||||
} else {
|
||||
formatter.decodeFromJsonElement(SupergroupChatImpl.serializer(), decodedJson)
|
||||
}
|
||||
ChatType.ChannelChatType -> formatter.decodeFromJsonElement(ChannelChatImpl.serializer(), decodedJson)
|
||||
is ChatType.UnknownChatType -> UnknownChatType(
|
||||
formatter.decodeFromJsonElement(Long.serializer(), decodedJson[chatIdField] ?: JsonPrimitive(-1)).toChatId(),
|
||||
decodedJson.toString(),
|
||||
decodedJson
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: PreviewChat) {
|
||||
when (value) {
|
||||
is PrivateChatImpl -> PrivateChatImpl.serializer().serialize(encoder, value)
|
||||
is GroupChatImpl -> GroupChatImpl.serializer().serialize(encoder, value)
|
||||
is SupergroupChatImpl -> SupergroupChatImpl.serializer().serialize(encoder, value)
|
||||
is ForumChatImpl -> ForumChatImpl.serializer().serialize(encoder, value)
|
||||
is ChannelChatImpl -> ChannelChatImpl.serializer().serialize(encoder, value)
|
||||
is CommonBot -> CommonBot.serializer().serialize(encoder, value)
|
||||
is CommonUser -> CommonUser.serializer().serialize(encoder, value)
|
||||
is UnknownChatType -> JsonObject.serializer().serialize(encoder, value.rawJson)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@RiskFeature
|
||||
sealed class ExtendedChatSerializer : KSerializer<ExtendedChat> {
|
||||
@OptIn(InternalSerializationApi::class)
|
||||
|
@ -15,7 +15,7 @@ data class GroupChatImpl(
|
||||
override val id: ChatId,
|
||||
@SerialName(titleField)
|
||||
override val title: String
|
||||
) : GroupChat
|
||||
) : PreviewGroupChat
|
||||
|
||||
@Serializable
|
||||
@RiskFeature("This class is a subject of changes. It is better to use PrivateChat due")
|
||||
@ -28,7 +28,7 @@ data class PrivateChatImpl(
|
||||
override val firstName: String = "",
|
||||
@SerialName(lastNameField)
|
||||
override val lastName: String = ""
|
||||
) : PrivateChat
|
||||
) : PreviewPrivateChat
|
||||
|
||||
@Serializable
|
||||
@RiskFeature("This class is a subject of changes. It is better to use SupergroupChat due")
|
||||
@ -39,7 +39,7 @@ data class SupergroupChatImpl(
|
||||
override val title: String,
|
||||
@SerialName(usernameField)
|
||||
override val username: Username? = null
|
||||
) : SupergroupChat
|
||||
) : PreviewSupergroupChat
|
||||
|
||||
@Serializable
|
||||
@RiskFeature("This class is a subject of changes. It is better to use ForumChat due")
|
||||
@ -50,7 +50,7 @@ data class ForumChatImpl(
|
||||
override val title: String,
|
||||
@SerialName(usernameField)
|
||||
override val username: Username? = null
|
||||
) : ForumChat
|
||||
) : PreviewForumChat
|
||||
|
||||
@Serializable
|
||||
@RiskFeature("This class is a subject of changes. It is better to use ChannelChat due")
|
||||
@ -61,14 +61,20 @@ data class ChannelChatImpl(
|
||||
override val title: String,
|
||||
@SerialName(usernameField)
|
||||
override val username: Username? = null
|
||||
) : ChannelChat
|
||||
) : PreviewChannelChat
|
||||
|
||||
@Serializable(UserSerializer::class)
|
||||
sealed class User : PrivateChat
|
||||
|
||||
@Serializable(UserSerializer::class)
|
||||
sealed class PreviewUser : PreviewPrivateChat, User()
|
||||
|
||||
@Serializable(UserSerializer::class)
|
||||
sealed class Bot : User()
|
||||
|
||||
@Serializable(UserSerializer::class)
|
||||
sealed class PreviewBot : PreviewUser()
|
||||
|
||||
@Serializable
|
||||
data class CommonBot(
|
||||
override val id: UserId,
|
||||
@ -78,7 +84,7 @@ data class CommonBot(
|
||||
override val lastName: String = "",
|
||||
@SerialName(usernameField)
|
||||
override val username: Username? = null,
|
||||
) : Bot() {
|
||||
) : PreviewBot() {
|
||||
@SerialName(isBotField)
|
||||
private val isBot = true
|
||||
}
|
||||
@ -99,7 +105,7 @@ data class CommonUser(
|
||||
override val isPremium: Boolean = false,
|
||||
@SerialName(addedToAttachmentMenuField)
|
||||
override val addedToAttachmentMenu: Boolean = false
|
||||
) : User(), WithOptionalLanguageCode, PossiblyPremiumChat, AbleToAddInAttachmentMenuChat {
|
||||
) : PreviewUser(), WithOptionalLanguageCode, PossiblyPremiumChat, AbleToAddInAttachmentMenuChat {
|
||||
constructor(
|
||||
id: UserId,
|
||||
firstName: String,
|
||||
|
@ -0,0 +1,30 @@
|
||||
package dev.inmo.tgbotapi.types.chat
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewChat : Chat
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewUsernameChat : PreviewChat, UsernameChat
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewPrivateChat : PreviewUsernameChat, PrivateChat
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewPublicChat : PreviewChat, PublicChat
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewSuperPublicChat : PreviewPublicChat, PreviewUsernameChat, SuperPublicChat
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewChannelChat : PreviewSuperPublicChat, ChannelChat
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewGroupChat : PreviewPublicChat, GroupChat
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewSupergroupChat : PreviewGroupChat, PreviewSuperPublicChat, SupergroupChat
|
||||
|
||||
@Serializable(PreviewChatSerializer::class)
|
||||
sealed interface PreviewForumChat : PreviewSupergroupChat, ForumChat
|
@ -7,4 +7,4 @@ data class UnknownChatType(
|
||||
override val id: IdChatIdentifier,
|
||||
val raw: String,
|
||||
val rawJson: JsonObject
|
||||
) : Chat
|
||||
) : Chat, PreviewChat
|
||||
|
@ -1,9 +1,10 @@
|
||||
package dev.inmo.tgbotapi.types.chat.member
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.WithChat
|
||||
import dev.inmo.tgbotapi.abstracts.WithPreviewChat
|
||||
import dev.inmo.tgbotapi.abstracts.WithUser
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@ -11,7 +12,7 @@ import kotlinx.serialization.Serializable
|
||||
@Serializable
|
||||
data class ChatMemberUpdated(
|
||||
@SerialName(chatField)
|
||||
override val chat: Chat,
|
||||
override val chat: PreviewChat,
|
||||
@SerialName(fromField)
|
||||
override val user: User,
|
||||
@SerialName(dateField)
|
||||
@ -24,4 +25,4 @@ data class ChatMemberUpdated(
|
||||
val inviteLink: ChatInviteLink? = null,
|
||||
@SerialName(viaChatFolderInviteLinkField)
|
||||
val viaChatFolderInviteLink: Boolean? = false
|
||||
) : WithChat, WithUser
|
||||
) : WithPreviewChat, WithUser
|
||||
|
@ -5,12 +5,13 @@ 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.*
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
data class ChannelContentMessageImpl<T: MessageContent>(
|
||||
override val messageId: MessageId,
|
||||
override val chat: ChannelChat,
|
||||
override val chat: PreviewChannelChat,
|
||||
override val content: T,
|
||||
override val date: DateTime,
|
||||
override val editDate: DateTime?,
|
||||
|
@ -3,12 +3,13 @@ package dev.inmo.tgbotapi.types.message
|
||||
import korlibs.time.DateTime
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.ChannelChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChannelChat
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.ChannelEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage
|
||||
|
||||
data class ChannelEventMessage<T : ChannelEvent>(
|
||||
override val messageId: MessageId,
|
||||
override val chat: ChannelChat,
|
||||
override val chat: PreviewChannelChat,
|
||||
override val chatEvent: T,
|
||||
override val date: DateTime
|
||||
) : ChatEventMessage<T>
|
||||
|
@ -4,13 +4,14 @@ import korlibs.time.DateTime
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import dev.inmo.tgbotapi.types.chat.GroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewGroupChat
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.GroupEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.GroupEventMessage
|
||||
|
||||
data class CommonGroupEventMessage<T : GroupEvent>(
|
||||
override val messageId: MessageId,
|
||||
override val from: User,
|
||||
override val chat: GroupChat,
|
||||
override val chat: PreviewGroupChat,
|
||||
override val chatEvent: T,
|
||||
override val date: DateTime
|
||||
) : GroupEventMessage<T>
|
||||
|
@ -2,6 +2,7 @@ package dev.inmo.tgbotapi.types.message
|
||||
|
||||
import korlibs.time.DateTime
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewSupergroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import dev.inmo.tgbotapi.types.chat.SupergroupChat
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.SupergroupEvent
|
||||
@ -10,7 +11,7 @@ import dev.inmo.tgbotapi.types.message.abstracts.SupergroupEventMessage
|
||||
data class CommonSupergroupEventMessage<T : SupergroupEvent>(
|
||||
override val messageId: MessageId,
|
||||
override val from: User,
|
||||
override val chat: SupergroupChat,
|
||||
override val chat: PreviewSupergroupChat,
|
||||
override val chatEvent: T,
|
||||
override val date: DateTime
|
||||
) : SupergroupEventMessage<T>
|
||||
|
@ -10,8 +10,8 @@ import dev.inmo.tgbotapi.types.message.abstracts.*
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
data class ConnectedFromChannelGroupContentMessageImpl<T : MessageContent>(
|
||||
override val chat: GroupChat,
|
||||
override val channel: ChannelChat,
|
||||
override val chat: PreviewGroupChat,
|
||||
override val channel: PreviewChannelChat,
|
||||
override val messageId: MessageId,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
@ -26,8 +26,8 @@ data class ConnectedFromChannelGroupContentMessageImpl<T : MessageContent>(
|
||||
) : ConnectedFromChannelGroupContentMessage<T>
|
||||
|
||||
data class UnconnectedFromChannelGroupContentMessageImpl<T: MessageContent>(
|
||||
override val chat: GroupChat,
|
||||
override val channel: ChannelChat,
|
||||
override val chat: PreviewGroupChat,
|
||||
override val channel: PreviewChannelChat,
|
||||
override val messageId: MessageId,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
@ -42,7 +42,7 @@ data class UnconnectedFromChannelGroupContentMessageImpl<T: MessageContent>(
|
||||
) : UnconnectedFromChannelGroupContentMessage<T>
|
||||
|
||||
data class AnonymousGroupContentMessageImpl<T : MessageContent>(
|
||||
override val chat: GroupChat,
|
||||
override val chat: PreviewGroupChat,
|
||||
override val messageId: MessageId,
|
||||
override val date: DateTime,
|
||||
override val forwardInfo: ForwardInfo?,
|
||||
@ -57,7 +57,7 @@ data class AnonymousGroupContentMessageImpl<T : MessageContent>(
|
||||
) : AnonymousGroupContentMessage<T>
|
||||
|
||||
data class CommonGroupContentMessageImpl<T : MessageContent>(
|
||||
override val chat: GroupChat,
|
||||
override val chat: PreviewGroupChat,
|
||||
override val messageId: MessageId,
|
||||
override val from: User,
|
||||
override val date: DateTime,
|
||||
@ -72,8 +72,8 @@ data class CommonGroupContentMessageImpl<T : MessageContent>(
|
||||
) : CommonGroupContentMessage<T>
|
||||
|
||||
data class FromChannelForumContentMessageImpl<T: MessageContent>(
|
||||
override val chat: ForumChat,
|
||||
override val channel: ChannelChat,
|
||||
override val chat: PreviewForumChat,
|
||||
override val channel: PreviewChannelChat,
|
||||
override val messageId: MessageId,
|
||||
override val threadId: MessageThreadId,
|
||||
override val date: DateTime,
|
||||
@ -89,7 +89,7 @@ data class FromChannelForumContentMessageImpl<T: MessageContent>(
|
||||
) : FromChannelForumContentMessage<T>
|
||||
|
||||
data class AnonymousForumContentMessageImpl<T : MessageContent>(
|
||||
override val chat: ForumChat,
|
||||
override val chat: PreviewForumChat,
|
||||
override val messageId: MessageId,
|
||||
override val threadId: MessageThreadId,
|
||||
override val date: DateTime,
|
||||
@ -105,7 +105,7 @@ data class AnonymousForumContentMessageImpl<T : MessageContent>(
|
||||
) : AnonymousForumContentMessage<T>
|
||||
|
||||
data class CommonForumContentMessageImpl<T : MessageContent>(
|
||||
override val chat: ForumChat,
|
||||
override val chat: PreviewForumChat,
|
||||
override val messageId: MessageId,
|
||||
override val threadId: MessageThreadId,
|
||||
override val from: User,
|
||||
|
@ -4,13 +4,14 @@ 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.passport.PassportData
|
||||
|
||||
data class PassportMessage(
|
||||
override val messageId: MessageId,
|
||||
override val chat: Chat,
|
||||
override val chat: PreviewChat,
|
||||
override val from: User,
|
||||
override val date: DateTime,
|
||||
val passportData: PassportData
|
||||
|
@ -13,7 +13,7 @@ import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
data class PrivateContentMessageImpl<T: MessageContent>(
|
||||
override val messageId: MessageId,
|
||||
override val from: User,
|
||||
override val chat: Chat,
|
||||
override val chat: PreviewPrivateChat,
|
||||
override val content: T,
|
||||
override val date: DateTime,
|
||||
override val editDate: DateTime?,
|
||||
|
@ -2,13 +2,14 @@ package dev.inmo.tgbotapi.types.message
|
||||
|
||||
import korlibs.time.DateTime
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewPrivateChat
|
||||
import dev.inmo.tgbotapi.types.chat.PrivateChat
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.PrivateEvent
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ChatEventMessage
|
||||
|
||||
data class PrivateEventMessage<T : PrivateEvent>(
|
||||
override val messageId: MessageId,
|
||||
override val chat: PrivateChat,
|
||||
override val chat: PreviewPrivateChat,
|
||||
override val chatEvent: T,
|
||||
override val date: DateTime
|
||||
) : ChatEventMessage<T>
|
||||
|
@ -43,11 +43,11 @@ internal data class RawMessage(
|
||||
@SerialName(messageIdField)
|
||||
val messageId: MessageId,
|
||||
val date: TelegramDate,
|
||||
private val chat: Chat,
|
||||
private val chat: PreviewChat,
|
||||
@SerialName(messageThreadIdField)
|
||||
private val messageThreadId: MessageThreadId? = null,
|
||||
private val from: User? = null,
|
||||
private val sender_chat: PublicChat? = null,
|
||||
private val sender_chat: PreviewPublicChat? = null,
|
||||
private val forward_from: User? = null,
|
||||
private val forward_from_chat: Chat? = null,
|
||||
private val forward_from_message_id: MessageId? = null,
|
||||
@ -274,27 +274,27 @@ internal data class RawMessage(
|
||||
try {
|
||||
chatEvent?.let { chatEvent ->
|
||||
when (chat) {
|
||||
is SupergroupChat -> CommonSupergroupEventMessage(
|
||||
is PreviewSupergroupChat -> CommonSupergroupEventMessage(
|
||||
messageId,
|
||||
from ?: error("Supergroup events are expected to contain 'from' field"),
|
||||
chat,
|
||||
chatEvent as? SupergroupEvent ?: throwWrongChatEvent(SupergroupEvent::class, chatEvent),
|
||||
date.asDate
|
||||
)
|
||||
is GroupChat -> CommonGroupEventMessage(
|
||||
is PreviewGroupChat -> CommonGroupEventMessage(
|
||||
messageId,
|
||||
from ?: error("Supergroup events are expected to contain 'from' field"),
|
||||
chat,
|
||||
chatEvent as? GroupEvent ?: throwWrongChatEvent(GroupChat::class, chatEvent),
|
||||
date.asDate
|
||||
)
|
||||
is ChannelChat -> ChannelEventMessage(
|
||||
is PreviewChannelChat -> ChannelEventMessage(
|
||||
messageId,
|
||||
chat,
|
||||
chatEvent as? ChannelEvent ?: throwWrongChatEvent(ChannelEvent::class, chatEvent),
|
||||
date.asDate
|
||||
)
|
||||
is PrivateChat -> PrivateEventMessage(
|
||||
is PreviewPrivateChat -> PrivateEventMessage(
|
||||
messageId,
|
||||
chat,
|
||||
chatEvent as? PrivateEvent ?: throwWrongChatEvent(PrivateEvent::class, chatEvent),
|
||||
@ -303,8 +303,8 @@ internal data class RawMessage(
|
||||
else -> error("Expected one of the public chats, but was $chat (in extracting of chat event message)")
|
||||
}
|
||||
} ?: content?.let { content -> when (chat) {
|
||||
is PublicChat -> when (chat) {
|
||||
is ChannelChat -> ChannelContentMessageImpl(
|
||||
is PreviewPublicChat -> when (chat) {
|
||||
is PreviewChannelChat -> ChannelContentMessageImpl(
|
||||
messageId,
|
||||
chat,
|
||||
content,
|
||||
@ -318,17 +318,16 @@ internal data class RawMessage(
|
||||
author_signature,
|
||||
media_group_id
|
||||
)
|
||||
is ForumChat -> if (messageThreadId != null) {
|
||||
is PreviewForumChat -> if (messageThreadId != null) {
|
||||
val chatId = ChatIdWithThreadId(
|
||||
chat.id.chatId,
|
||||
messageThreadId
|
||||
)
|
||||
val actualForumChat = when (chat) {
|
||||
is ExtendedForumChatImpl -> chat.copy(id = chatId)
|
||||
is ForumChatImpl -> chat.copy(id = chatId)
|
||||
}
|
||||
when (sender_chat) {
|
||||
is ChannelChat -> FromChannelForumContentMessageImpl(
|
||||
is PreviewChannelChat -> FromChannelForumContentMessageImpl(
|
||||
actualForumChat,
|
||||
sender_chat,
|
||||
messageId,
|
||||
@ -344,7 +343,7 @@ internal data class RawMessage(
|
||||
author_signature,
|
||||
media_group_id
|
||||
)
|
||||
is GroupChat -> AnonymousForumContentMessageImpl(
|
||||
is PreviewGroupChat -> AnonymousForumContentMessageImpl(
|
||||
actualForumChat,
|
||||
messageId,
|
||||
messageThreadId,
|
||||
@ -377,7 +376,7 @@ internal data class RawMessage(
|
||||
}
|
||||
} else {
|
||||
when (sender_chat) {
|
||||
is ChannelChat -> if (is_automatic_forward == true) {
|
||||
is PreviewChannelChat -> if (is_automatic_forward == true) {
|
||||
ConnectedFromChannelGroupContentMessageImpl(
|
||||
chat,
|
||||
sender_chat,
|
||||
@ -440,8 +439,8 @@ internal data class RawMessage(
|
||||
)
|
||||
}
|
||||
}
|
||||
is GroupChat -> when (sender_chat) {
|
||||
is ChannelChat -> if (is_automatic_forward == true) {
|
||||
is PreviewGroupChat -> when (sender_chat) {
|
||||
is PreviewChannelChat -> if (is_automatic_forward == true) {
|
||||
ConnectedFromChannelGroupContentMessageImpl(
|
||||
chat,
|
||||
sender_chat,
|
||||
@ -474,7 +473,7 @@ internal data class RawMessage(
|
||||
media_group_id
|
||||
)
|
||||
}
|
||||
is GroupChat -> AnonymousGroupContentMessageImpl(
|
||||
is PreviewGroupChat -> AnonymousGroupContentMessageImpl(
|
||||
chat,
|
||||
messageId,
|
||||
date.asDate,
|
||||
@ -504,7 +503,7 @@ internal data class RawMessage(
|
||||
)
|
||||
}
|
||||
}
|
||||
is PrivateChat -> PrivateContentMessageImpl(
|
||||
is PreviewPrivateChat -> PrivateContentMessageImpl(
|
||||
messageId,
|
||||
from ?: error("Was detected common message, but owner (sender) of the message was not found"),
|
||||
chat,
|
||||
|
@ -1,10 +1,11 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.chat.ChannelChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChannelChat
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
interface ChannelContentMessage<T: MessageContent> : PossiblySentViaBotCommonMessage<T>, SignedMessage, WithSenderChatMessage {
|
||||
override val chat: ChannelChat
|
||||
override val senderChat: ChannelChat
|
||||
override val chat: PreviewChannelChat
|
||||
override val senderChat: PreviewChannelChat
|
||||
get() = chat
|
||||
}
|
||||
|
@ -1,5 +1,9 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewGroupChat
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.GroupEvent
|
||||
|
||||
interface GroupEventMessage<T : GroupEvent> : ChatEventMessage<T>, FromUserMessage
|
||||
interface GroupEventMessage<T : GroupEvent> : ChatEventMessage<T>, FromUserMessage {
|
||||
override val chat: PreviewGroupChat
|
||||
}
|
||||
|
@ -1,24 +1,22 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.MessageThreadId
|
||||
import dev.inmo.tgbotapi.types.chat.ChannelChat
|
||||
import dev.inmo.tgbotapi.types.chat.ForumChat
|
||||
import dev.inmo.tgbotapi.types.chat.GroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.*
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
sealed interface GroupContentMessage<T : MessageContent> : PublicContentMessage<T> {
|
||||
override val chat: GroupChat
|
||||
override val chat: PreviewGroupChat
|
||||
}
|
||||
|
||||
sealed interface ForumContentMessage<T : MessageContent> : GroupContentMessage<T>, PossiblyTopicMessage {
|
||||
override val chat: ForumChat
|
||||
override val chat: PreviewForumChat
|
||||
override val threadId: MessageThreadId
|
||||
}
|
||||
|
||||
|
||||
sealed interface FromChannelGroupContentMessage<T : MessageContent> : GroupContentMessage<T>, SignedMessage, WithSenderChatMessage {
|
||||
val channel: ChannelChat
|
||||
override val senderChat: ChannelChat
|
||||
val channel: PreviewChannelChat
|
||||
override val senderChat: PreviewChannelChat
|
||||
get() = channel
|
||||
}
|
||||
|
||||
@ -26,7 +24,7 @@ interface ConnectedFromChannelGroupContentMessage<T: MessageContent> : FromChann
|
||||
interface UnconnectedFromChannelGroupContentMessage<T: MessageContent> : FromChannelGroupContentMessage<T>
|
||||
|
||||
interface AnonymousGroupContentMessage<T : MessageContent> : GroupContentMessage<T>, SignedMessage, WithSenderChatMessage {
|
||||
override val senderChat: GroupChat
|
||||
override val senderChat: PreviewGroupChat
|
||||
get() = chat
|
||||
}
|
||||
|
||||
@ -35,7 +33,7 @@ interface CommonGroupContentMessage<T : MessageContent> : GroupContentMessage<T>
|
||||
interface FromChannelForumContentMessage<T: MessageContent> : FromChannelGroupContentMessage<T>, ForumContentMessage<T>
|
||||
|
||||
interface AnonymousForumContentMessage<T : MessageContent> : ForumContentMessage<T>, SignedMessage, WithSenderChatMessage {
|
||||
override val senderChat: GroupChat
|
||||
override val senderChat: PreviewGroupChat
|
||||
get() = chat
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,11 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import korlibs.time.DateTime
|
||||
import dev.inmo.tgbotapi.abstracts.WithChat
|
||||
import dev.inmo.tgbotapi.abstracts.WithPreviewChat
|
||||
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.*
|
||||
import kotlinx.serialization.descriptors.*
|
||||
@ -12,14 +13,14 @@ import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
|
||||
@ClassCastsIncluded(excludeRegex = ".*Impl")
|
||||
interface Message : WithChat {
|
||||
interface Message : WithPreviewChat {
|
||||
val messageId: MessageId
|
||||
val date: DateTime
|
||||
}
|
||||
|
||||
data class UnknownMessageType(
|
||||
override val messageId: MessageId,
|
||||
override val chat: Chat,
|
||||
override val chat: PreviewChat,
|
||||
override val date: DateTime,
|
||||
val insideException: Exception
|
||||
) : Message
|
||||
|
@ -1,5 +1,9 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewPrivateChat
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
interface PrivateContentMessage<T: MessageContent> : PossiblySentViaBotCommonMessage<T>, FromUserMessage
|
||||
interface PrivateContentMessage<T: MessageContent> : PossiblySentViaBotCommonMessage<T>, FromUserMessage {
|
||||
override val chat: PreviewPrivateChat
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewPublicChat
|
||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
sealed interface PublicContentMessage<T: MessageContent> : PossiblySentViaBotCommonMessage<T> {
|
||||
override val chat: PublicChat
|
||||
override val chat: PreviewPublicChat
|
||||
}
|
||||
|
@ -1,5 +1,9 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewGroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewSupergroupChat
|
||||
import dev.inmo.tgbotapi.types.message.ChatEvents.abstracts.SupergroupEvent
|
||||
|
||||
interface SupergroupEventMessage<T : SupergroupEvent> : GroupEventMessage<T>
|
||||
interface SupergroupEventMessage<T : SupergroupEvent> : GroupEventMessage<T> {
|
||||
override val chat: PreviewSupergroupChat
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
|
||||
interface WithSenderChatMessage {
|
||||
val senderChat: Chat
|
||||
val senderChat: PreviewChat
|
||||
}
|
||||
|
@ -126,6 +126,17 @@ import dev.inmo.tgbotapi.types.chat.ExtendedSupergroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.ForumChat
|
||||
import dev.inmo.tgbotapi.types.chat.GroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.PossiblyPremiumChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewBot
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChannelChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewForumChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewGroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewPrivateChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewPublicChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewSuperPublicChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewSupergroupChat
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewUser
|
||||
import dev.inmo.tgbotapi.types.chat.PreviewUsernameChat
|
||||
import dev.inmo.tgbotapi.types.chat.PrivateChat
|
||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
||||
import dev.inmo.tgbotapi.types.chat.SuperPublicChat
|
||||
@ -1969,12 +1980,30 @@ public inline fun Chat.userOrThrow(): User = this as dev.inmo.tgbotapi.types.cha
|
||||
|
||||
public inline fun <T> Chat.ifUser(block: (User) -> T): T? = userOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewUserOrNull(): PreviewUser? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewUser
|
||||
|
||||
public inline fun Chat.previewUserOrThrow(): PreviewUser = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewUser
|
||||
|
||||
public inline fun <T> Chat.ifPreviewUser(block: (PreviewUser) -> T): T? = previewUserOrNull()
|
||||
?.let(block)
|
||||
|
||||
public inline fun Chat.botOrNull(): Bot? = this as? dev.inmo.tgbotapi.types.chat.Bot
|
||||
|
||||
public inline fun Chat.botOrThrow(): Bot = this as dev.inmo.tgbotapi.types.chat.Bot
|
||||
|
||||
public inline fun <T> Chat.ifBot(block: (Bot) -> T): T? = botOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewBotOrNull(): PreviewBot? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewBot
|
||||
|
||||
public inline fun Chat.previewBotOrThrow(): PreviewBot = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewBot
|
||||
|
||||
public inline fun <T> Chat.ifPreviewBot(block: (PreviewBot) -> T): T? = previewBotOrNull()
|
||||
?.let(block)
|
||||
|
||||
public inline fun Chat.commonBotOrNull(): CommonBot? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.CommonBot
|
||||
|
||||
@ -1992,6 +2021,87 @@ public inline fun Chat.commonUserOrThrow(): CommonUser = this as
|
||||
public inline fun <T> Chat.ifCommonUser(block: (CommonUser) -> T): T? = commonUserOrNull()
|
||||
?.let(block)
|
||||
|
||||
public inline fun Chat.previewChatOrNull(): PreviewChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
|
||||
public inline fun Chat.previewChatOrThrow(): PreviewChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewChat(block: (PreviewChat) -> T): T? = previewChatOrNull()
|
||||
?.let(block)
|
||||
|
||||
public inline fun Chat.previewUsernameChatOrNull(): PreviewUsernameChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewUsernameChat
|
||||
|
||||
public inline fun Chat.previewUsernameChatOrThrow(): PreviewUsernameChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewUsernameChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewUsernameChat(block: (PreviewUsernameChat) -> T): T? =
|
||||
previewUsernameChatOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewPrivateChatOrNull(): PreviewPrivateChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewPrivateChat
|
||||
|
||||
public inline fun Chat.previewPrivateChatOrThrow(): PreviewPrivateChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewPrivateChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewPrivateChat(block: (PreviewPrivateChat) -> T): T? =
|
||||
previewPrivateChatOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewPublicChatOrNull(): PreviewPublicChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewPublicChat
|
||||
|
||||
public inline fun Chat.previewPublicChatOrThrow(): PreviewPublicChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewPublicChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewPublicChat(block: (PreviewPublicChat) -> T): T? =
|
||||
previewPublicChatOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewSuperPublicChatOrNull(): PreviewSuperPublicChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewSuperPublicChat
|
||||
|
||||
public inline fun Chat.previewSuperPublicChatOrThrow(): PreviewSuperPublicChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewSuperPublicChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewSuperPublicChat(block: (PreviewSuperPublicChat) -> T): T? =
|
||||
previewSuperPublicChatOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewChannelChatOrNull(): PreviewChannelChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewChannelChat
|
||||
|
||||
public inline fun Chat.previewChannelChatOrThrow(): PreviewChannelChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewChannelChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewChannelChat(block: (PreviewChannelChat) -> T): T? =
|
||||
previewChannelChatOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewGroupChatOrNull(): PreviewGroupChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewGroupChat
|
||||
|
||||
public inline fun Chat.previewGroupChatOrThrow(): PreviewGroupChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewGroupChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewGroupChat(block: (PreviewGroupChat) -> T): T? =
|
||||
previewGroupChatOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewSupergroupChatOrNull(): PreviewSupergroupChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewSupergroupChat
|
||||
|
||||
public inline fun Chat.previewSupergroupChatOrThrow(): PreviewSupergroupChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewSupergroupChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewSupergroupChat(block: (PreviewSupergroupChat) -> T): T? =
|
||||
previewSupergroupChatOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.previewForumChatOrNull(): PreviewForumChat? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.PreviewForumChat
|
||||
|
||||
public inline fun Chat.previewForumChatOrThrow(): PreviewForumChat = this as
|
||||
dev.inmo.tgbotapi.types.chat.PreviewForumChat
|
||||
|
||||
public inline fun <T> Chat.ifPreviewForumChat(block: (PreviewForumChat) -> T): T? =
|
||||
previewForumChatOrNull() ?.let(block)
|
||||
|
||||
public inline fun Chat.unknownChatTypeOrNull(): UnknownChatType? = this as?
|
||||
dev.inmo.tgbotapi.types.chat.UnknownChatType
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
package dev.inmo.tgbotapi.extensions.utils.extensions
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.FromUser
|
||||
import dev.inmo.tgbotapi.abstracts.WithChat
|
||||
import dev.inmo.tgbotapi.abstracts.WithPreviewChat
|
||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.UserId
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
@ -15,13 +15,13 @@ import kotlinx.coroutines.flow.transform
|
||||
* Will pass only those [T] which have [sameChat] as [chatId]
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun <T : WithChat> Flow<T>.fromChat(chatId: ChatIdentifier): Flow<T> = filter { it.sameChat(chatId) }
|
||||
inline fun <T : WithPreviewChat> Flow<T>.fromChat(chatId: ChatIdentifier): Flow<T> = filter { it.sameChat(chatId) }
|
||||
|
||||
/**
|
||||
* Will pass only those [T] which have [sameChat] as [chatId]
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun <T : WithChat> Flow<T>.fromChat(chat: Chat): Flow<T> = fromChat(chat.id)
|
||||
inline fun <T : WithPreviewChat> Flow<T>.fromChat(chat: Chat): Flow<T> = fromChat(chat.id)
|
||||
|
||||
/**
|
||||
* @return [Flow] with the [FromUser.user] field [User.id] the same as [userId]
|
||||
|
@ -1,6 +1,6 @@
|
||||
package dev.inmo.tgbotapi.extensions.utils.extensions
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.WithChat
|
||||
import dev.inmo.tgbotapi.abstracts.WithPreviewChat
|
||||
import dev.inmo.tgbotapi.extensions.utils.usernameChatOrNull
|
||||
import dev.inmo.tgbotapi.extensions.utils.whenUsernameChat
|
||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
@ -16,7 +16,8 @@ import dev.inmo.tgbotapi.utils.extensions.threadIdOrNull
|
||||
* @return true in case if [this] message is placed in the chat with id == [chatId]
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun WithChat.sameChat(chatId: ChatIdentifier) = chat.id == chatId || (chatId is Username && chat.whenUsernameChat {
|
||||
inline fun WithPreviewChat.sameChat(chatId: ChatIdentifier) =
|
||||
chat.id == chatId || (chatId is Username && chat.whenUsernameChat {
|
||||
it.username == chatId
|
||||
} ?: false)
|
||||
|
||||
@ -24,13 +25,14 @@ inline fun WithChat.sameChat(chatId: ChatIdentifier) = chat.id == chatId || (cha
|
||||
* @return true in case if [this] message is placed in the [chat]
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun WithChat.sameChat(chat: Chat) = sameChat(chat.id) || chat.usernameChatOrNull() ?.username ?.let { sameChat(it) } ?: false
|
||||
inline fun WithPreviewChat.sameChat(chat: Chat) =
|
||||
sameChat(chat.id) || chat.usernameChatOrNull()?.username?.let { sameChat(it) } ?: false
|
||||
|
||||
/**
|
||||
* @return true in case if [this] message is placed in the same chat that [other]
|
||||
*/
|
||||
@Suppress("NOTHING_TO_INLINE")
|
||||
inline fun WithChat.sameChat(other: Message) = sameChat(other.chat)
|
||||
inline fun WithPreviewChat.sameChat(other: Message) = sameChat(other.chat)
|
||||
|
||||
/**
|
||||
* @return true in case if [this] message is from the same chat (with id == [chatId]) and [this] [Message.messageId]
|
||||
|
Loading…
Reference in New Issue
Block a user