From 4c8ff1c7ec34b84f6150a6885476d1c6ea8818fb Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 27 May 2025 18:41:30 +0400 Subject: [PATCH] Disable polls in monoforums, enable in Saved Messages. --- .../SourceFiles/data/data_chat_participant_status.cpp | 6 ++++++ Telegram/SourceFiles/data/data_peer.cpp | 9 +++++---- Telegram/SourceFiles/data/data_peer_values.cpp | 6 ++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Telegram/SourceFiles/data/data_chat_participant_status.cpp b/Telegram/SourceFiles/data/data_chat_participant_status.cpp index 2a85f44d13..b3e318d076 100644 --- a/Telegram/SourceFiles/data/data_chat_participant_status.cpp +++ b/Telegram/SourceFiles/data/data_chat_participant_status.cpp @@ -156,6 +156,12 @@ bool CanSendAnyOf( } return false; } else if (const auto channel = peer->asChannel()) { + if (channel->isMonoforum()) { + rights &= ~ChatRestriction::SendPolls; + if (!rights) { + return false; + } + } using Flag = ChannelDataFlag; const auto allowed = channel->amIn() || ((channel->flags() & Flag::HasLink) diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index 44a805e764..1f8e0ad696 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -663,10 +663,11 @@ bool PeerData::canPinMessages() const { bool PeerData::canCreatePolls() const { if (const auto user = asUser()) { - return user->isBot() - && !user->isSupport() - && !user->isRepliesChat() - && !user->isVerifyCodes(); + return user->isSelf() + || (user->isBot() + && !user->isSupport() + && !user->isRepliesChat() + && !user->isVerifyCodes()); } return Data::CanSend(this, ChatRestriction::SendPolls); } diff --git a/Telegram/SourceFiles/data/data_peer_values.cpp b/Telegram/SourceFiles/data/data_peer_values.cpp index 0c435d5347..1d65c3b2ec 100644 --- a/Telegram/SourceFiles/data/data_peer_values.cpp +++ b/Telegram/SourceFiles/data/data_peer_values.cpp @@ -274,6 +274,12 @@ inline auto DefaultRestrictionValue( | Flag::Forbidden | Flag::Creator | Flag::Broadcast; + if (channel->isMonoforum()) { + rights &= ~ChatRestriction::SendPolls; + if (!rights) { + return rpl::single(false); + } + } return rpl::combine( PeerFlagsValue(channel, mask), AdminRightValue(