From 97248f143248ba2ca6c066c824e4116cc8e5b92f Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 3 Mar 2023 15:43:14 +0300 Subject: [PATCH] Send td_api::updateAddChatMembersPrivacyForbidden after failed adding of a user to a basic group. --- td/telegram/ContactsManager.cpp | 23 +++++++++++++++++++---- td/telegram/ContactsManager.h | 2 ++ td/telegram/UpdatesManager.cpp | 6 ++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index ad9eada1e..a10533358 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -1862,12 +1862,16 @@ class DeleteChannelQuery final : public Td::ResultHandler { class AddChatUserQuery final : public Td::ResultHandler { Promise promise_; + ChatId chat_id_; + UserId user_id_; public: explicit AddChatUserQuery(Promise &&promise) : promise_(std::move(promise)) { } - void send(ChatId chat_id, tl_object_ptr &&input_user, int32 forward_limit) { + void send(ChatId chat_id, UserId user_id, tl_object_ptr &&input_user, int32 forward_limit) { + chat_id_ = chat_id; + user_id_ = user_id; send_query(G()->net_query_creator().create( telegram_api::messages_addChatUser(chat_id.get(), std::move(input_user), forward_limit))); } @@ -1884,8 +1888,12 @@ class AddChatUserQuery final : public Td::ResultHandler { } void on_error(Status status) final { + if (status.message() == "USER_PRIVACY_RESTRICTED") { + td_->contacts_manager_->send_update_add_chat_members_privacy_forbidden(DialogId(chat_id_), {user_id_}, + "AddChatUserQuery"); + return promise_.set_value(Unit()); + } promise_.set_error(std::move(status)); - td_->updates_manager_->get_difference("AddChatUserQuery"); } }; @@ -1921,7 +1929,6 @@ class EditChatAdminQuery final : public Td::ResultHandler { void on_error(Status status) final { promise_.set_error(std::move(status)); - td_->updates_manager_->get_difference("EditChatAdminQuery"); } }; @@ -8174,6 +8181,13 @@ void ContactsManager::delete_dialog(DialogId dialog_id, Promise &&promise) } } +void ContactsManager::send_update_add_chat_members_privacy_forbidden(DialogId dialog_id, vector user_ids, + const char *source) { + send_closure(G()->td(), &Td::send_update, + td_api::make_object( + dialog_id.get(), get_user_ids_object(user_ids, source))); +} + void ContactsManager::add_chat_participant(ChatId chat_id, UserId user_id, int32 forward_limit, Promise &&promise) { const Chat *c = get_chat(chat_id); @@ -8201,7 +8215,8 @@ void ContactsManager::add_chat_participant(ChatId chat_id, UserId user_id, int32 } // TODO invoke after - td_->create_handler(std::move(promise))->send(chat_id, r_input_user.move_as_ok(), forward_limit); + td_->create_handler(std::move(promise)) + ->send(chat_id, user_id, r_input_user.move_as_ok(), forward_limit); } void ContactsManager::add_channel_participant(ChannelId channel_id, UserId user_id, diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 621ab8a45..4c7399f9d 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -434,6 +434,8 @@ class ContactsManager final : public Actor { void delete_dialog(DialogId dialog_id, Promise &&promise); + void send_update_add_chat_members_privacy_forbidden(DialogId dialog_id, vector user_ids, const char *source); + void get_channel_statistics_dc_id(DialogId dialog_id, bool for_full_statistics, Promise &&promise); void get_channel_statistics(DialogId dialog_id, bool is_dark, diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index c3113d987..169009cd7 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -1195,10 +1195,8 @@ void UpdatesManager::process_group_invite_privacy_forbidden_updates(DialogId dia user_ids.push_back(user_id); } if (!user_ids.empty()) { - send_closure(G()->td(), &Td::send_update, - td_api::make_object( - dialog_id.get(), td_->contacts_manager_->get_user_ids_object( - user_ids, "process_group_invite_privacy_forbidden_updates"))); + td_->contacts_manager_->send_update_add_chat_members_privacy_forbidden( + dialog_id, user_ids, "process_group_invite_privacy_forbidden_updates"); } }