From 031c9fedb9ace2a970211472d5b6babf9b2267a8 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 | 59 ++++++++++++++++++- 1 file changed, 56 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 b7bb4b9e0..4a36d3421 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -48,6 +48,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" @@ -1413,8 +1414,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>(); @@ -1475,7 +1478,57 @@ void InnerWidget::suggestRestrictParticipant( editRestrictions(false, ChatRestrictionsInfo()); }).send(); } - }, &st::menuIconPermissions); + }, user ? &st::menuIconPermissions : &st::menuIconRemove); + + if (user) { + _menu->addAction(tr::lng_context_remove_from_group(tr::now), [=] { + auto editRestrictions = [=](bool hasAdminRights, ChatRestrictionsInfo currentRights) { + const auto text = (_channel->isBroadcast() + ? tr::lng_profile_sure_kick_channel + : tr::lng_profile_sure_kick)( + tr::now, + lt_user, + participant->name()); + auto weakBox = std::make_shared>(); + const auto sure = crl::guard(this, [=] { + restrictParticipant( + participant, + ChatRestrictionsInfo(), + ChannelData::KickedRestrictedRights(participant)); + if (*weakBox) { + (*weakBox)->closeBox(); + } + }); + *weakBox = _controller->show(Ui::MakeConfirmBox({ text, sure })); + }; + 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(