From d4fb13d85619f828613a3f326e2168cb53e042c7 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 12 Mar 2019 13:03:42 +0300 Subject: [PATCH] Update channel administrators and bots, whenever full member list is received. GitOrigin-RevId: b0484ba4f93cc11e78b64f81412db494d821da62 --- td/telegram/ContactsManager.cpp | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index 1b510c2e1..73cdb209f 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -7457,13 +7457,33 @@ void ContactsManager::on_get_channel_participants_success( auto participant_count = filter.is_recent() && total_count != 0 && total_count < 10000 ? total_count : -1; int32 administrator_count = filter.is_administrators() ? total_count : -1; if (offset == 0 && static_cast(participants.size()) < limit && - (filter.is_administrators() || filter.is_bots())) { - auto user_ids = transform(result, [](const DialogParticipant &participant) { return participant.user_id; }); - if (filter.is_administrators()) { - on_update_dialog_administrators(DialogId(channel_id), std::move(user_ids), true); + (filter.is_administrators() || filter.is_bots() || filter.is_recent())) { + vector participant_user_ids; + vector administrator_user_ids; + vector bot_user_ids; + { + auto user_ids = transform(result, [](const DialogParticipant &participant) { return participant.user_id; }); + if (filter.is_recent()) { + for (const auto &participant : result) { + if (participant.status.is_administrator()) { + administrator_user_ids.push_back(participant.user_id); + } + if (is_user_bot(participant.user_id)) { + bot_user_ids.push_back(participant.user_id); + } + } + participant_user_ids = std::move(user_ids); + } else if (filter.is_administrators()) { + administrator_user_ids = std::move(user_ids); + } else if (filter.is_bots()) { + bot_user_ids = std::move(user_ids); + } } - if (filter.is_bots()) { - td_->messages_manager_->on_dialog_bots_updated(DialogId(channel_id), std::move(user_ids)); + if (filter.is_administrators() || filter.is_recent()) { + on_update_dialog_administrators(DialogId(channel_id), std::move(administrator_user_ids), true); + } + if (filter.is_bots() || filter.is_recent()) { + td_->messages_manager_->on_dialog_bots_updated(DialogId(channel_id), std::move(bot_user_ids)); } }