// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2026 // // 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) // #pragma once #include "td/telegram/CustomEmojiId.h" #include "td/telegram/DialogId.h" #include "td/telegram/DialogParticipant.h" #include "td/telegram/files/FileId.h" #include "td/telegram/MessageContentDupType.h" #include "td/telegram/RichMessageMedia.h" #include "td/telegram/td_api.h" #include "td/telegram/telegram_api.h" #include "td/telegram/UserId.h" #include "td/telegram/WebPageBlock.h" #include "td/utils/common.h" #include "td/utils/Slice.h" #include "td/utils/Status.h" #include namespace td { class Dependencies; class MessageContent; class Td; class RichMessage { enum class InputType : int32 { None, Markdown, Html }; vector> blocks_; bool is_rtl_ = false; bool is_full_ = false; bool noautolink_ = false; InputType input_type_ = InputType::None; vector media_; string source_; friend bool operator==(const RichMessage &lhs, const RichMessage &rhs); vector> get_input_rich_files( const Td *td, bool with_input_media, vector> input_media) const; public: RichMessage() = default; RichMessage(const RichMessage &) = delete; RichMessage &operator=(const RichMessage &) = delete; RichMessage(RichMessage &&) = default; RichMessage &operator=(RichMessage &&) = default; ~RichMessage() = default; RichMessage(Td *td, telegram_api::object_ptr &&rich_message, DialogId owner_dialog_id); static Result get_rich_message(Td *td, DialogId dialog_id, td_api::object_ptr &&message, bool is_bot); static Result get_rich_message(Td *td, DialogId dialog_id, td_api::object_ptr &&message, bool is_bot); bool is_full() const { return is_full_; } vector get_any_file_ids() const; vector get_cover_any_file_ids() const; void append_file_ids(const Td *td, vector &file_ids) const; void add_dependencies(Dependencies &dependencies) const; void for_each_text(const std::function &callback) const; vector get_user_ids() const; bool has_bot_commands() const; vector get_hashtags() const; vector get_custom_emoji_ids() const; bool can_send(const RestrictedRights &rights) const; int32 get_index_mask() const; telegram_api::object_ptr get_input_rich_message( const Td *td, bool with_input_media = false, vector> input_media = {}) const; td_api::object_ptr get_rich_message_object(Td *td, bool skip_bot_commands) const; RichMessage clone(Td *td, DialogId dialog_id, const MessageContentDupType &type) const; vector> get_individual_message_contents(Td *td) const; vector get_individual_message_content_refs(); vector get_individual_message_content_refs() const; const MessageContent *get_individual_message_content_ref(int32 media_pos) const; unique_ptr &get_individual_message_content(int32 media_pos); static void compare(Td *td, const RichMessage &lhs, const RichMessage &rhs, bool &is_changed, bool &need_update); template void store(StorerT &storer) const; template void parse(ParserT &parser); }; bool operator==(const RichMessage &lhs, const RichMessage &rhs); inline bool operator!=(const RichMessage &lhs, const RichMessage &rhs) { return !(lhs == rhs); } } // namespace td