From e601012e9f5c112c18b1496d8e6b8a7527ddb47d Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 27 Jul 2022 21:52:42 +0300 Subject: [PATCH] Remove known premium emoji from secret chat messages from non-premium users. --- td/telegram/MessageContent.cpp | 2 +- td/telegram/MessageEntity.cpp | 12 +++++++++--- td/telegram/MessageEntity.h | 4 +++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index e70191e07..9e17d7416 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -4146,7 +4146,7 @@ unique_ptr get_secret_message_content( message_text = message_text + "\n\n" + caption; } - auto entities = get_message_entities(std::move(secret_entities)); + auto entities = get_message_entities(td, std::move(secret_entities), is_premium); auto status = fix_formatted_text(message_text, entities, true, false, true, td->auth_manager_->is_bot(), false); if (status.is_error()) { LOG(WARNING) << "Receive error " << status << " while parsing secret message \"" << message_text diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index 37a9f5f3c..c2777a525 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -3545,7 +3545,9 @@ vector get_message_entities(const ContactsManager *contacts_manag return entities; } -vector get_message_entities(vector> &&secret_entities) { +vector get_message_entities(const Td *td, + vector> &&secret_entities, + bool is_premium) { vector entities; entities.reserve(secret_entities.size()); for (auto &secret_entity : secret_entities) { @@ -3650,7 +3652,10 @@ vector get_message_entities(vector(secret_entity.get()); - entities.emplace_back(MessageEntity::Type::CustomEmoji, entity->offset_, entity->length_, entity->document_id_); + if (is_premium || !td->stickers_manager_->is_premium_custom_emoji(entity->document_id_)) { + entities.emplace_back(MessageEntity::Type::CustomEmoji, entity->offset_, entity->length_, + entity->document_id_); + } break; } default: @@ -4425,7 +4430,8 @@ void remove_unallowed_entities(const Td *td, FormattedText &text, DialogId dialo sort_entities(text.entities); remove_intersecting_entities(text.entities); } - } else if (!G()->shared_config().get_option_boolean("is_premium")) { + } + if (!G()->shared_config().get_option_boolean("is_premium")) { // remove premium custom emoji td::remove_if(text.entities, [td](const MessageEntity &entity) { return entity.type == MessageEntity::Type::CustomEmoji && diff --git a/td/telegram/MessageEntity.h b/td/telegram/MessageEntity.h index d7d71ac6e..263d699e4 100644 --- a/td/telegram/MessageEntity.h +++ b/td/telegram/MessageEntity.h @@ -192,7 +192,9 @@ vector get_message_entities(const ContactsManager *contacts_manag vector> &&server_entities, const char *source); -vector get_message_entities(vector> &&secret_entities); +vector get_message_entities(const Td *td, + vector> &&secret_entities, + bool is_premium); // like clean_input_string but also validates entities Status fix_formatted_text(string &text, vector &entities, bool allow_empty, bool skip_new_entities,