package com.github.insanusmokrassar.TelegramBotAPI.requests.send.media import com.github.insanusmokrassar.TelegramBotAPI.types.* import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.ParseMode import com.github.insanusmokrassar.TelegramBotAPI.types.ParseMode.parseModeField import com.github.insanusmokrassar.TelegramBotAPI.types.buttons.KeyboardMarkup import com.github.insanusmokrassar.TelegramBotAPI.types.message.RawMessage import com.github.insanusmokrassar.TelegramBotAPI.requests.abstracts.* import com.github.insanusmokrassar.TelegramBotAPI.requests.send.abstracts.* import com.github.insanusmokrassar.TelegramBotAPI.requests.send.media.base.* import com.github.insanusmokrassar.TelegramBotAPI.utils.mapOfNotNull import kotlinx.serialization.* fun SendAnimation( chatId: ChatIdentifier, animation: InputFile, thumb: InputFile?, caption: String? = null, parseMode: ParseMode? = null, duration: Long? = null, width: Int? = null, height: Int? = null, disableNotification: Boolean = false, replyToMessageId: MessageIdentifier? = null, replyMarkup: KeyboardMarkup? = null ): Request { val animationAsFileId = (animation as? FileId) ?.fileId val animationAsFile = animation as? MultipartFile val thumbAsFileId = (thumb as? FileId) ?.fileId val thumbAsFile = thumb as? MultipartFile val data = SendAnimationData( chatId, animationAsFileId, thumbAsFileId, caption, parseMode, duration, width, height, disableNotification, replyToMessageId, replyMarkup ) return if (animationAsFile == null && thumbAsFile == null) { data } else { MultipartRequestImpl( data, SendAnimationFiles(animationAsFile, thumbAsFile) ) } } @Serializable data class SendAnimationData internal constructor( @SerialName(chatIdField) override val chatId: ChatIdentifier, @SerialName(animationField) @Optional val animation: String? = null, @SerialName(thumbField) @Optional override val thumb: String? = null, @SerialName(captionField) @Optional override val text: String? = null, @SerialName(parseModeField) @Optional override val parseMode: ParseMode? = null, @SerialName(durationField) @Optional override val duration: Long? = null, @SerialName(widthField) @Optional override val width: Int? = null, @SerialName(heightField) @Optional override val height: Int? = null, @SerialName(disableNotificationField) @Optional override val disableNotification: Boolean = false, @SerialName(replyToMessageIdField) @Optional override val replyToMessageId: MessageIdentifier? = null, @SerialName(replyMarkupField) @Optional override val replyMarkup: KeyboardMarkup? = null ) : Data, SendMessageRequest, ReplyingMarkupSendMessageRequest, TextableSendMessageRequest, ThumbedSendMessageRequest, DuratedSendMessageRequest, SizedSendMessageRequest { override fun method(): String = "sendAnimation" override fun resultSerializer(): KSerializer = RawMessage.serializer() } data class SendAnimationFiles internal constructor( val animation: MultipartFile? = null, val thumb: MultipartFile? = null ) : Files by mapOfNotNull( animationField to animation, thumbField to thumb )