diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index adb779e..2587507 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -7806,9 +7806,9 @@ void Client::loop() { void Client::on_get_reply_message(int64 chat_id, object_ptr reply_to_message) { auto &queue = new_message_queues_[chat_id]; CHECK(!queue.queue_.empty()); - object_ptr &message = queue.queue_.front().message; - CHECK(chat_id == message->chat_id_); - int64 reply_to_message_id = get_same_chat_reply_to_message_id(message); + auto &message_info = queue.queue_.front().message_info_; + CHECK(chat_id == message_info->chat_id); + int64 reply_to_message_id = get_same_chat_reply_to_message_id(message_info.get()); CHECK(reply_to_message_id > 0); if (reply_to_message == nullptr) { LOG(INFO) << "Can't find message " << reply_to_message_id << " in chat " << chat_id @@ -16485,7 +16485,7 @@ void Client::add_new_message(object_ptr &&message, bool is_edit auto chat_id = message->chat_id_; CHECK(chat_id != 0); - new_message_queues_[chat_id].queue_.emplace(std::move(message), is_edited); + new_message_queues_[chat_id].queue_.emplace(create_message(std::move(message)), is_edited); process_new_message_queue(chat_id, 0); } @@ -17343,13 +17343,11 @@ void Client::process_new_message_queue(int64 chat_id, int state) { return; } while (!queue.queue_.empty()) { - auto &message_ref = queue.queue_.front().message; - CHECK(chat_id == message_ref->chat_id_); - int64 message_id = message_ref->id_; - - drop_internal_reply_to_message_in_another_chat(message_ref); + auto &message_info_ref = queue.queue_.front().message_info_; + CHECK(chat_id == message_info_ref->chat_id); + int64 message_id = message_info_ref->id; - int64 reply_to_message_id = get_same_chat_reply_to_message_id(message_ref); + int64 reply_to_message_id = get_same_chat_reply_to_message_id(message_info_ref.get()); if (state == 0) { if (reply_to_message_id > 0 && get_message(chat_id, reply_to_message_id, false) == nullptr) { queue.has_active_request_ = true; @@ -17359,7 +17357,7 @@ void Client::process_new_message_queue(int64 chat_id, int state) { state = 1; } if (state == 1) { - auto sticker_set_ids = get_message_sticker_set_ids(message_ref); + auto sticker_set_ids = get_message_sticker_set_ids(message_info_ref.get()); td::combine(sticker_set_ids, get_message_sticker_set_ids(get_message(chat_id, reply_to_message_id, true))); if (!sticker_set_ids.empty()) { queue.has_active_request_ = true; @@ -17372,11 +17370,10 @@ void Client::process_new_message_queue(int64 chat_id, int state) { } CHECK(state == 2); - auto message = std::move(message_ref); - auto is_edited = queue.queue_.front().is_edited; + const auto *message_info = add_message(std::move(message_info_ref), false); + auto is_edited = queue.queue_.front().is_edited_; queue.queue_.pop(); state = 0; - const auto *message_info = add_message(std::move(message)); if (need_skip_update_message(chat_id, message_info, is_edited)) { continue; } @@ -17519,7 +17516,11 @@ td::unique_ptr Client::delete_message(int64 chat_id, int64 } const Client::MessageInfo *Client::add_message(object_ptr &&message, bool force_update_content) { - auto new_message_info = create_message(std::move(message)); + return add_message(create_message(std::move(message)), force_update_content); +} + +const Client::MessageInfo *Client::add_message(td::unique_ptr &&new_message_info, + bool force_update_content) { LOG(DEBUG) << "Add message " << new_message_info->id << " to chat " << new_message_info->chat_id; auto &message_info = messages_[{new_message_info->chat_id, new_message_info->id}]; if (message_info != nullptr) { diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index af42085..5a80308 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -1254,6 +1254,8 @@ class Client final : public WebhookActor::Callback { const MessageInfo *add_message(object_ptr &&message, bool force_update_content = false); + const MessageInfo *add_message(td::unique_ptr &&new_message_info, bool force_update_content); + td::unique_ptr create_message(object_ptr message); const MessageInfo *get_message(int64 chat_id, int64 message_id, bool force_cache) const; @@ -1466,11 +1468,11 @@ class Client final : public WebhookActor::Callback { int64 current_send_message_query_id_ = 1; struct NewMessage { - object_ptr message; - bool is_edited = false; + td::unique_ptr message_info_; + bool is_edited_ = false; - NewMessage(object_ptr &&message, bool is_edited) - : message(std::move(message)), is_edited(is_edited) { + NewMessage(td::unique_ptr &&message_info, bool is_edited) + : message_info_(std::move(message_info)), is_edited_(is_edited) { } }; struct NewMessageQueue {