aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2025-10-20 23:31:49 +0300
committerlevlam <levlam@telegram.org>2025-10-20 23:31:49 +0300
commit5d7d1372946b7b2c861ed9107019cba3d0e8b3fc (patch)
tree00dbee8c8e749d9c4b3d5118713c9983f03920a1
parent1b86e73c10c0fb24a9d3c4b788a2d6ecac00b9f1 (diff)
Preload top forum topic message.
-rw-r--r--telegram-bot-api/Client.cpp12
-rw-r--r--telegram-bot-api/Client.h3
2 files changed, 15 insertions, 0 deletions
diff --git a/telegram-bot-api/Client.cpp b/telegram-bot-api/Client.cpp
index f591a43..2da91d1 100644
--- a/telegram-bot-api/Client.cpp
+++ b/telegram-bot-api/Client.cpp
@@ -6254,6 +6254,18 @@ class Client::TdOnCheckForumTopicCallback final : public TdQueryCallback {
auto forum_topic = move_object_as<td_api::forumTopic>(result);
CHECK(forum_topic->info_->chat_id_ == chat_id_);
CHECK(forum_topic->info_->forum_topic_id_ == forum_topic_id_);
+ auto message_id = as_tdlib_message_id(forum_topic_id_);
+ if (client_->get_chat_type(chat_id_) == ChatType::Supergroup &&
+ client_->get_message(chat_id_, message_id, false) == nullptr) {
+ auto on_check_message = [forum_topic_id = forum_topic_id_, on_success = std::move(on_success_)](
+ int64 chat_id, int64 message_id, PromisedQueryPtr query) mutable {
+ on_success(chat_id, make_object<td_api::messageTopicForum>(forum_topic_id), std::move(query));
+ };
+ return client_->send_request(make_object<td_api::getMessage>(chat_id_, message_id),
+ td::make_unique<TdOnCheckMessageCallback<decltype(on_check_message)>>(
+ client_, chat_id_, message_id, true, "top forum topic message",
+ std::move(query_), std::move(on_check_message)));
+ }
on_success_(chat_id_, make_object<td_api::messageTopicForum>(forum_topic_id_), std::move(query_));
}
diff --git a/telegram-bot-api/Client.h b/telegram-bot-api/Client.h
index 5568296..5b8ce84 100644
--- a/telegram-bot-api/Client.h
+++ b/telegram-bot-api/Client.h
@@ -1214,8 +1214,11 @@ class Client final : public WebhookActor::Callback {
};
MessageFullId add_message(object_ptr<td_api::message> &&message, bool force_update_content = false);
+
void init_message(MessageInfo *message_info, object_ptr<td_api::message> &&message, bool force_update_content);
+
const MessageInfo *get_message(int64 chat_id, int64 message_id, bool force_cache) const;
+
MessageInfo *get_message_editable(int64 chat_id, int64 message_id);
td::unique_ptr<MessageInfo> create_business_message(td::string business_connection_id,