diff --git a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp index 114918feb..fb1a84375 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participants_box.cpp @@ -354,6 +354,16 @@ bool ParticipantsAdditionalData::canRestrictUser( Unexpected("Peer in ParticipantsAdditionalData::canRestrictUser."); } +bool ParticipantsAdditionalData::canRemoveUser( + not_null user) const { + if (canRestrictUser(user)) { + return true; + } else if (const auto chat = _peer->asChat()) { + return chat->invitedByMe.contains(user); + } + return false; +} + auto ParticipantsAdditionalData::adminRights( not_null user) const -> std::optional { @@ -1436,6 +1446,8 @@ base::unique_qptr ParticipantsBoxController::rowContextMenu( tr::lng_context_restrict_user(tr::now), crl::guard(this, [=] { showRestricted(user); })); } + } + if (_additional.canRemoveUser(user)) { if (!_additional.isKicked(user)) { const auto isGroup = _peer->isChat() || _peer->isMegagroup(); result->addAction( @@ -1806,7 +1818,7 @@ auto ParticipantsBoxController::computeType( : _additional.adminRights(user).has_value() ? Rights::Admin : Rights::Normal; - result.canRemove = _additional.canRestrictUser(user); + result.canRemove = _additional.canRemoveUser(user); return result; } diff --git a/Telegram/SourceFiles/boxes/peers/edit_participants_box.h b/Telegram/SourceFiles/boxes/peers/edit_participants_box.h index fd36c97ce..5c439f198 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participants_box.h +++ b/Telegram/SourceFiles/boxes/peers/edit_participants_box.h @@ -88,6 +88,7 @@ public: [[nodiscard]] bool canEditAdmin(not_null user) const; [[nodiscard]] bool canAddOrEditAdmin(not_null user) const; [[nodiscard]] bool canRestrictUser(not_null user) const; + [[nodiscard]] bool canRemoveUser(not_null user) const; [[nodiscard]] std::optional adminRights( not_null user) const; QString adminRank(not_null user) const;