From c60bdaeebaeefce32f1286cbaa42fd8f670cdad8 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 12 Sep 2020 22:24:04 +0300 Subject: [PATCH] Add reply_to_message_id support in message copies. GitOrigin-RevId: 1304da421b63721ba15a93e35b06cd6514190b71 --- td/telegram/MessageCopyOptions.h | 15 ++++++++++----- td/telegram/MessagesManager.cpp | 20 ++++++++++++-------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/td/telegram/MessageCopyOptions.h b/td/telegram/MessageCopyOptions.h index 9420c30b6..4f5126d97 100644 --- a/td/telegram/MessageCopyOptions.h +++ b/td/telegram/MessageCopyOptions.h @@ -18,6 +18,7 @@ struct MessageCopyOptions { bool send_copy = false; bool replace_caption = false; FormattedText new_caption; + MessageId reply_to_message_id; unique_ptr reply_markup; MessageCopyOptions() = default; @@ -28,11 +29,15 @@ struct MessageCopyOptions { inline StringBuilder &operator<<(StringBuilder &string_builder, MessageCopyOptions copy_options) { if (copy_options.send_copy) { string_builder << "CopyOptions[replace_caption = " << copy_options.replace_caption; - } - if (copy_options.replace_caption) { - string_builder << ", new_caption = " << copy_options.new_caption; - } - if (copy_options.send_copy) { + if (copy_options.replace_caption) { + string_builder << ", new_caption = " << copy_options.new_caption; + } + if (copy_options.reply_to_message_id.is_valid()) { + string_builder << ", reply to = " << copy_options.reply_to_message_id; + } + if (copy_options.reply_markup != nullptr) { + string_builder << ", with reply markup"; + } string_builder << "]"; } return string_builder; diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index b23955e94..361fdb401 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -21046,20 +21046,21 @@ Result MessagesManager::send_message(DialogId dialog_id, MessageId re return Status::Error(5, "Can't send message without content"); } + Dialog *d = get_dialog_force(dialog_id); + if (d == nullptr) { + return Status::Error(5, "Chat not found"); + } + LOG(INFO) << "Begin to send message to " << dialog_id << " in reply to " << reply_to_message_id; if (input_message_content->get_id() == td_api::inputMessageForwarded::ID) { auto input_message = td_api::move_object_as(input_message_content); TRY_RESULT(copy_options, process_message_copy_options(dialog_id, std::move(input_message->copy_options_))); + copy_options.reply_to_message_id = get_reply_to_message_id(d, reply_to_message_id); TRY_RESULT_ASSIGN(copy_options.reply_markup, get_dialog_reply_markup(dialog_id, std::move(reply_markup))); return forward_message(dialog_id, DialogId(input_message->from_chat_id_), MessageId(input_message->message_id_), std::move(options), input_message->in_game_share_, std::move(copy_options)); } - Dialog *d = get_dialog_force(dialog_id); - if (d == nullptr) { - return Status::Error(5, "Chat not found"); - } - TRY_STATUS(can_send_message(dialog_id)); TRY_RESULT(message_reply_markup, get_dialog_reply_markup(dialog_id, std::move(reply_markup))); TRY_RESULT(message_content, process_input_message_content(dialog_id, std::move(input_message_content))); @@ -23520,6 +23521,7 @@ Result> MessagesManager::forward_messages(DialogId to_dialog_i struct CopiedMessage { unique_ptr content; + MessageId reply_to_message_id; unique_ptr reply_markup; int64 media_album_id; bool disable_web_page_preview; @@ -23549,6 +23551,7 @@ Result> MessagesManager::forward_messages(DialogId to_dialog_i bool need_copy = !message_id.is_server() || to_secret || copy_options[i].send_copy; auto type = need_copy ? MessageContentDupType::Copy : MessageContentDupType::Forward; + auto reply_to_message_id = copy_options[i].reply_to_message_id; auto reply_markup = std::move(copy_options[i].reply_markup); unique_ptr content = dup_message_content(td_, to_dialog_id, forwarded_message->content.get(), type, std::move(copy_options[i])); @@ -23583,7 +23586,8 @@ Result> MessagesManager::forward_messages(DialogId to_dialog_i } if (need_copy) { - copied_messages.push_back({std::move(content), std::move(reply_markup), forwarded_message->media_album_id, + copied_messages.push_back({std::move(content), reply_to_message_id, std::move(reply_markup), + forwarded_message->media_album_id, get_message_disable_web_page_preview(forwarded_message), i}); continue; } @@ -23705,8 +23709,8 @@ Result> MessagesManager::forward_messages(DialogId to_dialog_i if (!copied_messages.empty()) { for (auto &copied_message : copied_messages) { - Message *m = get_message_to_send(to_dialog, MessageId(), message_send_options, std::move(copied_message.content), - &need_update_dialog_pos, nullptr, true); + Message *m = get_message_to_send(to_dialog, copied_message.reply_to_message_id, message_send_options, + std::move(copied_message.content), &need_update_dialog_pos, nullptr, true); m->disable_web_page_preview = copied_message.disable_web_page_preview; if (copied_message.media_album_id != 0) { m->media_album_id = new_media_album_ids[copied_message.media_album_id].first;