aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2026-06-26 17:38:33 +0300
committerlevlam <levlam@telegram.org>2026-06-26 17:38:33 +0300
commitc8105a16d1eea8a3209e13fe468617da5c999742 (patch)
tree96fb361544abf7aa806822b01b21eae0ebea6a10
parenta97a6c640950a526d907bd507d614664e20e2320 (diff)
Add td_api::translateMessageRichMessage.
-rw-r--r--td/generate/scheme/td_api.tl7
-rw-r--r--td/telegram/MessagesManager.cpp26
-rw-r--r--td/telegram/MessagesManager.h3
-rw-r--r--td/telegram/Requests.cpp9
-rw-r--r--td/telegram/Requests.h2
-rw-r--r--td/telegram/cli.cpp7
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;