mirror of https://github.com/procxx/kepka.git
Allow to delete users from exceptions.
This commit is contained in:
parent
d2d6a6daa4
commit
55d3d8adc3
|
@ -145,8 +145,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_sure_add_admin_invite_channel" = "This user is not a subscriber of this channel. Add them to the channel and promote them to admin?";
|
"lng_sure_add_admin_invite_channel" = "This user is not a subscriber of this channel. Add them to the channel and promote them to admin?";
|
||||||
"lng_sure_add_admin_unremove" = "This user is currently restricted or removed. Are you sure you want to promote them?";
|
"lng_sure_add_admin_unremove" = "This user is currently restricted or removed. Are you sure you want to promote them?";
|
||||||
"lng_sure_ban_admin" = "This user is an admin. Are you sure you want to go ahead and restrict them?";
|
"lng_sure_ban_admin" = "This user is an admin. Are you sure you want to go ahead and restrict them?";
|
||||||
"lng_sure_remove_user_group" = "Remove {user} from the group?";
|
|
||||||
"lng_sure_remove_user_channel" = "Remove {user} from the channel?";
|
|
||||||
"lng_sure_enable_socks" = "Are you sure you want to enable this proxy?\n\nServer: {server}\nPort: {port}\n\nYou can change your proxy server later in the Settings (Connection Type).";
|
"lng_sure_enable_socks" = "Are you sure you want to enable this proxy?\n\nServer: {server}\nPort: {port}\n\nYou can change your proxy server later in the Settings (Connection Type).";
|
||||||
"lng_sure_enable" = "Enable";
|
"lng_sure_enable" = "Enable";
|
||||||
|
|
||||||
|
|
|
@ -710,27 +710,30 @@ void AddSpecialBoxController::kickUser(
|
||||||
// Finally kick him.
|
// Finally kick him.
|
||||||
if (!sure) {
|
if (!sure) {
|
||||||
const auto text = ((_peer->isChat() || _peer->isMegagroup())
|
const auto text = ((_peer->isChat() || _peer->isMegagroup())
|
||||||
? lng_sure_remove_user_group
|
? lng_profile_sure_kick
|
||||||
: lng_sure_remove_user_channel)(lt_user, App::peerName(user));
|
: lng_profile_sure_kick_channel)(lt_user, App::peerName(user));
|
||||||
_editBox = Ui::show(
|
_editBox = Ui::show(
|
||||||
Box<ConfirmBox>(text, kickUserSure),
|
Box<ConfirmBox>(text, kickUserSure),
|
||||||
LayerOption::KeepOther);
|
LayerOption::KeepOther);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_editBox = nullptr;
|
|
||||||
const auto restrictedRights = _additional.restrictedRights(user);
|
const auto restrictedRights = _additional.restrictedRights(user);
|
||||||
const auto currentRights = restrictedRights
|
const auto currentRights = restrictedRights
|
||||||
? *restrictedRights
|
? *restrictedRights
|
||||||
: MTPChatBannedRights(MTP_chatBannedRights(
|
: MTPChatBannedRights(MTP_chatBannedRights(
|
||||||
MTP_flags(0),
|
MTP_flags(0),
|
||||||
MTP_int(0)));
|
MTP_int(0)));
|
||||||
auto &session = _peer->session();
|
|
||||||
if (const auto chat = _peer->asChat()) {
|
const auto done = crl::guard(this, [=](
|
||||||
session.api().kickParticipant(chat, user);
|
const MTPChatBannedRights &newRights) {
|
||||||
} else if (const auto channel = _peer->asChannel()) {
|
editRestrictedDone(user, newRights);
|
||||||
session.api().kickParticipant(channel, user, currentRights);
|
});
|
||||||
}
|
const auto fail = crl::guard(this, [=] {
|
||||||
|
_editBox = nullptr;
|
||||||
|
});
|
||||||
|
const auto callback = SaveRestrictedCallback(_peer, user, done, fail);
|
||||||
|
callback(currentRights, ChannelData::KickedRestrictedRights());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddSpecialBoxController::appendRow(not_null<UserData*> user) {
|
bool AddSpecialBoxController::appendRow(not_null<UserData*> user) {
|
||||||
|
|
|
@ -95,10 +95,6 @@ private:
|
||||||
not_null<UserData*> user,
|
not_null<UserData*> user,
|
||||||
const MTPChatBannedRights &rights);
|
const MTPChatBannedRights &rights);
|
||||||
void kickUser(not_null<UserData*> user, bool sure = false);
|
void kickUser(not_null<UserData*> user, bool sure = false);
|
||||||
void restrictUserSure(
|
|
||||||
not_null<UserData*> user,
|
|
||||||
const MTPChatBannedRights &oldRights,
|
|
||||||
const MTPChatBannedRights &newRights);
|
|
||||||
bool appendRow(not_null<UserData*> user);
|
bool appendRow(not_null<UserData*> user);
|
||||||
bool prependRow(not_null<UserData*> user);
|
bool prependRow(not_null<UserData*> user);
|
||||||
std::unique_ptr<PeerListRow> createRow(not_null<UserData*> user) const;
|
std::unique_ptr<PeerListRow> createRow(not_null<UserData*> user) const;
|
||||||
|
|
|
@ -179,6 +179,26 @@ void SaveChannelRestriction(
|
||||||
}).send();
|
}).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SaveChatParticipantKick(
|
||||||
|
not_null<ChatData*> chat,
|
||||||
|
not_null<UserData*> user,
|
||||||
|
Fn<void()> onDone,
|
||||||
|
Fn<void()> onFail) {
|
||||||
|
chat->session().api().request(MTPmessages_DeleteChatUser(
|
||||||
|
chat->inputChat,
|
||||||
|
user->inputUser
|
||||||
|
)).done([=](const MTPUpdates &result) {
|
||||||
|
chat->session().api().applyUpdates(result);
|
||||||
|
if (onDone) {
|
||||||
|
onDone();
|
||||||
|
}
|
||||||
|
}).fail([=](const RPCError &error) {
|
||||||
|
if (onFail) {
|
||||||
|
onFail();
|
||||||
|
}
|
||||||
|
}).send();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
Fn<void(
|
Fn<void(
|
||||||
|
@ -249,7 +269,9 @@ Fn<void(
|
||||||
const MTPDchatBannedRights &data) {
|
const MTPDchatBannedRights &data) {
|
||||||
return data.vflags.v;
|
return data.vflags.v;
|
||||||
});
|
});
|
||||||
if (!flags) {
|
if (flags & MTPDchatBannedRights::Flag::f_view_messages) {
|
||||||
|
SaveChatParticipantKick(chat, user, done, onFail);
|
||||||
|
} else if (!flags) {
|
||||||
done();
|
done();
|
||||||
} else {
|
} else {
|
||||||
peer->session().api().migrateChat(chat, saveForChannel);
|
peer->session().api().migrateChat(chat, saveForChannel);
|
||||||
|
@ -1333,8 +1355,6 @@ void ParticipantsBoxController::rowActionClicked(
|
||||||
kickMember(user);
|
kickMember(user);
|
||||||
} else if (_role == Role::Admins) {
|
} else if (_role == Role::Admins) {
|
||||||
removeAdmin(user);
|
removeAdmin(user);
|
||||||
} else if (_role == Role::Restricted) {
|
|
||||||
showRestricted(user);
|
|
||||||
} else {
|
} else {
|
||||||
removeKicked(row, user);
|
removeKicked(row, user);
|
||||||
}
|
}
|
||||||
|
@ -1628,6 +1648,10 @@ void ParticipantsBoxController::removeKicked(
|
||||||
not_null<PeerListRow*> row,
|
not_null<PeerListRow*> row,
|
||||||
not_null<UserData*> user) {
|
not_null<UserData*> user) {
|
||||||
delegate()->peerListRemoveRow(row);
|
delegate()->peerListRemoveRow(row);
|
||||||
|
if (_role != Role::Kicked
|
||||||
|
&& !delegate()->peerListFullRowsCount()) {
|
||||||
|
setDescriptionText(lang(lng_blocked_list_not_found));
|
||||||
|
}
|
||||||
delegate()->peerListRefreshRows();
|
delegate()->peerListRefreshRows();
|
||||||
removeKicked(user);
|
removeKicked(user);
|
||||||
}
|
}
|
||||||
|
@ -1692,8 +1716,10 @@ std::unique_ptr<PeerListRow> ParticipantsBoxController::createRow(
|
||||||
&& _additional.adminRights(user).has_value()
|
&& _additional.adminRights(user).has_value()
|
||||||
&& _additional.canEditAdmin(user)) {
|
&& _additional.canEditAdmin(user)) {
|
||||||
row->setActionLink(lang(lng_profile_kick));
|
row->setActionLink(lang(lng_profile_kick));
|
||||||
} else if (_role == Role::Kicked) {
|
} else if (_role == Role::Kicked || _role == Role::Restricted) {
|
||||||
|
if (_additional.canRestrictUser(user)) {
|
||||||
row->setActionLink(lang(lng_profile_delete_removed));
|
row->setActionLink(lang(lng_profile_delete_removed));
|
||||||
|
}
|
||||||
} else if (_role == Role::Members) {
|
} else if (_role == Role::Members) {
|
||||||
if ((chat ? chat->canBanMembers() : channel->canBanMembers())
|
if ((chat ? chat->canBanMembers() : channel->canBanMembers())
|
||||||
&& !_additional.isCreator(user)
|
&& !_additional.isCreator(user)
|
||||||
|
|
Loading…
Reference in New Issue