2018-12-26 08:07:24 +00:00
|
|
|
package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media
|
|
|
|
|
2020-02-06 18:56:32 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.bot.RequestsExecutor
|
2018-12-26 08:07:24 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.MultipartFile
|
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.Request
|
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.SendMessageRequest
|
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.*
|
2019-01-17 02:43:51 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.*
|
2019-02-23 10:34:55 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.InputMedia.*
|
2020-02-06 18:56:32 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.chat.abstracts.Chat
|
2020-01-15 05:17:53 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.MediaGroupMessage
|
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.types.message.abstracts.TelegramBotAPIMessageDeserializeOnlySerializerClass
|
2018-12-26 08:07:24 +00:00
|
|
|
import com.github.insanusmokrassar.TelegramBotAPI.utils.toJsonWithoutNulls
|
|
|
|
import kotlinx.serialization.*
|
|
|
|
import kotlinx.serialization.internal.ArrayListSerializer
|
|
|
|
import kotlinx.serialization.json.jsonArray
|
|
|
|
|
|
|
|
val membersCountInMediaGroup: IntRange = 2 .. 10
|
|
|
|
|
|
|
|
fun SendMediaGroup(
|
|
|
|
chatId: ChatIdentifier,
|
|
|
|
media: List<MediaGroupMemberInputMedia>,
|
|
|
|
disableNotification: Boolean = false,
|
|
|
|
replyToMessageId: MessageIdentifier? = null
|
2020-01-15 05:17:53 +00:00
|
|
|
): Request<List<MediaGroupMessage>> {
|
2018-12-26 08:07:24 +00:00
|
|
|
if (media.size !in membersCountInMediaGroup) {
|
|
|
|
throw IllegalArgumentException("Count of members for media group must be in $membersCountInMediaGroup range")
|
|
|
|
}
|
|
|
|
|
|
|
|
val files: List<MultipartFile> = media.flatMap {
|
|
|
|
listOfNotNull(
|
|
|
|
it.file as? MultipartFile,
|
|
|
|
if (it is ThumbedInputMedia) {
|
|
|
|
it.thumb as? MultipartFile
|
|
|
|
} else {
|
|
|
|
null
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
val data = SendMediaGroupData(
|
|
|
|
chatId,
|
|
|
|
media,
|
|
|
|
disableNotification,
|
|
|
|
replyToMessageId
|
|
|
|
)
|
|
|
|
|
|
|
|
return if (files.isEmpty()) {
|
|
|
|
data
|
|
|
|
} else {
|
|
|
|
MultipartRequestImpl(
|
|
|
|
data,
|
|
|
|
SendMediaGroupFiles(files)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-01-15 05:17:53 +00:00
|
|
|
private val messagesListSerializer: ArrayListSerializer<MediaGroupMessage>
|
|
|
|
= ArrayListSerializer(TelegramBotAPIMessageDeserializeOnlySerializerClass())
|
2018-12-26 08:07:24 +00:00
|
|
|
|
|
|
|
@Serializable
|
|
|
|
data class SendMediaGroupData internal constructor(
|
|
|
|
@SerialName(chatIdField)
|
|
|
|
override val chatId: ChatIdentifier,
|
|
|
|
val media: List<MediaGroupMemberInputMedia> = emptyList(),
|
|
|
|
@SerialName(disableNotificationField)
|
|
|
|
override val disableNotification: Boolean = false,
|
|
|
|
@SerialName(replyToMessageIdField)
|
|
|
|
override val replyToMessageId: MessageIdentifier? = null
|
2020-01-15 05:17:53 +00:00
|
|
|
) : DataRequest<List<MediaGroupMessage>>, SendMessageRequest<List<MediaGroupMessage>> {
|
2018-12-26 08:07:24 +00:00
|
|
|
@SerialName(mediaField)
|
|
|
|
private val convertedMedia: String
|
|
|
|
get() = jsonArray {
|
|
|
|
media.forEach {
|
2019-02-23 10:34:55 +00:00
|
|
|
+it.toJsonWithoutNulls(MediaGroupMemberInputMediaSerializer)
|
2018-12-26 08:07:24 +00:00
|
|
|
}
|
|
|
|
}.toString()
|
|
|
|
|
|
|
|
|
|
|
|
override fun method(): String = "sendMediaGroup"
|
2019-12-02 08:35:37 +00:00
|
|
|
override val requestSerializer: SerializationStrategy<*>
|
|
|
|
get() = serializer()
|
2020-01-15 05:17:53 +00:00
|
|
|
override val resultDeserializer: DeserializationStrategy<List<MediaGroupMessage>>
|
2019-12-02 08:35:37 +00:00
|
|
|
get() = messagesListSerializer
|
2018-12-26 08:07:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
data class SendMediaGroupFiles internal constructor(
|
|
|
|
val files: List<MultipartFile>
|
|
|
|
) : Files by (files.map { it.fileId to it }.toMap())
|
2020-02-06 18:56:32 +00:00
|
|
|
|
2020-02-15 09:33:04 +00:00
|
|
|
@Deprecated("Deprecated due to extracting into separated library")
|
2020-02-06 18:56:32 +00:00
|
|
|
suspend fun RequestsExecutor.sendMediaGroup(
|
|
|
|
chatId: ChatIdentifier,
|
|
|
|
media: List<MediaGroupMemberInputMedia>,
|
|
|
|
disableNotification: Boolean = false,
|
|
|
|
replyToMessageId: MessageIdentifier? = null
|
|
|
|
) = execute(
|
|
|
|
SendMediaGroup(
|
|
|
|
chatId, media, disableNotification, replyToMessageId
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
2020-02-15 09:33:04 +00:00
|
|
|
@Deprecated("Deprecated due to extracting into separated library")
|
2020-02-06 18:56:32 +00:00
|
|
|
suspend fun RequestsExecutor.sendMediaGroup(
|
|
|
|
chat: Chat,
|
|
|
|
media: List<MediaGroupMemberInputMedia>,
|
|
|
|
disableNotification: Boolean = false,
|
|
|
|
replyToMessageId: MessageIdentifier? = null
|
|
|
|
) = sendMediaGroup(
|
|
|
|
chat.id, media, disableNotification, replyToMessageId
|
|
|
|
)
|