mirror of
https://github.com/InsanusMokrassar/TelegramBotAPI.git
synced 2025-11-27 01:35:47 +00:00
start rework
This commit is contained in:
@@ -7,21 +7,27 @@ import dev.inmo.tgbotapi.requests.send.media.base.*
|
||||
import dev.inmo.tgbotapi.types.*
|
||||
import dev.inmo.tgbotapi.types.media.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializerClass
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.VisualMediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.types.message.content.VisualMediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.types.message.content.AudioContent
|
||||
import dev.inmo.tgbotapi.types.message.content.DocumentContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.utils.*
|
||||
import dev.inmo.tgbotapi.utils.extensions.asMediaGroupContent
|
||||
import kotlinx.serialization.*
|
||||
import kotlinx.serialization.builtins.ListSerializer
|
||||
import kotlinx.serialization.descriptors.SerialDescriptor
|
||||
import kotlinx.serialization.encoding.Decoder
|
||||
import kotlinx.serialization.encoding.Encoder
|
||||
import kotlinx.serialization.json.buildJsonArray
|
||||
|
||||
const val rawSendingMediaGroupsWarning = "Media groups contains restrictions related to combinations of media" +
|
||||
" types. Currently it is possible to combine photo + video OR audio OR documents"
|
||||
|
||||
@RiskFeature(rawSendingMediaGroupsWarning)
|
||||
fun <T : MediaGroupContent> SendMediaGroup(
|
||||
fun <T : MediaGroupPartContent> SendMediaGroup(
|
||||
chatId: ChatIdentifier,
|
||||
media: List<MediaGroupMemberTelegramMedia>,
|
||||
disableNotification: Boolean = false,
|
||||
@@ -107,10 +113,22 @@ inline fun SendVisualMediaGroup(
|
||||
protectContent: Boolean = false,
|
||||
replyToMessageId: MessageId? = null,
|
||||
allowSendingWithoutReply: Boolean? = null
|
||||
) = SendMediaGroup<VisualMediaGroupContent>(chatId, media, disableNotification, protectContent, replyToMessageId, allowSendingWithoutReply)
|
||||
) = SendMediaGroup<VisualMediaGroupPartContent>(chatId, media, disableNotification, protectContent, replyToMessageId, allowSendingWithoutReply)
|
||||
|
||||
private val messagesListSerializer: KSerializer<List<MediaGroupMessage<MediaGroupContent>>>
|
||||
= ListSerializer(TelegramBotAPIMessageDeserializeOnlySerializerClass())
|
||||
private object MessagesListSerializer: KSerializer<PossiblySentViaBotCommonMessage<MediaGroupContent>> {
|
||||
private val serializer = ListSerializer(TelegramBotAPIMessageDeserializeOnlySerializerClass<PossiblySentViaBotCommonMessage<MediaGroupPartContent>>())
|
||||
override val descriptor: SerialDescriptor = serializer.descriptor
|
||||
|
||||
override fun deserialize(decoder: Decoder): PossiblySentViaBotCommonMessage<MediaGroupContent> {
|
||||
val messages = serializer.deserialize(decoder)
|
||||
return messages.asMediaGroupContent()
|
||||
}
|
||||
|
||||
override fun serialize(encoder: Encoder, value: PossiblySentViaBotCommonMessage<MediaGroupContent>) {
|
||||
serializer.serialize(encoder, value.content.group.map { it.sourceMessage })
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class SendMediaGroupData internal constructor(
|
||||
@@ -125,7 +143,7 @@ data class SendMediaGroupData internal constructor(
|
||||
override val replyToMessageId: MessageId? = null,
|
||||
@SerialName(allowSendingWithoutReplyField)
|
||||
override val allowSendingWithoutReply: Boolean? = null
|
||||
) : DataRequest<List<MediaGroupMessage<MediaGroupContent>>>, SendMessageRequest<List<MediaGroupMessage<MediaGroupContent>>> {
|
||||
) : DataRequest<List<MediaGroupMessage<MediaGroupPartContent>>>, SendMessageRequest<List<MediaGroupMessage<MediaGroupPartContent>>> {
|
||||
@SerialName(mediaField)
|
||||
private val convertedMedia: String
|
||||
get() = buildJsonArray {
|
||||
@@ -138,7 +156,7 @@ data class SendMediaGroupData internal constructor(
|
||||
override fun method(): String = "sendMediaGroup"
|
||||
override val requestSerializer: SerializationStrategy<*>
|
||||
get() = serializer()
|
||||
override val resultDeserializer: DeserializationStrategy<List<MediaGroupMessage<MediaGroupContent>>>
|
||||
override val resultDeserializer: DeserializationStrategy<List<MediaGroupMessage<MediaGroupPartContent>>>
|
||||
get() = messagesListSerializer
|
||||
}
|
||||
|
||||
|
||||
@@ -7,9 +7,9 @@ import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.Message
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
|
||||
data class ChannelMediaGroupMessage<T : MediaGroupContent>(
|
||||
data class ChannelMediaGroupMessage<T : MediaGroupPartContent>(
|
||||
override val messageId: MessageId,
|
||||
override val chat: Chat,
|
||||
override val date: DateTime,
|
||||
|
||||
@@ -6,9 +6,9 @@ import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup
|
||||
import dev.inmo.tgbotapi.types.chat.Chat
|
||||
import dev.inmo.tgbotapi.types.chat.User
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.*
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
|
||||
data class CommonMediaGroupMessage<T : MediaGroupContent>(
|
||||
data class CommonMediaGroupMessage<T : MediaGroupPartContent>(
|
||||
override val messageId: MessageId,
|
||||
override val from: User,
|
||||
override val chat: Chat,
|
||||
|
||||
@@ -2,7 +2,7 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
interface CommonMessage<T: MessageContent> : Message,
|
||||
sealed interface CommonMessage<T: MessageContent> : Message,
|
||||
PossiblyForwardedMessage,
|
||||
PossiblyEditedMessage,
|
||||
PossiblyReplyMessage,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.MediaGroupIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
|
||||
interface MediaGroupMessage<T : MediaGroupContent> : CommonMessage<T> {
|
||||
interface MediaGroupMessage<T : MediaGroupPartContent> : CommonMessage<T> {
|
||||
val mediaGroupId: MediaGroupIdentifier
|
||||
}
|
||||
|
||||
@@ -2,4 +2,4 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
interface PossiblySentViaBotCommonMessage<T: MessageContent> : CommonMessage<T>, PossiblySentViaBot
|
||||
sealed interface PossiblySentViaBotCommonMessage<T: MessageContent> : CommonMessage<T>, PossiblySentViaBot
|
||||
|
||||
@@ -3,6 +3,6 @@ package dev.inmo.tgbotapi.types.message.abstracts
|
||||
import dev.inmo.tgbotapi.types.chat.PublicChat
|
||||
import dev.inmo.tgbotapi.types.message.content.MessageContent
|
||||
|
||||
interface PublicContentMessage<T: MessageContent> : PossiblySentViaBotCommonMessage<T> {
|
||||
sealed interface PublicContentMessage<T: MessageContent> : PossiblySentViaBotCommonMessage<T> {
|
||||
override val chat: PublicChat
|
||||
}
|
||||
|
||||
@@ -15,10 +15,10 @@ sealed interface MessageContent: ResendableContent {
|
||||
companion object {
|
||||
@RiskFeature("This serialization module can be changed in near releases")
|
||||
fun serializationModule(
|
||||
visualMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<VisualMediaGroupContent>.() -> Unit = {},
|
||||
documentMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<DocumentMediaGroupContent>.() -> Unit = {},
|
||||
audioMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<AudioMediaGroupContent>.() -> Unit = {},
|
||||
mediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<MediaGroupContent>.() -> Unit = {},
|
||||
visualMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<VisualMediaGroupPartContent>.() -> Unit = {},
|
||||
documentMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<DocumentMediaGroupPartContent>.() -> Unit = {},
|
||||
audioMediaGroupContentAdditionalBuilder: PolymorphicModuleBuilder<AudioMediaGroupPartContent>.() -> Unit = {},
|
||||
mediaGroupPartContentAdditionalBuilder: PolymorphicModuleBuilder<MediaGroupPartContent>.() -> Unit = {},
|
||||
textedMediaContentAdditionalBuilder: PolymorphicModuleBuilder<TextedMediaContent>.() -> Unit = {},
|
||||
mediaContentAdditionalBuilder: PolymorphicModuleBuilder<MediaContent>.() -> Unit = {},
|
||||
mediaCollectionContentAdditionalBuilder: PolymorphicModuleBuilder<MediaCollectionContent<*>>.() -> Unit = {},
|
||||
@@ -73,24 +73,24 @@ sealed interface MessageContent: ResendableContent {
|
||||
|
||||
textedMediaContentAdditionalBuilder()
|
||||
}
|
||||
polymorphic(MediaGroupContent::class) {
|
||||
polymorphic(MediaGroupPartContent::class) {
|
||||
subclass(PhotoContent::class)
|
||||
subclass(AudioContent::class)
|
||||
subclass(DocumentContent::class)
|
||||
|
||||
mediaGroupContentAdditionalBuilder()
|
||||
mediaGroupPartContentAdditionalBuilder()
|
||||
}
|
||||
polymorphic(AudioMediaGroupContent::class) {
|
||||
polymorphic(AudioMediaGroupPartContent::class) {
|
||||
subclass(AudioContent::class)
|
||||
|
||||
audioMediaGroupContentAdditionalBuilder()
|
||||
}
|
||||
polymorphic(DocumentMediaGroupContent::class) {
|
||||
polymorphic(DocumentMediaGroupPartContent::class) {
|
||||
subclass(DocumentContent::class)
|
||||
|
||||
documentMediaGroupContentAdditionalBuilder()
|
||||
}
|
||||
polymorphic(VisualMediaGroupContent::class) {
|
||||
polymorphic(VisualMediaGroupPartContent::class) {
|
||||
subclass(PhotoContent::class)
|
||||
subclass(VideoContent::class)
|
||||
|
||||
|
||||
@@ -1,28 +1,44 @@
|
||||
package dev.inmo.tgbotapi.types.message.content
|
||||
|
||||
import dev.inmo.tgbotapi.abstracts.TextedInput
|
||||
import dev.inmo.tgbotapi.types.MediaGroupIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
import dev.inmo.tgbotapi.types.files.AudioFile
|
||||
import dev.inmo.tgbotapi.types.files.DocumentFile
|
||||
import dev.inmo.tgbotapi.types.media.*
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.CommonMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
sealed interface AudioMediaGroupContent : MediaGroupContent {
|
||||
sealed interface AudioMediaGroupPartContent : MediaGroupPartContent {
|
||||
override val media: AudioFile
|
||||
|
||||
override fun toMediaGroupMemberTelegramMedia(): AudioMediaGroupMemberTelegramMedia
|
||||
}
|
||||
|
||||
sealed interface DocumentMediaGroupContent : MediaGroupContent {
|
||||
sealed interface DocumentMediaGroupPartContent : MediaGroupPartContent {
|
||||
override val media: DocumentFile
|
||||
|
||||
override fun toMediaGroupMemberTelegramMedia(): DocumentMediaGroupMemberTelegramMedia
|
||||
}
|
||||
|
||||
sealed interface MediaGroupContent : TextedMediaContent {
|
||||
sealed interface TextedMediaContent : MediaContent, TextedInput
|
||||
|
||||
sealed interface MediaGroupCollectionContent : TextedMediaContent {
|
||||
@Serializable
|
||||
data class PartWrapper(
|
||||
val messageId: MessageId,
|
||||
val content: MediaGroupPartContent,
|
||||
val sourceMessage: PossiblySentViaBotCommonMessage<MediaGroupPartContent>
|
||||
)
|
||||
val group: List<PartWrapper>
|
||||
val mediaGroupId: MediaGroupIdentifier
|
||||
}
|
||||
|
||||
sealed interface MediaGroupPartContent : TextedMediaContent {
|
||||
fun toMediaGroupMemberTelegramMedia(): MediaGroupMemberTelegramMedia
|
||||
}
|
||||
|
||||
sealed interface TextedMediaContent : MediaContent, TextedInput
|
||||
|
||||
sealed interface VisualMediaGroupContent : MediaGroupContent {
|
||||
sealed interface VisualMediaGroupPartContent : MediaGroupPartContent {
|
||||
override fun toMediaGroupMemberTelegramMedia(): VisualMediaGroupMemberTelegramMedia
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ data class AudioContent(
|
||||
override val media: AudioFile,
|
||||
override val text: String? = null,
|
||||
override val textSources: TextSourcesList = emptyList()
|
||||
) : AudioMediaGroupContent {
|
||||
) : AudioMediaGroupPartContent {
|
||||
override fun createResend(
|
||||
chatId: ChatIdentifier,
|
||||
disableNotification: Boolean,
|
||||
|
||||
@@ -19,7 +19,7 @@ data class DocumentContent(
|
||||
override val media: DocumentFile,
|
||||
override val text: String? = null,
|
||||
override val textSources: TextSourcesList = emptyList()
|
||||
) : DocumentMediaGroupContent {
|
||||
) : DocumentMediaGroupPartContent {
|
||||
override fun createResend(
|
||||
chatId: ChatIdentifier,
|
||||
disableNotification: Boolean,
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package dev.inmo.tgbotapi.types.message.content
|
||||
|
||||
import dev.inmo.tgbotapi.requests.abstracts.Request
|
||||
import dev.inmo.tgbotapi.requests.send.media.SendMediaGroup
|
||||
import dev.inmo.tgbotapi.types.ChatIdentifier
|
||||
import dev.inmo.tgbotapi.types.MediaGroupIdentifier
|
||||
import dev.inmo.tgbotapi.types.MessageId
|
||||
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.Message
|
||||
import dev.inmo.tgbotapi.types.message.textsources.TextSource
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class MediaGroupContent(
|
||||
override val group: List<MediaGroupCollectionContent.PartWrapper>,
|
||||
override val mediaGroupId: MediaGroupIdentifier
|
||||
) : MediaGroupCollectionContent {
|
||||
val mainContent: MediaGroupPartContent
|
||||
get() = group.first().content
|
||||
override val media: TelegramMediaFile
|
||||
get() = mainContent.media
|
||||
|
||||
override val textSources: List<TextSource>
|
||||
get() = mainContent.textSources
|
||||
override val text: String?
|
||||
get() = mainContent.text
|
||||
|
||||
override fun asTelegramMedia(): TelegramMedia = mainContent.asTelegramMedia()
|
||||
|
||||
override fun createResend(
|
||||
chatId: ChatIdentifier,
|
||||
disableNotification: Boolean,
|
||||
protectContent: Boolean,
|
||||
replyToMessageId: MessageId?,
|
||||
allowSendingWithoutReply: Boolean?,
|
||||
replyMarkup: KeyboardMarkup?
|
||||
): Request<out Message> = SendMediaGroup<MediaGroupPartContent>(
|
||||
chatId,
|
||||
group.map { it.content.toMediaGroupMemberTelegramMedia() },
|
||||
disableNotification,
|
||||
protectContent,
|
||||
replyToMessageId,
|
||||
allowSendingWithoutReply,
|
||||
replyMarkup
|
||||
)
|
||||
}
|
||||
@@ -17,7 +17,7 @@ data class PhotoContent(
|
||||
override val mediaCollection: Photo,
|
||||
override val text: String? = null,
|
||||
override val textSources: TextSourcesList = emptyList()
|
||||
) : MediaCollectionContent<PhotoSize>, VisualMediaGroupContent {
|
||||
) : MediaCollectionContent<PhotoSize>, VisualMediaGroupPartContent {
|
||||
override val media: PhotoSize = mediaCollection.biggest() ?: throw IllegalStateException("Can't locate any photo size for this content")
|
||||
|
||||
override fun createResend(
|
||||
|
||||
@@ -20,12 +20,12 @@ typealias VideoNoteMessage = CommonMessage<VideoNoteContent>
|
||||
typealias StickerMessage = CommonMessage<StickerContent>
|
||||
typealias TextedMediaMessage = CommonMessage<TextedMediaContent>
|
||||
typealias VoiceMessage = CommonMessage<VoiceContent>
|
||||
typealias MediaGroupMessage = CommonMessage<MediaGroupContent>
|
||||
typealias AudioMediaGroupMessage = CommonMessage<AudioMediaGroupContent>
|
||||
typealias MediaGroupMessage = CommonMessage<MediaGroupPartContent>
|
||||
typealias AudioMediaGroupMessage = CommonMessage<AudioMediaGroupPartContent>
|
||||
typealias AudioMessage = CommonMessage<AudioContent>
|
||||
typealias DocumentMediaGroupMessage = CommonMessage<DocumentMediaGroupContent>
|
||||
typealias DocumentMediaGroupMessage = CommonMessage<DocumentMediaGroupPartContent>
|
||||
typealias DocumentMessage = CommonMessage<DocumentContent>
|
||||
typealias VisualMediaGroupMessage = CommonMessage<VisualMediaGroupContent>
|
||||
typealias VisualMediaGroupMessage = CommonMessage<VisualMediaGroupPartContent>
|
||||
typealias VideoMessage = CommonMessage<VideoContent>
|
||||
typealias PhotoMessage = CommonMessage<PhotoContent>
|
||||
typealias AnimationMessage = CommonMessage<AnimationContent>
|
||||
|
||||
@@ -17,7 +17,7 @@ data class VideoContent(
|
||||
override val media: VideoFile,
|
||||
override val text: String? = null,
|
||||
override val textSources: TextSourcesList = emptyList()
|
||||
) : VisualMediaGroupContent {
|
||||
) : VisualMediaGroupPartContent {
|
||||
override fun createResend(
|
||||
chatId: ChatIdentifier,
|
||||
disableNotification: Boolean,
|
||||
|
||||
@@ -2,12 +2,12 @@ package dev.inmo.tgbotapi.types.update.media_group
|
||||
|
||||
import dev.inmo.tgbotapi.types.UpdateIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.BaseMessageUpdate
|
||||
|
||||
data class ChannelPostMediaGroupUpdate(
|
||||
override val origins: List<BaseMessageUpdate>
|
||||
) : SentMediaGroupUpdate {
|
||||
override val updateId: UpdateIdentifier = origins.last().updateId
|
||||
override val data: List<MediaGroupMessage<MediaGroupContent>> = origins.mapNotNull { it.data as? MediaGroupMessage<MediaGroupContent> }
|
||||
override val data: List<MediaGroupMessage<MediaGroupPartContent>> = origins.mapNotNull { it.data as? MediaGroupMessage<MediaGroupPartContent> }
|
||||
}
|
||||
|
||||
@@ -2,12 +2,12 @@ package dev.inmo.tgbotapi.types.update.media_group
|
||||
|
||||
import dev.inmo.tgbotapi.types.UpdateIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.types.update.EditChannelPostUpdate
|
||||
|
||||
data class EditChannelPostMediaGroupUpdate(
|
||||
override val origin: EditChannelPostUpdate
|
||||
) : EditMediaGroupUpdate {
|
||||
override val updateId: UpdateIdentifier = origin.updateId
|
||||
override val data: MediaGroupMessage<MediaGroupContent> = origin.data as MediaGroupMessage<MediaGroupContent>
|
||||
override val data: MediaGroupMessage<MediaGroupPartContent> = origin.data as MediaGroupMessage<MediaGroupPartContent>
|
||||
}
|
||||
|
||||
@@ -2,12 +2,12 @@ package dev.inmo.tgbotapi.types.update.media_group
|
||||
|
||||
import dev.inmo.tgbotapi.types.UpdateIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.types.update.EditMessageUpdate
|
||||
|
||||
data class EditMessageMediaGroupUpdate(
|
||||
override val origin: EditMessageUpdate
|
||||
) : EditMediaGroupUpdate {
|
||||
override val updateId: UpdateIdentifier = origin.updateId
|
||||
override val data: MediaGroupMessage<MediaGroupContent> = origin.data as MediaGroupMessage<MediaGroupContent>
|
||||
override val data: MediaGroupMessage<MediaGroupPartContent> = origin.data as MediaGroupMessage<MediaGroupPartContent>
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package dev.inmo.tgbotapi.types.update.media_group
|
||||
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.*
|
||||
|
||||
/**
|
||||
@@ -14,11 +14,11 @@ import dev.inmo.tgbotapi.types.update.abstracts.*
|
||||
sealed interface MediaGroupUpdate : Update
|
||||
|
||||
sealed interface SentMediaGroupUpdate: MediaGroupUpdate {
|
||||
override val data: List<MediaGroupMessage<MediaGroupContent>>
|
||||
override val data: List<MediaGroupMessage<MediaGroupPartContent>>
|
||||
val origins: List<BaseMessageUpdate>
|
||||
}
|
||||
|
||||
sealed interface EditMediaGroupUpdate : BaseEditMessageUpdate, MediaGroupUpdate {
|
||||
override val data: MediaGroupMessage<MediaGroupContent>
|
||||
override val data: MediaGroupMessage<MediaGroupPartContent>
|
||||
val origin: BaseMessageUpdate
|
||||
}
|
||||
|
||||
@@ -2,12 +2,12 @@ package dev.inmo.tgbotapi.types.update.media_group
|
||||
|
||||
import dev.inmo.tgbotapi.types.UpdateIdentifier
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.types.update.abstracts.BaseMessageUpdate
|
||||
|
||||
data class MessageMediaGroupUpdate(
|
||||
override val origins: List<BaseMessageUpdate>
|
||||
) : SentMediaGroupUpdate {
|
||||
override val updateId: UpdateIdentifier = origins.last().updateId
|
||||
override val data: List<MediaGroupMessage<MediaGroupContent>> = origins.mapNotNull { it.data as? MediaGroupMessage<MediaGroupContent> }
|
||||
override val data: List<MediaGroupMessage<MediaGroupPartContent>> = origins.mapNotNull { it.data as? MediaGroupMessage<MediaGroupPartContent> }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
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.AnonymousGroupContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.ChannelContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.CommonForumContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.CommonGroupContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.ConnectedFromChannelGroupContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.FromChannelForumContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.PrivateContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.UnconnectedFromChannelGroupContentMessageImpl
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AnonymousForumContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.AnonymousGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.ChannelContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.CommonForumContentMessage
|
||||
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.FromChannelForumContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.MediaGroupMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PossiblySentViaBotCommonMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.PrivateContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.abstracts.UnconnectedFromChannelGroupContentMessage
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupCollectionContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupContent
|
||||
import dev.inmo.tgbotapi.types.message.content.MediaGroupPartContent
|
||||
import dev.inmo.tgbotapi.utils.RiskFeature
|
||||
|
||||
@RiskFeature("This API is experimental and can be changed without any notice, use with caution")
|
||||
fun List<CommonMessage<MediaGroupPartContent>>.asMediaGroupContent(
|
||||
mediaGroupIdentifier: MediaGroupIdentifier
|
||||
): PossiblySentViaBotCommonMessage<MediaGroupContent> {
|
||||
val content = MediaGroupContent(
|
||||
map { MediaGroupCollectionContent.PartWrapper(it.messageId, it.content, it) },
|
||||
mediaGroupIdentifier
|
||||
)
|
||||
return when (val sourceMessage = first()) {
|
||||
is MediaGroupMessage -> TODO()
|
||||
is ChannelContentMessage -> ChannelContentMessageImpl(
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.chat,
|
||||
content,
|
||||
sourceMessage.date,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
sourceMessage.senderBot,
|
||||
sourceMessage.authorSignature
|
||||
)
|
||||
is PrivateContentMessage -> PrivateContentMessageImpl(
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.user,
|
||||
sourceMessage.chat,
|
||||
content,
|
||||
sourceMessage.date,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
sourceMessage.senderBot
|
||||
)
|
||||
is AnonymousGroupContentMessage -> AnonymousGroupContentMessageImpl(
|
||||
sourceMessage.chat,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
content,
|
||||
sourceMessage.senderBot,
|
||||
sourceMessage.authorSignature
|
||||
)
|
||||
is CommonGroupContentMessage -> CommonGroupContentMessageImpl(
|
||||
sourceMessage.chat,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.user,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
content,
|
||||
sourceMessage.senderBot
|
||||
)
|
||||
is ConnectedFromChannelGroupContentMessage -> ConnectedFromChannelGroupContentMessageImpl(
|
||||
sourceMessage.chat,
|
||||
sourceMessage.channel,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
content,
|
||||
sourceMessage.senderBot,
|
||||
sourceMessage.authorSignature
|
||||
)
|
||||
is UnconnectedFromChannelGroupContentMessage -> UnconnectedFromChannelGroupContentMessageImpl(
|
||||
sourceMessage.chat,
|
||||
sourceMessage.channel,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
content,
|
||||
sourceMessage.senderBot,
|
||||
sourceMessage.authorSignature
|
||||
)
|
||||
is AnonymousForumContentMessage -> AnonymousForumContentMessageImpl(
|
||||
sourceMessage.chat,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.threadId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
content,
|
||||
sourceMessage.senderBot,
|
||||
sourceMessage.authorSignature
|
||||
)
|
||||
is CommonForumContentMessage -> CommonForumContentMessageImpl(
|
||||
sourceMessage.chat,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.threadId,
|
||||
sourceMessage.user,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
content,
|
||||
sourceMessage.senderBot
|
||||
)
|
||||
is FromChannelForumContentMessage -> FromChannelForumContentMessageImpl(
|
||||
sourceMessage.chat,
|
||||
sourceMessage.channel,
|
||||
sourceMessage.messageId,
|
||||
sourceMessage.threadId,
|
||||
sourceMessage.date,
|
||||
sourceMessage.forwardInfo,
|
||||
sourceMessage.editDate,
|
||||
sourceMessage.hasProtectedContent,
|
||||
sourceMessage.replyTo,
|
||||
sourceMessage.replyMarkup,
|
||||
content,
|
||||
sourceMessage.senderBot,
|
||||
sourceMessage.authorSignature
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user