From ba5f76e8cd4d6b72553b1e7ccf07e23154b8ce7f Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 1 Mar 2025 14:04:08 +0600 Subject: [PATCH] fix of EditChatMessageMedia --- CHANGELOG.md | 3 +++ tgbotapi.core/api/tgbotapi.core.api | 6 +++++- .../bot/ktor/KtorRequestsExecutorFactories.kt | 2 +- .../ktor/base/MultipartRequestCallFactory.kt | 15 +++++++++++++ .../edit/media/EditChatMessageMedia.kt | 21 +++++++++++++------ 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a48f5605c..868ada3c98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## 24.0.1 +* `Core`: + * Now you may upload photos with `EditChatMessageMedia` + ## 24.0.0 **THIS UPDATE CONTAINS BREAKING CHANGES IN `subcontextUpdatesFilter` WORK. TAKE CARE IN MIGRATION** diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index 4e68ad69e8..b50774fcfb 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -432,6 +432,7 @@ public final class dev/inmo/tgbotapi/bot/ktor/base/MultipartRequestCallFactory : public fun ()V public fun (Ldev/inmo/kslog/common/KSLog;)V public synthetic fun (Ldev/inmo/kslog/common/KSLog;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun makeCall (Lio/ktor/client/HttpClient;Ldev/inmo/tgbotapi/utils/TelegramAPIUrlsKeeper;Ldev/inmo/tgbotapi/requests/abstracts/Request;Lkotlinx/serialization/json/Json;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } public final class dev/inmo/tgbotapi/bot/ktor/base/MultipleClientKtorRequestsExecutor : dev/inmo/tgbotapi/bot/BaseRequestsExecutor { @@ -3895,7 +3896,7 @@ public final class dev/inmo/tgbotapi/requests/edit/location/live/StopInlineMessa public final fun serializer ()Lkotlinx/serialization/KSerializer; } -public final class dev/inmo/tgbotapi/requests/edit/media/EditChatMessageMedia : dev/inmo/tgbotapi/requests/edit/abstracts/EditChatMessage, dev/inmo/tgbotapi/requests/edit/abstracts/EditMediaMessage, dev/inmo/tgbotapi/requests/edit/abstracts/EditReplyMessage { +public final class dev/inmo/tgbotapi/requests/edit/media/EditChatMessageMedia : dev/inmo/tgbotapi/requests/abstracts/MultipartRequest$Common, dev/inmo/tgbotapi/requests/edit/abstracts/EditChatMessage, dev/inmo/tgbotapi/requests/edit/abstracts/EditMediaMessage, dev/inmo/tgbotapi/requests/edit/abstracts/EditReplyMessage { public static final field Companion Ldev/inmo/tgbotapi/requests/edit/media/EditChatMessageMedia$Companion; public synthetic fun (Ldev/inmo/tgbotapi/types/ChatIdentifier;JLdev/inmo/tgbotapi/types/media/TelegramFreeMedia;Ljava/lang/String;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardMarkup;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun (Ldev/inmo/tgbotapi/types/ChatIdentifier;JLdev/inmo/tgbotapi/types/media/TelegramFreeMedia;Ljava/lang/String;Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardMarkup;Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -3909,8 +3910,11 @@ public final class dev/inmo/tgbotapi/requests/edit/media/EditChatMessageMedia : public fun equals (Ljava/lang/Object;)Z public fun getBusinessConnectionId-nXr5wdE ()Ljava/lang/String; public fun getChatId ()Ldev/inmo/tgbotapi/types/ChatIdentifier; + public fun getData ()Ldev/inmo/tgbotapi/requests/abstracts/SimpleRequest; public fun getMedia ()Ldev/inmo/tgbotapi/types/media/TelegramFreeMedia; + public fun getMediaMap ()Ljava/util/Map; public fun getMessageId-APLFQys ()J + public fun getParamsJson ()Lkotlinx/serialization/json/JsonObject; public fun getReplyMarkup ()Ldev/inmo/tgbotapi/types/buttons/InlineKeyboardMarkup; public synthetic fun getReplyMarkup ()Ldev/inmo/tgbotapi/types/buttons/KeyboardMarkup; public fun getRequestSerializer ()Lkotlinx/serialization/SerializationStrategy; diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutorFactories.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutorFactories.kt index c3623e8e76..d11fe7405d 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutorFactories.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutorFactories.kt @@ -12,8 +12,8 @@ import kotlinx.serialization.json.Json @RiskFeature fun createTelegramBotDefaultKtorCallRequestsFactories(logger: KSLog? = null) = listOf( - SimpleRequestCallFactory(logger), MultipartRequestCallFactory(logger), + SimpleRequestCallFactory(logger), DownloadFileRequestCallFactory, DownloadFileChannelRequestCallFactory ) diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/MultipartRequestCallFactory.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/MultipartRequestCallFactory.kt index 0f82a3e871..f00290f19d 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/MultipartRequestCallFactory.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/base/MultipartRequestCallFactory.kt @@ -9,8 +9,23 @@ import io.ktor.client.HttpClient import io.ktor.client.request.forms.* import io.ktor.http.Headers import io.ktor.http.HttpHeaders +import kotlinx.serialization.json.Json class MultipartRequestCallFactory(logger: KSLog? = null) : AbstractRequestCallFactory(logger ?: DefaultKTgBotAPIKSLog) { + private val localSimpleRequestCallFactory = SimpleRequestCallFactory(logger) + override suspend fun makeCall( + client: HttpClient, + urlsKeeper: TelegramAPIUrlsKeeper, + request: Request, + jsonFormatter: Json + ): T? { + return when (request) { + !is MultipartRequest -> null + is MultipartRequest.Common -> localSimpleRequestCallFactory.makeCall(client, urlsKeeper, request.data, jsonFormatter) + else -> super.makeCall(client, urlsKeeper, request, jsonFormatter) + } + } + override fun prepareCallBody( client: HttpClient, urlsKeeper: TelegramAPIUrlsKeeper, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/media/EditChatMessageMedia.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/media/EditChatMessageMedia.kt index a5afd389a5..632fd01d04 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/media/EditChatMessageMedia.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/requests/edit/media/EditChatMessageMedia.kt @@ -1,6 +1,8 @@ package dev.inmo.tgbotapi.requests.edit.media import dev.inmo.tgbotapi.requests.abstracts.MultipartFile +import dev.inmo.tgbotapi.requests.abstracts.MultipartRequest +import dev.inmo.tgbotapi.requests.abstracts.SimpleRequest import dev.inmo.tgbotapi.requests.edit.abstracts.* import dev.inmo.tgbotapi.types.* import dev.inmo.tgbotapi.types.business_connection.BusinessConnectionId @@ -27,14 +29,21 @@ data class EditChatMessageMedia( override val businessConnectionId: BusinessConnectionId? = chatId.businessConnectionId, @SerialName(replyMarkupField) override val replyMarkup: InlineKeyboardMarkup? = null -) : EditChatMessage, EditReplyMessage, EditMediaMessage { - - init { - if (media.file is MultipartFile) { - throw IllegalArgumentException("For editing of media messages you MUST use file id (according to documentation)") - } +) : EditChatMessage, EditReplyMessage, EditMediaMessage, MultipartRequest.Common> { + override val data: SimpleRequest> + get() = this + override val mediaMap: Map by lazy { + (media.file as? MultipartFile) ?.let { + mapOf(it.fileId to it) + } ?: emptyMap() } +// init { +// if (media.file is MultipartFile) { +// throw IllegalArgumentException("For editing of media messages you MUST use file id (according to documentation)") +// } +// } + override fun method(): String = editMessageMediaMethod override val resultDeserializer: DeserializationStrategy> get() = MediaContentMessageResultDeserializer