From 646b8527179f2397253b02caf2b849dbbd24f88b Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 22 May 2025 13:12:59 +0400 Subject: [PATCH] Correct rights check in monoforums. --- Telegram/SourceFiles/data/data_channel.cpp | 9 ++++++--- Telegram/SourceFiles/data/data_channel.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/data/data_channel.cpp b/Telegram/SourceFiles/data/data_channel.cpp index 9250df02a9..51f77db85e 100644 --- a/Telegram/SourceFiles/data/data_channel.cpp +++ b/Telegram/SourceFiles/data/data_channel.cpp @@ -343,7 +343,7 @@ void ChannelData::setMonoforumLink(ChannelData *link) { _monoforumLink = link; link->setMonoforumLink(this); session().changes().peerUpdated(this, UpdateFlag::MonoforumLink); - if (isMegagroup() && (link->amCreator() || link->hasAdminRights())) { + if (isMegagroup() && link->canAccessMonoforum()) { setFlags(flags() | Flag::MonoforumAdmin); } } @@ -656,6 +656,10 @@ bool ChannelData::canDeleteStories() const { || (adminRights() & AdminRight::DeleteStories); } +bool ChannelData::canAccessMonoforum() const { + return canPostMessages(); +} + bool ChannelData::canPostPaidMedia() const { return canPostMessages() && (flags() & Flag::PaidMediaAllowed); } @@ -836,9 +840,8 @@ void ChannelData::setAdminRights(ChatAdminRights rights) { UpdateFlag::Rights | UpdateFlag::Admins | UpdateFlag::BannedUsers); if (isBroadcast() && _monoforumLink) { const auto flags = _monoforumLink->flags(); - const auto admin = (amCreator() || hasAdminRights()); _monoforumLink->setFlags((flags & ~Flag::MonoforumAdmin) - | (admin ? Flag::MonoforumAdmin : Flag())); + | (canAccessMonoforum() ? Flag::MonoforumAdmin : Flag())); } } diff --git a/Telegram/SourceFiles/data/data_channel.h b/Telegram/SourceFiles/data/data_channel.h index 21cbaafd0d..b0362f1d8c 100644 --- a/Telegram/SourceFiles/data/data_channel.h +++ b/Telegram/SourceFiles/data/data_channel.h @@ -396,6 +396,7 @@ public: [[nodiscard]] bool canEditStories() const; [[nodiscard]] bool canDeleteStories() const; [[nodiscard]] bool canPostPaidMedia() const; + [[nodiscard]] bool canAccessMonoforum() const; [[nodiscard]] bool hiddenPreHistory() const; [[nodiscard]] bool canViewMembers() const; [[nodiscard]] bool canViewAdmins() const;