From 49da0faf458d1b2845eb3c866f43c6872096a396 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sun, 3 Apr 2022 19:21:38 +0600 Subject: [PATCH] replies with texted content --- CHANGELOG.md | 1 + .../tgbotapi/extensions/api/send/Replies.kt | 152 +++++++++++++++++- .../inmo/tgbotapi/types/files/DocumentFile.kt | 21 ++- .../content/media/AudioMediaGroupContent.kt | 4 + .../media/DocumentMediaGroupContent.kt | 4 + 5 files changed, 173 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 796f4ec536..a4df7efbad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * `Core`: * New type `TextedMediaContent` which will unite `TextedInput` and `MediaContent` * `MediaGroupContent` and all subsequent inheritors have been replaced to the package `dev.inmo.tgbotapi.types.message.content.media` + * Add `reply` functions with the texted content with including of text ## 0.38.11 diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/Replies.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/Replies.kt index 0ee552946d..7f1e6278a4 100644 --- a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/Replies.kt +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/send/Replies.kt @@ -10,6 +10,7 @@ import dev.inmo.tgbotapi.requests.abstracts.InputFile import dev.inmo.tgbotapi.requests.send.media.rawSendingMediaGroupsWarning import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.InputMedia.* +import dev.inmo.tgbotapi.types.MessageEntity.textsources.TextSource import dev.inmo.tgbotapi.types.MessageEntity.textsources.TextSourcesList import dev.inmo.tgbotapi.types.ParseMode.ParseMode import dev.inmo.tgbotapi.types.buttons.InlineKeyboardMarkup @@ -24,7 +25,7 @@ import dev.inmo.tgbotapi.types.location.* import dev.inmo.tgbotapi.types.message.abstracts.Message import dev.inmo.tgbotapi.types.message.content.* import dev.inmo.tgbotapi.types.message.content.abstracts.MessageContent -import dev.inmo.tgbotapi.types.passport.encrypted.PassportFile +import dev.inmo.tgbotapi.types.message.content.media.* import dev.inmo.tgbotapi.types.payments.LabeledPrice import dev.inmo.tgbotapi.types.payments.abstracts.Currency import dev.inmo.tgbotapi.types.polls.* @@ -1061,6 +1062,14 @@ suspend fun TelegramBot.reply( allowSendingWithoutReply = allowSendingWithoutReply, replyMarkup = replyMarkup ) + is PhotoSize -> reply( + to = to, + photoSize = mediaFile, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) else -> reply( to = to, document = mediaFile.asDocumentFile(), @@ -1071,3 +1080,144 @@ suspend fun TelegramBot.reply( ) } } + +suspend fun TelegramBot.reply( + to: Message, + content: TextedMediaContent, + text: String?, + parseMode: ParseMode? = null, + disableNotification: Boolean = false, + protectContent: Boolean = false, + allowSendingWithoutReply: Boolean? = null, + replyMarkup: KeyboardMarkup? = null +) { + when (content) { + is VoiceContent -> reply( + to = to, + voice = content.media, + text = text, + parseMode = parseMode, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + is AudioMediaGroupContent -> reply( + to = to, + audio = content.media, + text = text, + parseMode = parseMode, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + is PhotoContent -> reply( + to = to, + photoSize = content.media, + text = text, + parseMode = parseMode, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + is VideoContent -> reply( + to = to, + video = content.media, + text = text, + parseMode = parseMode, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + is AnimationContent -> reply( + to = to, + animation = content.media, + text = text, + parseMode = parseMode, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + else -> reply( + to = to, + document = content.media.asDocumentFile(), + text = text, + parseMode = parseMode, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + } +} + +suspend fun TelegramBot.reply( + to: Message, + content: TextedMediaContent, + entities: List, + disableNotification: Boolean = false, + protectContent: Boolean = false, + allowSendingWithoutReply: Boolean? = null, + replyMarkup: KeyboardMarkup? = null +) { + when (content) { + is VoiceContent -> reply( + to = to, + voice = content.media, + entities = entities, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + is AudioMediaGroupContent -> reply( + to = to, + audio = content.media, + entities = entities, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + is PhotoContent -> reply( + to = to, + photoSize = content.media, + entities = entities, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + is VideoContent -> reply( + to = to, + video = content.media, + entities = entities, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + is AnimationContent -> reply( + to = to, + animation = content.media, + entities = entities, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + else -> reply( + to = to, + document = content.media.asDocumentFile(), + entities = entities, + disableNotification = disableNotification, + protectContent = protectContent, + allowSendingWithoutReply = allowSendingWithoutReply, + replyMarkup = replyMarkup + ) + } +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/DocumentFile.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/DocumentFile.kt index 103fbb78d5..d869f4cb69 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/DocumentFile.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/files/DocumentFile.kt @@ -4,6 +4,7 @@ import dev.inmo.tgbotapi.requests.abstracts.FileId import dev.inmo.tgbotapi.types.FileUniqueId import dev.inmo.tgbotapi.types.fileUniqueIdField import dev.inmo.tgbotapi.types.files.abstracts.* +import dev.inmo.tgbotapi.types.message.content.media.DocumentContent import dev.inmo.tgbotapi.utils.MimeType import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -24,11 +25,15 @@ data class DocumentFile( ) : TelegramMediaFile, MimedMediaFile, ThumbedMediaFile, CustomNamedMediaFile @Suppress("NOTHING_TO_INLINE") -inline fun TelegramMediaFile.asDocumentFile() = DocumentFile( - fileId, - fileUniqueId, - fileSize, - (this as? ThumbedMediaFile) ?.thumb, - (this as? MimedMediaFile) ?.mimeType, - (this as? CustomNamedMediaFile) ?.fileName -) +inline fun TelegramMediaFile.asDocumentFile() = if (this is DocumentFile) { + this +} else { + DocumentFile( + fileId, + fileUniqueId, + fileSize, + (this as? ThumbedMediaFile) ?.thumb, + (this as? MimedMediaFile) ?.mimeType, + (this as? CustomNamedMediaFile) ?.fileName + ) +} diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/media/AudioMediaGroupContent.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/media/AudioMediaGroupContent.kt index ad3ecd298e..15af16d802 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/media/AudioMediaGroupContent.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/media/AudioMediaGroupContent.kt @@ -1,7 +1,11 @@ package dev.inmo.tgbotapi.types.message.content.media import dev.inmo.tgbotapi.types.InputMedia.AudioMediaGroupMemberInputMedia +import dev.inmo.tgbotapi.types.files.AudioFile +import dev.inmo.tgbotapi.types.files.abstracts.TelegramMediaFile interface AudioMediaGroupContent : MediaGroupContent { + override val media: AudioFile + override fun toMediaGroupMemberInputMedia(): AudioMediaGroupMemberInputMedia } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/media/DocumentMediaGroupContent.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/media/DocumentMediaGroupContent.kt index 52c50c8ec0..ffd083806a 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/media/DocumentMediaGroupContent.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/types/message/content/media/DocumentMediaGroupContent.kt @@ -1,8 +1,12 @@ package dev.inmo.tgbotapi.types.message.content.media import dev.inmo.tgbotapi.types.InputMedia.* +import dev.inmo.tgbotapi.types.files.DocumentFile +import dev.inmo.tgbotapi.types.files.abstracts.TelegramMediaFile import dev.inmo.tgbotapi.types.message.content.media.MediaGroupContent interface DocumentMediaGroupContent : MediaGroupContent { + override val media: DocumentFile + override fun toMediaGroupMemberInputMedia(): DocumentMediaGroupMemberInputMedia }