Suggest all send options in topics.

This commit is contained in:
John Preston
2026-05-26 13:05:26 +04:00
parent edef400f30
commit 436f929e79
3 changed files with 12 additions and 11 deletions
+5 -4
View File
@@ -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 {
+2 -2
View File
@@ -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;
@@ -2819,13 +2819,13 @@ std::unique_ptr<Ui::DropdownMenu> 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<Ui::DropdownMenu> 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<Ui::DropdownMenu> 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