diff --git a/td/telegram/ConfigManager.cpp b/td/telegram/ConfigManager.cpp index b3ddbdcc5..d9d726e5d 100644 --- a/td/telegram/ConfigManager.cpp +++ b/td/telegram/ConfigManager.cpp @@ -992,7 +992,8 @@ void ConfigManager::request_config_from_dc_impl(DcId dc_id) { } void ConfigManager::set_ignore_sensitive_content_restrictions(bool ignore_sensitive_content_restrictions) { - G()->shared_config().set_option_boolean("ignore_sensitive_content_restrictions", ignore_sensitive_content_restrictions); + G()->shared_config().set_option_boolean("ignore_sensitive_content_restrictions", + ignore_sensitive_content_restrictions); bool have_ignored_restriction_reasons = G()->shared_config().have_option("ignored_restriction_reasons"); if (have_ignored_restriction_reasons != ignore_sensitive_content_restrictions) { get_app_config(Auto()); @@ -1351,6 +1352,7 @@ void ConfigManager::process_app_config(tl_object_ptr &c shared_config.set_option_string("default_ton_blockchain_name", wallet_blockchain_name); shared_config.set_option_string("default_ton_blockchain_config", wallet_config); } + if (ignored_restriction_reasons.empty()) { shared_config.set_option_empty("ignored_restriction_reasons"); diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index a6ed33585..f53a353f5 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -7875,6 +7875,13 @@ void ContactsManager::update_user(User *u, UserId user_id, bool from_binlog, boo if (u->is_default_permissions_changed) { td_->messages_manager_->on_dialog_permissions_updated(DialogId(user_id)); } + if (!td_->auth_manager_->is_bot()) { + if (u->restriction_reasons.empty()) { + restricted_user_ids_.erase(user_id); + } else { + restricted_user_ids_.insert(user_id); + } + } u->is_name_changed = false; u->is_username_changed = false; @@ -8042,6 +8049,14 @@ void ContactsManager::update_channel(Channel *c, ChannelId channel_id, bool from if (c->is_default_permissions_changed) { td_->messages_manager_->on_dialog_permissions_updated(DialogId(channel_id)); } + if (!td_->auth_manager_->is_bot()) { + if (c->restriction_reasons.empty()) { + restricted_channel_ids_.erase(channel_id); + } else { + restricted_channel_ids_.insert(channel_id); + } + } + c->is_photo_changed = false; c->is_title_changed = false; c->is_default_permissions_changed = false; @@ -9051,6 +9066,18 @@ void ContactsManager::on_update_user_full_need_phone_number_privacy_exception( } } +void ContactsManager::on_ignored_restriction_reasons_changed() { + for (auto user_id : restricted_user_ids_) { + send_closure(G()->td(), &Td::send_update, + td_api::make_object(get_user_object(user_id, get_user(user_id)))); + } + for (auto channel_id : restricted_channel_ids_) { + send_closure( + G()->td(), &Td::send_update, + td_api::make_object(get_supergroup_object(channel_id, get_channel(channel_id)))); + } +} + void ContactsManager::on_delete_profile_photo(int64 profile_photo_id, Promise promise) { UserId my_id = get_my_id(); diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 679649d83..dd3c60d3a 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -175,6 +175,8 @@ class ContactsManager : public Actor { void on_delete_profile_photo(int64 profile_photo_id, Promise promise); + void on_ignored_restriction_reasons_changed(); + void on_get_chat_participants(tl_object_ptr &&participants, bool from_update); void on_update_chat_add_user(ChatId chat_id, UserId inviter_user_id, UserId user_id, int32 date, int32 version); void on_update_chat_description(ChatId chat_id, string &&description); @@ -1418,6 +1420,9 @@ class ContactsManager : public Actor { vector users_nearby_; vector channels_nearby_; + std::unordered_set restricted_user_ids_; + std::unordered_set restricted_channel_ids_; + vector next_all_imported_contacts_; vector imported_contacts_unique_id_; vector imported_contacts_pos_; diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 3c3d1c5e6..4d629c0ec 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -3873,6 +3873,8 @@ void Td::on_config_option_updated(const string &name) { return send_closure(notification_manager_actor_, &NotificationManager::on_notification_cloud_delay_changed); } else if (name == "notification_default_delay_ms") { return send_closure(notification_manager_actor_, &NotificationManager::on_notification_default_delay_changed); + } else if (name == "ignored_restriction_reasons") { + return send_closure(contacts_manager_actor_, &ContactsManager::on_ignored_restriction_reasons_changed); } else if (is_internal_config_option(name)) { return; }