// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #include "td/telegram/MessageReplyHeader.h" #include "td/telegram/MessageFullId.h" #include "td/telegram/ScheduledServerMessageId.h" #include "td/telegram/ServerMessageId.h" #include "td/telegram/StoryId.h" #include "td/telegram/UserId.h" #include "td/utils/logging.h" namespace td { MessageReplyHeader::MessageReplyHeader(Td *td, tl_object_ptr &&reply_header_ptr, DialogId dialog_id, MessageId message_id, int32 date, bool can_have_thread) { if (reply_header_ptr == nullptr) { return; } if (reply_header_ptr->get_id() == telegram_api::messageReplyStoryHeader::ID) { auto reply_header = telegram_api::move_object_as(reply_header_ptr); UserId user_id(reply_header->user_id_); StoryId story_id(reply_header->story_id_); if (!user_id.is_valid() || !story_id.is_server()) { LOG(ERROR) << "Receive " << to_string(reply_header); } else { story_full_id_ = {DialogId(user_id), story_id}; } return; } CHECK(reply_header_ptr->get_id() == telegram_api::messageReplyHeader::ID); auto reply_header = telegram_api::move_object_as(reply_header_ptr); if (!message_id.is_scheduled() && can_have_thread) { if ((reply_header->flags_ & telegram_api::messageReplyHeader::REPLY_TO_TOP_ID_MASK) != 0) { top_thread_message_id_ = MessageId(ServerMessageId(reply_header->reply_to_top_id_)); if (!top_thread_message_id_.is_valid()) { LOG(ERROR) << "Receive " << to_string(reply_header); top_thread_message_id_ = MessageId(); } } is_topic_message_ = reply_header->forum_topic_; } replied_message_info_ = RepliedMessageInfo(td, std::move(reply_header), dialog_id, message_id, date); if (!message_id.is_scheduled() && can_have_thread) { if (!top_thread_message_id_.is_valid()) { auto same_chat_reply_to_message_id = replied_message_info_.get_same_chat_reply_to_message_id(); if (same_chat_reply_to_message_id.is_valid()) { CHECK(same_chat_reply_to_message_id.is_server()); top_thread_message_id_ = same_chat_reply_to_message_id; } else { is_topic_message_ = false; } } if (top_thread_message_id_ >= message_id) { LOG(ERROR) << "Receive top thread " << top_thread_message_id_ << " in " << message_id << " in " << dialog_id; top_thread_message_id_ = MessageId(); } } } } // namespace td