diff --git a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp index 8bba3824a9..1e6ef8012a 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_participant_box.cpp @@ -212,7 +212,9 @@ void EditAdminBox::prepare() { const auto chat = peer()->asChat(); const auto channel = peer()->asChannel(); const auto prepareRights = hadRights ? _oldRights : Defaults(peer()); - const auto disabledByDefaults = DisabledByDefaultRestrictions(peer()); + const auto disabledByDefaults = (channel && !channel->isMegagroup()) + ? MTPDchatAdminRights::Flags(0) + : DisabledByDefaultRestrictions(peer()); const auto filterByMyRights = canSave() && !hadRights && channel diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index 1462ed3b5f..151746057d 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -350,16 +350,12 @@ bool PeerData::canPinMessages() const { if (const auto user = asUser()) { return user->fullFlags() & MTPDuserFull::Flag::f_can_pin_message; } else if (const auto chat = asChat()) { - return chat->amIn() - && ((chat->adminRights() & ChatAdminRight::f_pin_messages) - || chat->amCreator()); + return chat->amIn() && !chat->amRestricted(ChatRestriction::f_pin_messages); } else if (const auto channel = asChannel()) { - if (channel->isMegagroup()) { - return (channel->adminRights() & ChatAdminRight::f_pin_messages) - || channel->amCreator(); - } - return (channel->adminRights() & ChatAdminRight::f_edit_messages) - || channel->amCreator(); + return channel->isMegagroup() + ? !channel->amRestricted(ChatRestriction::f_pin_messages) + : ((channel->adminRights() & ChatAdminRight::f_edit_messages) + || channel->amCreator()); } Unexpected("Peer type in PeerData::canPinMessages."); } @@ -613,9 +609,13 @@ Data::RestrictionCheckResult PeerData::amRestricted( } }; if (const auto channel = asChannel()) { + const auto defaultRestrictions = channel->defaultRestrictions() + | (channel->isPublic() + ? (ChatRestriction::f_pin_messages | ChatRestriction::f_change_info) + : ChatRestrictions(0)); return (channel->amCreator() || allowByAdminRights(right, channel)) ? Result::Allowed() - : (channel->defaultRestrictions() & right) + : (defaultRestrictions & right) ? Result::WithEveryone() : (channel->restrictions() & right) ? Result::Explicit()