diff options
| author | levlam <levlam@telegram.org> | 2026-06-26 17:38:33 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2026-06-26 17:38:33 +0300 |
| commit | c8105a16d1eea8a3209e13fe468617da5c999742 (patch) | |
| tree | 96fb361544abf7aa806822b01b21eae0ebea6a10 /td | |
| parent | a97a6c640950a526d907bd507d614664e20e2320 (diff) | |
Add td_api::translateMessageRichMessage.
Diffstat (limited to 'td')
| -rw-r--r-- | td/generate/scheme/td_api.tl | 7 | ||||
| -rw-r--r-- | td/telegram/MessagesManager.cpp | 26 | ||||
| -rw-r--r-- | td/telegram/MessagesManager.h | 3 | ||||
| -rw-r--r-- | td/telegram/Requests.cpp | 9 | ||||
| -rw-r--r-- | td/telegram/Requests.h | 2 | ||||
| -rw-r--r-- | td/telegram/cli.cpp | 7 |
6 files changed, 54 insertions, 0 deletions
diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 347627798..2323347a0 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -11920,6 +11920,13 @@ translateRichMessage message:inputRichMessage to_language_code:string tone:strin //@tone Tone of the translation; see translateText.tone for the list of supported values translateMessageText chat_id:int53 message_id:int53 to_language_code:string tone:string = FormattedText; +//@description Extracts rich message of the given message and translates it to the given language +//@chat_id Identifier of the chat to which the message belongs +//@message_id Identifier of the message +//@to_language_code Language code of the language to which the message is translated. See translateText.to_language_code for the list of supported values +//@tone Tone of the translation; see translateText.tone for the list of supported values +translateMessageRichMessage chat_id:int53 message_id:int53 to_language_code:string tone:string = RichMessage; + //@description Summarizes content of the message with non-empty summary_language_code //@chat_id Identifier of the chat to which the message belongs //@message_id Identifier of the message diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index a67e26124..0216008a6 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -14807,6 +14807,32 @@ void MessagesManager::translate_message_text(MessageFullId message_full_id, cons tone, std::move(promise)); } +void MessagesManager::translate_message_rich_message(MessageFullId message_full_id, const string &to_language_code, + const string &tone, + Promise<td_api::object_ptr<td_api::richMessage>> &&promise) { + auto m = get_message_force(message_full_id, "translate_message_rich_message"); + if (m == nullptr) { + return promise.set_error(400, "Message not found"); + } + + auto message = get_message_content_rich_message(m->content.get()); + if (message == nullptr) { + return promise.set_value(td_api::make_object<td_api::richMessage>()); + } + + auto dialog_id = message_full_id.get_dialog_id(); + TranslationManager::InputRichMessage input_rich_message; + input_rich_message.message_ = message->clone(td_, dialog_id, MessageContentDupType::ServerCopy); + input_rich_message.skip_bot_commands_ = need_skip_bot_commands(message_full_id.get_dialog_id(), m); + auto has_autotranslation = dialog_id.get_type() == DialogType::Channel && + td_->dialog_manager_->have_input_peer(dialog_id, false, AccessRights::Read) && + m->message_id.is_server() && + td_->chat_manager_->get_channel_autotranslation(dialog_id.get_channel_id()); + td_->translation_manager_->translate_rich_message(std::move(input_rich_message), + has_autotranslation ? message_full_id : MessageFullId(), + to_language_code, tone, std::move(promise)); +} + void MessagesManager::reload_dialog_notification_settings(DialogId dialog_id, Promise<Unit> &&promise, const char *source) { LOG(INFO) << "Reload notification settings for " << dialog_id << " from " << source; diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index c5119500d..12275cbcf 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -632,6 +632,9 @@ class MessagesManager final : public Actor { void translate_message_text(MessageFullId message_full_id, const string &to_language_code, const string &tone, Promise<td_api::object_ptr<td_api::formattedText>> &&promise); + void translate_message_rich_message(MessageFullId message_full_id, const string &to_language_code, const string &tone, + Promise<td_api::object_ptr<td_api::richMessage>> &&promise); + bool is_message_edited_recently(MessageFullId message_full_id, int32 seconds); struct ReportDialogFromActionBar { diff --git a/td/telegram/Requests.cpp b/td/telegram/Requests.cpp index 6e30c80d1..b418ca029 100644 --- a/td/telegram/Requests.cpp +++ b/td/telegram/Requests.cpp @@ -2863,6 +2863,15 @@ void Requests::on_request(uint64 id, td_api::translateMessageText &request) { request.to_language_code_, request.tone_, std::move(promise)); } +void Requests::on_request(uint64 id, td_api::translateMessageRichMessage &request) { + CHECK_IS_USER(); + CLEAN_INPUT_STRING(request.to_language_code_); + CLEAN_INPUT_STRING(request.tone_); + CREATE_REQUEST_PROMISE(); + td_->messages_manager_->translate_message_rich_message({DialogId(request.chat_id_), MessageId(request.message_id_)}, + request.to_language_code_, request.tone_, std::move(promise)); +} + void Requests::on_request(uint64 id, td_api::summarizeMessage &request) { CHECK_IS_USER(); CLEAN_INPUT_STRING(request.translate_to_language_code_); diff --git a/td/telegram/Requests.h b/td/telegram/Requests.h index 42f220696..3b1c0ba7c 100644 --- a/td/telegram/Requests.h +++ b/td/telegram/Requests.h @@ -342,6 +342,8 @@ class Requests { void on_request(uint64 id, td_api::translateMessageText &request); + void on_request(uint64 id, td_api::translateMessageRichMessage &request); + void on_request(uint64 id, td_api::summarizeMessage &request); void on_request(uint64 id, td_api::composeTextWithAi &request); diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index 020a1f633..80768677d 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -5208,6 +5208,13 @@ class CliClient final : public Actor { get_args(args, chat_id, message_id, to_language_code); send_request( td_api::make_object<td_api::translateMessageText>(chat_id, message_id, to_language_code, as_tone(op))); + } else if (op == "tmrm" || op == "tmrmf" || op == "tmrmc" || op == "tmrmn") { + ChatId chat_id; + MessageId message_id; + string to_language_code; + get_args(args, chat_id, message_id, to_language_code); + send_request( + td_api::make_object<td_api::translateMessageRichMessage>(chat_id, message_id, to_language_code, as_tone(op))); } else if (op == "sum") { ChatId chat_id; MessageId message_id; |
