From 833dfcc9db9b02d56250fc14d6356f0935b546ac Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 22 Jul 2022 16:47:58 +0300 Subject: [PATCH] Remove spoiler and custom emoji entities from messages forwarded to secret chats. --- td/telegram/MessageContent.cpp | 9 +++++++-- td/telegram/MessageEntity.cpp | 10 ++++++++++ td/telegram/MessageEntity.h | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index b92ec804e..c6ee12521 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -4660,8 +4660,13 @@ unique_ptr dup_message_content(Td *td, DialogId dialog_id, const CHECK(result->file_id.is_valid()); return std::move(result); } - case MessageContentType::Text: - return make_unique(*static_cast(content)); + case MessageContentType::Text: { + auto result = make_unique(*static_cast(content)); + if (type == MessageContentDupType::Copy || type == MessageContentDupType::ServerCopy) { + remove_unallowed_entities(result->text, to_secret); + } + return result; + } case MessageContentType::Venue: return make_unique(*static_cast(content)); case MessageContentType::Video: { diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index 9de71fb63..837a970d6 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -209,6 +209,14 @@ td_api::object_ptr get_formatted_text_object(const Format text.text, get_text_entities_object(text.entities, skip_bot_commands, max_media_timestamp)); } +void remove_unallowed_entities(FormattedText &text, bool to_secret) { + if (to_secret) { + td::remove_if(text.entities, [](const MessageEntity &entity) { + return entity.type == MessageEntity::Type::Spoiler || entity.type == MessageEntity::Type::CustomEmoji; + }); + } +} + static bool is_word_character(uint32 code) { switch (get_unicode_simple_category(code)) { case UnicodeSimpleCategory::Letter: @@ -3271,6 +3279,8 @@ vector> get_input_secret_message_entiti break; case MessageEntity::Type::Spoiler: break; + case MessageEntity::Type::CustomEmoji: + break; default: UNREACHABLE(); } diff --git a/td/telegram/MessageEntity.h b/td/telegram/MessageEntity.h index 539271577..2d54d3e6d 100644 --- a/td/telegram/MessageEntity.h +++ b/td/telegram/MessageEntity.h @@ -150,6 +150,8 @@ vector> get_text_entities_object(const vector< td_api::object_ptr get_formatted_text_object(const FormattedText &text, bool skip_bot_commands, int32 max_media_timestamp); +void remove_unallowed_entities(FormattedText &text, bool to_secret); + vector find_entities(Slice text, bool skip_bot_commands, bool skip_media_timestamps); vector find_mentions(Slice str);