diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index f133e0431..99343ce94 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -3513,7 +3513,7 @@ class SendQuickReplyMessagesQuery final : public Td::ResultHandler { void send(DialogId dialog_id, QuickReplyShortcutId shortcut_id, const vector &message_ids, vector &&random_ids) { - random_ids_ = std::move(random_ids); + random_ids_ = random_ids; dialog_id_ = dialog_id; auto input_peer = td_->dialog_manager_->get_input_peer(dialog_id_, AccessRights::Write); @@ -3522,7 +3522,9 @@ class SendQuickReplyMessagesQuery final : public Td::ResultHandler { } auto query = G()->net_query_creator().create( - telegram_api::messages_sendQuickReplyMessages(std::move(input_peer), shortcut_id.get(), Auto(), Auto()), + telegram_api::messages_sendQuickReplyMessages(std::move(input_peer), shortcut_id.get(), + MessageId::get_server_message_ids(message_ids), + std::move(random_ids)), {{dialog_id, MessageContentType::Text}, {dialog_id, MessageContentType::Photo}}); if (td_->option_manager_->get_option_boolean("use_quick_ack")) { query->quick_ack_promise_ = PromiseCreator::lambda([random_ids = random_ids_](Result result) { @@ -3546,10 +3548,17 @@ class SendQuickReplyMessagesQuery final : public Td::ResultHandler { LOG(INFO) << "Receive result for SendQuickReplyMessagesQuery for " << format::as_array(random_ids_) << ": " << to_string(ptr); auto sent_messages = UpdatesManager::get_new_messages(ptr.get()); + auto sent_random_ids = UpdatesManager::get_sent_messages_random_ids(ptr.get()); bool is_result_wrong = false; - if (random_ids_.size() != sent_messages.size()) { + if (random_ids_.size() != sent_messages.size() || random_ids_.size() != sent_random_ids.size()) { is_result_wrong = true; } + for (auto &random_id : random_ids_) { + auto it = sent_random_ids.find(random_id); + if (it == sent_random_ids.end()) { + is_result_wrong = true; + } + } for (auto &sent_message : sent_messages) { if (DialogId::get_message_dialog_id(sent_message.first) != dialog_id_) { is_result_wrong = true; @@ -3562,12 +3571,6 @@ class SendQuickReplyMessagesQuery final : public Td::ResultHandler { for (auto &random_id : random_ids_) { td_->messages_manager_->on_send_message_fail(random_id, Status::Error(500, "Receive invalid response")); } - } else { - // generate fake updates - for (size_t i = 0; i < random_ids_.size(); i++) { - td_->messages_manager_->on_update_message_id( - random_ids_[i], MessageId::get_message_id(sent_messages[i].first, false), "SendQuickReplyMessagesQuery"); - } } td_->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } @@ -26792,7 +26795,7 @@ Result> MessagesManager::send_quick_reply_s send_update_new_message(d, m); } sent_messages.push_back(m); - sent_message_ids.push_back(m->message_id); + sent_message_ids.push_back(content.original_message_id_); result.push_back(get_message_object(dialog_id, m, "send_quick_reply_shortcut_messages")); }