Add reply_to_message_id support in message copies.
GitOrigin-RevId: 1304da421b63721ba15a93e35b06cd6514190b71
This commit is contained in:
parent
85be738d9d
commit
c60bdaeeba
|
@ -18,6 +18,7 @@ struct MessageCopyOptions {
|
||||||
bool send_copy = false;
|
bool send_copy = false;
|
||||||
bool replace_caption = false;
|
bool replace_caption = false;
|
||||||
FormattedText new_caption;
|
FormattedText new_caption;
|
||||||
|
MessageId reply_to_message_id;
|
||||||
unique_ptr<ReplyMarkup> reply_markup;
|
unique_ptr<ReplyMarkup> reply_markup;
|
||||||
|
|
||||||
MessageCopyOptions() = default;
|
MessageCopyOptions() = default;
|
||||||
|
@ -28,11 +29,15 @@ struct MessageCopyOptions {
|
||||||
inline StringBuilder &operator<<(StringBuilder &string_builder, MessageCopyOptions copy_options) {
|
inline StringBuilder &operator<<(StringBuilder &string_builder, MessageCopyOptions copy_options) {
|
||||||
if (copy_options.send_copy) {
|
if (copy_options.send_copy) {
|
||||||
string_builder << "CopyOptions[replace_caption = " << copy_options.replace_caption;
|
string_builder << "CopyOptions[replace_caption = " << copy_options.replace_caption;
|
||||||
}
|
if (copy_options.replace_caption) {
|
||||||
if (copy_options.replace_caption) {
|
string_builder << ", new_caption = " << copy_options.new_caption;
|
||||||
string_builder << ", new_caption = " << copy_options.new_caption;
|
}
|
||||||
}
|
if (copy_options.reply_to_message_id.is_valid()) {
|
||||||
if (copy_options.send_copy) {
|
string_builder << ", reply to = " << copy_options.reply_to_message_id;
|
||||||
|
}
|
||||||
|
if (copy_options.reply_markup != nullptr) {
|
||||||
|
string_builder << ", with reply markup";
|
||||||
|
}
|
||||||
string_builder << "]";
|
string_builder << "]";
|
||||||
}
|
}
|
||||||
return string_builder;
|
return string_builder;
|
||||||
|
|
|
@ -21046,20 +21046,21 @@ Result<MessageId> MessagesManager::send_message(DialogId dialog_id, MessageId re
|
||||||
return Status::Error(5, "Can't send message without content");
|
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;
|
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) {
|
if (input_message_content->get_id() == td_api::inputMessageForwarded::ID) {
|
||||||
auto input_message = td_api::move_object_as<td_api::inputMessageForwarded>(input_message_content);
|
auto input_message = td_api::move_object_as<td_api::inputMessageForwarded>(input_message_content);
|
||||||
TRY_RESULT(copy_options, process_message_copy_options(dialog_id, std::move(input_message->copy_options_)));
|
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)));
|
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_),
|
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));
|
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_STATUS(can_send_message(dialog_id));
|
||||||
TRY_RESULT(message_reply_markup, get_dialog_reply_markup(dialog_id, std::move(reply_markup)));
|
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)));
|
TRY_RESULT(message_content, process_input_message_content(dialog_id, std::move(input_message_content)));
|
||||||
|
@ -23520,6 +23521,7 @@ Result<vector<MessageId>> MessagesManager::forward_messages(DialogId to_dialog_i
|
||||||
|
|
||||||
struct CopiedMessage {
|
struct CopiedMessage {
|
||||||
unique_ptr<MessageContent> content;
|
unique_ptr<MessageContent> content;
|
||||||
|
MessageId reply_to_message_id;
|
||||||
unique_ptr<ReplyMarkup> reply_markup;
|
unique_ptr<ReplyMarkup> reply_markup;
|
||||||
int64 media_album_id;
|
int64 media_album_id;
|
||||||
bool disable_web_page_preview;
|
bool disable_web_page_preview;
|
||||||
|
@ -23549,6 +23551,7 @@ Result<vector<MessageId>> MessagesManager::forward_messages(DialogId to_dialog_i
|
||||||
|
|
||||||
bool need_copy = !message_id.is_server() || to_secret || copy_options[i].send_copy;
|
bool need_copy = !message_id.is_server() || to_secret || copy_options[i].send_copy;
|
||||||
auto type = need_copy ? MessageContentDupType::Copy : MessageContentDupType::Forward;
|
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);
|
auto reply_markup = std::move(copy_options[i].reply_markup);
|
||||||
unique_ptr<MessageContent> content =
|
unique_ptr<MessageContent> content =
|
||||||
dup_message_content(td_, to_dialog_id, forwarded_message->content.get(), type, std::move(copy_options[i]));
|
dup_message_content(td_, to_dialog_id, forwarded_message->content.get(), type, std::move(copy_options[i]));
|
||||||
|
@ -23583,7 +23586,8 @@ Result<vector<MessageId>> MessagesManager::forward_messages(DialogId to_dialog_i
|
||||||
}
|
}
|
||||||
|
|
||||||
if (need_copy) {
|
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});
|
get_message_disable_web_page_preview(forwarded_message), i});
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -23705,8 +23709,8 @@ Result<vector<MessageId>> MessagesManager::forward_messages(DialogId to_dialog_i
|
||||||
|
|
||||||
if (!copied_messages.empty()) {
|
if (!copied_messages.empty()) {
|
||||||
for (auto &copied_message : copied_messages) {
|
for (auto &copied_message : copied_messages) {
|
||||||
Message *m = get_message_to_send(to_dialog, MessageId(), message_send_options, std::move(copied_message.content),
|
Message *m = get_message_to_send(to_dialog, copied_message.reply_to_message_id, message_send_options,
|
||||||
&need_update_dialog_pos, nullptr, true);
|
std::move(copied_message.content), &need_update_dialog_pos, nullptr, true);
|
||||||
m->disable_web_page_preview = copied_message.disable_web_page_preview;
|
m->disable_web_page_preview = copied_message.disable_web_page_preview;
|
||||||
if (copied_message.media_album_id != 0) {
|
if (copied_message.media_album_id != 0) {
|
||||||
m->media_album_id = new_media_album_ids[copied_message.media_album_id].first;
|
m->media_album_id = new_media_album_ids[copied_message.media_album_id].first;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user