diff --git a/Telegram/SourceFiles/data/data_peer.cpp b/Telegram/SourceFiles/data/data_peer.cpp index 55bde8110b..ec10d0fdc8 100644 --- a/Telegram/SourceFiles/data/data_peer.cpp +++ b/Telegram/SourceFiles/data/data_peer.cpp @@ -696,7 +696,7 @@ bool PeerData::canPinMessages() const { Unexpected("Peer type in PeerData::canPinMessages."); } -bool PeerData::canCreatePolls() const { +bool PeerData::canCreatePolls(bool forbidInForums) const { if (const auto user = asUser()) { return user->isSelf() || (user->isBot() @@ -706,15 +706,16 @@ bool PeerData::canCreatePolls() const { } else if (isMonoforum()) { return false; } - return Data::CanSend(this, ChatRestriction::SendPolls); + return Data::CanSend(this, ChatRestriction::SendPolls, forbidInForums); } -bool PeerData::canCreateTodoLists() const { +bool PeerData::canCreateTodoLists(bool forbidInForums) const { if (isMonoforum() || isBroadcast()) { return false; } return session().premium() - && (Data::CanSend(this, ChatRestriction::SendPolls) || isUser()); + && (Data::CanSend(this, ChatRestriction::SendPolls, forbidInForums) + || isUser()); } bool PeerData::canCreateTopics() const { diff --git a/Telegram/SourceFiles/data/data_peer.h b/Telegram/SourceFiles/data/data_peer.h index 622569ab9a..66e5f056ef 100644 --- a/Telegram/SourceFiles/data/data_peer.h +++ b/Telegram/SourceFiles/data/data_peer.h @@ -463,8 +463,8 @@ public: [[nodiscard]] bool canPinMessages() const; [[nodiscard]] bool canEditMessagesIndefinitely() const; - [[nodiscard]] bool canCreatePolls() const; - [[nodiscard]] bool canCreateTodoLists() const; + [[nodiscard]] bool canCreatePolls(bool forbidInForums = true) const; + [[nodiscard]] bool canCreateTodoLists(bool forbidInForums = true) const; [[nodiscard]] bool canCreateTopics() const; [[nodiscard]] bool canManageTopics() const; [[nodiscard]] bool canPostStories() const; diff --git a/Telegram/SourceFiles/inline_bots/bot_attach_web_view.cpp b/Telegram/SourceFiles/inline_bots/bot_attach_web_view.cpp index 6421f7e5be..110da84d97 100644 --- a/Telegram/SourceFiles/inline_bots/bot_attach_web_view.cpp +++ b/Telegram/SourceFiles/inline_bots/bot_attach_web_view.cpp @@ -2819,13 +2819,13 @@ std::unique_ptr MakeAttachBotsMenu( | ChatRestriction::SendStickers | ChatRestriction::SendMusic | ChatRestriction::SendFiles; - if (Data::CanSendAnyOf(peer, fileTypes)) { + if (Data::CanSendAnyOf(peer, fileTypes, false)) { ++minimal; raw->addAction(tr::lng_attach_document(tr::now), [=] { attach(false); }, &st::menuIconFile); } - if (peer->canCreatePolls()) { + if (peer->canCreatePolls(false)) { ++minimal; raw->addAction(tr::lng_polls_menu_item(tr::now), [=] { const auto action = actionFactory(); @@ -2848,7 +2848,7 @@ std::unique_ptr MakeAttachBotsMenu( { sendMenuType }); }, &st::menuIconCreatePoll); } - if (peer->canCreateTodoLists()) { + if (peer->canCreateTodoLists(false)) { ++minimal; raw->addAction(tr::lng_todo_menu_item(tr::now), [=] { const auto action = actionFactory(); @@ -2871,13 +2871,13 @@ std::unique_ptr MakeAttachBotsMenu( const auto session = &controller->session(); const auto locationType = ChatRestriction::SendOther; const auto config = ResolveMapsConfig(session); - if (Data::CanSendAnyOf(peer, locationType) + if (Data::CanSendAnyOf(peer, locationType, false) && Ui::LocationPicker::Available(config)) { raw->addAction(tr::lng_maps_point(tr::now), [=] { ChooseAndSendLocation(controller, config, actionFactory()); }, &st::menuIconAddress); } - const auto addBots = Data::CanSend(peer, ChatRestriction::SendInline) + const auto addBots = Data::CanSend(peer, ChatRestriction::SendInline, false) && !peer->starsPerMessageChecked(); for (const auto &bot : bots->attachBots()) { if (!addBots