Remove known premium emoji from secret chat messages from non-premium users.

This commit is contained in:
levlam 2022-07-27 21:52:42 +03:00
parent 84202b5554
commit e601012e9f
3 changed files with 13 additions and 5 deletions

View File

@ -4146,7 +4146,7 @@ unique_ptr<MessageContent> get_secret_message_content(
message_text = message_text + "\n\n" + caption; 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); auto status = fix_formatted_text(message_text, entities, true, false, true, td->auth_manager_->is_bot(), false);
if (status.is_error()) { if (status.is_error()) {
LOG(WARNING) << "Receive error " << status << " while parsing secret message \"" << message_text LOG(WARNING) << "Receive error " << status << " while parsing secret message \"" << message_text

View File

@ -3545,7 +3545,9 @@ vector<MessageEntity> get_message_entities(const ContactsManager *contacts_manag
return entities; return entities;
} }
vector<MessageEntity> get_message_entities(vector<tl_object_ptr<secret_api::MessageEntity>> &&secret_entities) { vector<MessageEntity> get_message_entities(const Td *td,
vector<tl_object_ptr<secret_api::MessageEntity>> &&secret_entities,
bool is_premium) {
vector<MessageEntity> entities; vector<MessageEntity> entities;
entities.reserve(secret_entities.size()); entities.reserve(secret_entities.size());
for (auto &secret_entity : secret_entities) { for (auto &secret_entity : secret_entities) {
@ -3650,7 +3652,10 @@ vector<MessageEntity> get_message_entities(vector<tl_object_ptr<secret_api::Mess
} }
case secret_api::messageEntityCustomEmoji::ID: { case secret_api::messageEntityCustomEmoji::ID: {
auto entity = static_cast<const secret_api::messageEntityCustomEmoji *>(secret_entity.get()); auto entity = static_cast<const secret_api::messageEntityCustomEmoji *>(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; break;
} }
default: default:
@ -4425,7 +4430,8 @@ void remove_unallowed_entities(const Td *td, FormattedText &text, DialogId dialo
sort_entities(text.entities); sort_entities(text.entities);
remove_intersecting_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 // remove premium custom emoji
td::remove_if(text.entities, [td](const MessageEntity &entity) { td::remove_if(text.entities, [td](const MessageEntity &entity) {
return entity.type == MessageEntity::Type::CustomEmoji && return entity.type == MessageEntity::Type::CustomEmoji &&

View File

@ -192,7 +192,9 @@ vector<MessageEntity> get_message_entities(const ContactsManager *contacts_manag
vector<tl_object_ptr<telegram_api::MessageEntity>> &&server_entities, vector<tl_object_ptr<telegram_api::MessageEntity>> &&server_entities,
const char *source); const char *source);
vector<MessageEntity> get_message_entities(vector<tl_object_ptr<secret_api::MessageEntity>> &&secret_entities); vector<MessageEntity> get_message_entities(const Td *td,
vector<tl_object_ptr<secret_api::MessageEntity>> &&secret_entities,
bool is_premium);
// like clean_input_string but also validates entities // like clean_input_string but also validates entities
Status fix_formatted_text(string &text, vector<MessageEntity> &entities, bool allow_empty, bool skip_new_entities, Status fix_formatted_text(string &text, vector<MessageEntity> &entities, bool allow_empty, bool skip_new_entities,