From 4cc5ed345dafe1a9c03d0ccf062be82607ab0cc6 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 2 Nov 2022 14:04:43 +0300 Subject: [PATCH] Improve MessateReplyHeader processing. --- td/telegram/MessageReplyHeader.cpp | 4 +++- td/telegram/MessageReplyHeader.h | 2 +- td/telegram/MessagesManager.cpp | 13 ++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/td/telegram/MessageReplyHeader.cpp b/td/telegram/MessageReplyHeader.cpp index 9d6b8ff79..a2cb53088 100644 --- a/td/telegram/MessageReplyHeader.cpp +++ b/td/telegram/MessageReplyHeader.cpp @@ -15,7 +15,7 @@ namespace td { MessageReplyHeader::MessageReplyHeader(tl_object_ptr &&reply_header, - DialogId dialog_id, MessageId message_id, int32 date) { + DialogId dialog_id, MessageId message_id, int32 date, bool can_have_thread) { if (reply_header == nullptr) { return; } @@ -51,6 +51,8 @@ MessageReplyHeader::MessageReplyHeader(tl_object_ptrflags_ & telegram_api::messageReplyHeader::REPLY_TO_TOP_ID_MASK) != 0) { top_thread_message_id = MessageId(ServerMessageId(reply_header->reply_to_top_id_)); + } else if (can_have_thread) { + top_thread_message_id = reply_to_message_id; } is_topic_message = reply_header->forum_topic_; } diff --git a/td/telegram/MessageReplyHeader.h b/td/telegram/MessageReplyHeader.h index cae3d946c..bdabdb439 100644 --- a/td/telegram/MessageReplyHeader.h +++ b/td/telegram/MessageReplyHeader.h @@ -23,7 +23,7 @@ struct MessageReplyHeader { MessageReplyHeader() = default; MessageReplyHeader(tl_object_ptr &&reply_header, DialogId dialog_id, - MessageId message_id, int32 date); + MessageId message_id, int32 date, bool can_have_thread); }; } // namespace td diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 2634e680e..c184def5e 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -14628,8 +14628,10 @@ MessagesManager::MessageInfo MessagesManager::parse_telegram_api_message( } message_info.date = message->date_; message_info.forward_header = std::move(message->fwd_from_); + bool can_have_thread = !is_scheduled && message_info.dialog_id.get_type() == DialogType::Channel && + !is_broadcast_channel(message_info.dialog_id); message_info.reply_header = MessageReplyHeader(std::move(message->reply_to_), message_info.dialog_id, - message_info.message_id, message_info.date); + message_info.message_id, message_info.date, can_have_thread); if (message->flags_ & MESSAGE_FLAG_IS_SENT_VIA_BOT) { message_info.via_bot_user_id = UserId(message->via_bot_id_); if (!message_info.via_bot_user_id.is_valid()) { @@ -14694,8 +14696,10 @@ MessagesManager::MessageInfo MessagesManager::parse_telegram_api_message( message_info.ttl_period = message->ttl_period_; } message_info.flags = message->flags_; + bool can_have_thread = !is_scheduled && message_info.dialog_id.get_type() == DialogType::Channel && + !is_broadcast_channel(message_info.dialog_id); message_info.reply_header = MessageReplyHeader(std::move(message->reply_to_), message_info.dialog_id, - message_info.message_id, message_info.date); + message_info.message_id, message_info.date, can_have_thread); message_info.content = get_action_message_content(td_, std::move(message->action_), message_info.dialog_id, message_info.reply_header.reply_in_dialog_id, message_info.reply_header.reply_to_message_id); @@ -14882,11 +14886,6 @@ std::pair> MessagesManager::creat forward_count = 0; } MessageReplyInfo reply_info(td_, std::move(message_info.reply_info), td_->auth_manager_->is_bot()); - if (reply_to_message_id.is_valid() && !reply_in_dialog_id.is_valid() && message_id.is_valid() && - message_id.is_server() && !top_thread_message_id.is_valid() && dialog_type == DialogType::Channel && - !is_broadcast_channel(dialog_id)) { - top_thread_message_id = reply_to_message_id; - } if (!top_thread_message_id.is_valid() && is_thread_message(dialog_id, message_id, reply_info, content_type)) { top_thread_message_id = message_id; is_topic_message = (content_type == MessageContentType::TopicCreate);