From d7dfcd8fb8a71cf8e7a186df2ab25f8e529661f6 Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Sun, 11 Sep 2022 05:18:20 +0300 Subject: [PATCH] [Improvement] Allow to ban users from recent actions --- .../admin_log/history_admin_log_inner.cpp | 62 ++++++++++++++++++- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index e375eb62b..ab746ad29 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -45,6 +45,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "boxes/peers/edit_participant_box.h" #include "boxes/peers/edit_participants_box.h" +#include "ui/boxes/confirm_box.h" #include "data/data_session.h" #include "data/data_photo.h" #include "data/data_photo_media.h" @@ -1398,8 +1399,10 @@ void InnerWidget::suggestRestrictParticipant( return; } } - _menu->addAction(tr::lng_context_restrict_user(tr::now), [=] { - const auto user = participant->asUser(); + + const auto user = participant->asUser(); + + _menu->addAction(user ? tr::lng_context_restrict_user(tr::now) : tr::lng_context_remove_from_group(tr::now), [=] { auto editRestrictions = [=](bool hasAdminRights, ChatRestrictionsInfo currentRights) { auto weak = QPointer(this); auto weakBox = std::make_shared>(); @@ -1460,7 +1463,60 @@ void InnerWidget::suggestRestrictParticipant( editRestrictions(false, ChatRestrictionsInfo()); }).send(); } - }); + }, user ? &st::menuIconRestrict : &st::menuIconRemove); + + if (user) { + _menu->addAction(tr::lng_context_remove_from_group(tr::now), [=] { + auto editRestrictions = [=](bool hasAdminRights, ChatRestrictionsInfo currentRights) { + const auto text = tr::lng_profile_sure_kick(tr::now, lt_user, user->firstName); + auto weak = QPointer(this); + auto weakBox = std::make_shared>(); + auto box = Box( + text, + tr::lng_box_remove(tr::now), + crl::guard(this, [=] { + if (weak) { + weak->restrictParticipant( + participant, + ChatRestrictionsInfo(), + ChannelData::KickedRestrictedRights(participant)); + } + if (*weakBox) { + (*weakBox)->closeBox(); + } + })); + *weakBox = Ui::show( + std::move(box), + Ui::LayerOption::KeepOther); + }; + if (base::contains(_admins, user)) { + editRestrictions(true, ChatRestrictionsInfo()); + } else { + _api.request(MTPchannels_GetParticipant( + _channel->inputChannel, + user->input + )).done([=](const MTPchannels_ChannelParticipant &result) { + Expects(result.type() == mtpc_channels_channelParticipant); + + auto &participant = result.c_channels_channelParticipant(); + _channel->owner().processUsers(participant.vusers()); + auto type = participant.vparticipant().type(); + if (type == mtpc_channelParticipantBanned) { + auto &banned = participant.vparticipant().c_channelParticipantBanned(); + editRestrictions(false, ChatRestrictionsInfo(banned.vbanned_rights())); + } else { + auto hasAdminRights = (type == mtpc_channelParticipantAdmin) + || (type == mtpc_channelParticipantCreator); + auto bannedRights = ChatRestrictionsInfo(); + editRestrictions(hasAdminRights, bannedRights); + } + }).fail([=](const MTP::Error &error) { + auto bannedRights = ChatRestrictionsInfo(); + editRestrictions(false, bannedRights); + }).send(); + } + }, &st::menuIconRemove); + } } void InnerWidget::restrictParticipant(