Update channel administrators and bots, whenever full member list is received.

GitOrigin-RevId: b0484ba4f93cc11e78b64f81412db494d821da62
This commit is contained in:
levlam 2019-03-12 13:03:42 +03:00
parent d52472311b
commit d4fb13d856

View File

@ -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; auto participant_count = filter.is_recent() && total_count != 0 && total_count < 10000 ? total_count : -1;
int32 administrator_count = filter.is_administrators() ? total_count : -1; int32 administrator_count = filter.is_administrators() ? total_count : -1;
if (offset == 0 && static_cast<int32>(participants.size()) < limit && if (offset == 0 && static_cast<int32>(participants.size()) < limit &&
(filter.is_administrators() || filter.is_bots())) { (filter.is_administrators() || filter.is_bots() || filter.is_recent())) {
vector<UserId> participant_user_ids;
vector<UserId> administrator_user_ids;
vector<UserId> bot_user_ids;
{
auto user_ids = transform(result, [](const DialogParticipant &participant) { return participant.user_id; }); auto user_ids = transform(result, [](const DialogParticipant &participant) { return participant.user_id; });
if (filter.is_administrators()) { if (filter.is_recent()) {
on_update_dialog_administrators(DialogId(channel_id), std::move(user_ids), true); for (const auto &participant : result) {
if (participant.status.is_administrator()) {
administrator_user_ids.push_back(participant.user_id);
} }
if (filter.is_bots()) { if (is_user_bot(participant.user_id)) {
td_->messages_manager_->on_dialog_bots_updated(DialogId(channel_id), std::move(user_ids)); 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_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));
} }
} }