From 696d523e8a84917cc9f1f53df7d95be12af8d16a Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 1 May 2026 19:04:04 +0300 Subject: [PATCH] Store reply for guest messages. --- telegram-bot-api/Client.cpp | 24 ++++++++++++++++++------ telegram-bot-api/Client.h | 2 ++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp index 2571f5c..1beaf7a 100644 --- a/telegram-bot-api/Client.cpp +++ b/telegram-bot-api/Client.cpp @@ -4064,9 +4064,7 @@ void Client::JsonMessage::store(td::JsonValueScope *scope) const { auto reply_to_message_id = client_->get_same_chat_reply_to_message_id(message_, true); if (reply_to_message_id > 0) { // internal reply - const MessageInfo *reply_to_message = !message_->business_connection_id.empty() - ? message_->business_reply_to_message.get() - : client_->get_message(message_->chat_id, reply_to_message_id, true); + const auto *reply_to_message = client_->get_reply_to_message_info(message_, reply_to_message_id); if (reply_to_message != nullptr) { object("reply_to_message", JsonMessage(reply_to_message, false, "reply in " + source_, client_)); } else { @@ -4320,9 +4318,7 @@ void Client::JsonMessage::store(td::JsonValueScope *scope) const { auto content = static_cast(message_->content.get()); auto message_id = content->message_id_; if (message_id > 0) { - const MessageInfo *pinned_message = !message_->business_connection_id.empty() - ? message_->business_reply_to_message.get() - : client_->get_message(message_->chat_id, message_id, true); + const auto *pinned_message = client_->get_reply_to_message_info(message_, message_id); if (pinned_message != nullptr) { object("pinned_message", JsonMessage(pinned_message, false, "pin in " + source_, client_)); } else if (need_reply_) { @@ -17091,6 +17087,7 @@ void Client::add_business_message_edited(object_ptr &&update) { CHECK(update != nullptr); + CHECK(update->id_ != 0); auto message_info = create_message(std::move(update->message_)); message_info->reference_messages = transform(std::move(update->reference_messages_), @@ -18131,6 +18128,21 @@ td::int64 Client::get_implicit_reply_to_message_id(int64 chat_id, int64 message_ return implicit_reply_to_message_id < message_id ? implicit_reply_to_message_id : 0; } +const Client::MessageInfo *Client::get_reply_to_message_info(const MessageInfo *message_info, int64 message_id) const { + if (!message_info->business_connection_id.empty()) { + return message_info->business_reply_to_message.get(); + } + if (message_info->guest_query_id != 0) { + for (const auto &reference_message : message_info->reference_messages) { + if (reference_message->id == message_id) { + return reference_message.get(); + } + } + return nullptr; + } + return get_message(message_info->chat_id, message_id, true); +} + td::int32 Client::get_forum_topic_id(const object_ptr &topic_id) { if (topic_id == nullptr) { return 0; diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h index eec7c69..cb06361 100644 --- a/telegram-bot-api/Client.h +++ b/telegram-bot-api/Client.h @@ -1300,6 +1300,8 @@ class Client final : public WebhookActor::Callback { int64 get_implicit_reply_to_message_id(int64 chat_id, int64 message_id, const object_ptr &topic_id) const; + const MessageInfo *get_reply_to_message_info(const MessageInfo *message_info, int64 message_id) const; + static int32 get_forum_topic_id(const object_ptr &topic_id); static int64 as_tdlib_message_id(int32 message_id);