From 29dd574e22c32f6eeca2be17949306b27e923b51 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 9 Apr 2024 11:55:38 +0400 Subject: [PATCH] Fix toggling chatbot replying, fix saving. --- .../data/business/data_business_chatbots.cpp | 6 ++++-- .../SourceFiles/data/business/data_business_common.cpp | 7 +++++++ .../SourceFiles/data/business/data_business_common.h | 3 +++ .../history/view/history_view_contact_status.cpp | 10 +++++----- .../settings/business/settings_away_message.cpp | 2 +- .../settings/business/settings_chatbots.cpp | 2 +- .../settings/business/settings_greeting.cpp | 2 +- 7 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Telegram/SourceFiles/data/business/data_business_chatbots.cpp b/Telegram/SourceFiles/data/business/data_business_chatbots.cpp index dd95482db..ca894acf5 100644 --- a/Telegram/SourceFiles/data/business/data_business_chatbots.cpp +++ b/Telegram/SourceFiles/data/business/data_business_chatbots.cpp @@ -125,8 +125,10 @@ void Chatbots::togglePaused(not_null peer, bool paused) { return; } else if (const auto settings = peer->barSettings()) { peer->setBarSettings(paused - ? (*settings | PeerBarSetting::BusinessBotPaused) - : (*settings & ~PeerBarSetting::BusinessBotPaused)); + ? ((*settings | PeerBarSetting::BusinessBotPaused) + & ~PeerBarSetting::BusinessBotCanReply) + : ((*settings & ~PeerBarSetting::BusinessBotPaused) + | PeerBarSetting::BusinessBotCanReply)); } else { api->requestPeerSettings(peer); } diff --git a/Telegram/SourceFiles/data/business/data_business_common.cpp b/Telegram/SourceFiles/data/business/data_business_common.cpp index 52c545bc4..149a3ee13 100644 --- a/Telegram/SourceFiles/data/business/data_business_common.cpp +++ b/Telegram/SourceFiles/data/business/data_business_common.cpp @@ -71,6 +71,13 @@ auto RecipientsFlags(const BusinessRecipients &data) { } // namespace +BusinessRecipients BusinessRecipients::MakeValid(BusinessRecipients value) { + if (value.included.empty()) { + value.allButExcluded = true; + } + return value; +} + MTPInputBusinessRecipients ForMessagesToMTP(const BusinessRecipients &data) { using Flag = MTPDinputBusinessRecipients::Flag; const auto &chats = data.allButExcluded ? data.excluded : data.included; diff --git a/Telegram/SourceFiles/data/business/data_business_common.h b/Telegram/SourceFiles/data/business/data_business_common.h index d6f4121a6..600d5ff79 100644 --- a/Telegram/SourceFiles/data/business/data_business_common.h +++ b/Telegram/SourceFiles/data/business/data_business_common.h @@ -44,6 +44,9 @@ struct BusinessRecipients { BusinessChats excluded; bool allButExcluded = false; + [[nodiscard]] static BusinessRecipients MakeValid( + BusinessRecipients value); + friend inline bool operator==( const BusinessRecipients &a, const BusinessRecipients &b) = default; diff --git a/Telegram/SourceFiles/history/view/history_view_contact_status.cpp b/Telegram/SourceFiles/history/view/history_view_contact_status.cpp index 858b89fbc..524719f92 100644 --- a/Telegram/SourceFiles/history/view/history_view_contact_status.cpp +++ b/Telegram/SourceFiles/history/view/history_view_contact_status.cpp @@ -902,15 +902,15 @@ void BusinessBotStatus::Bar::showState(State state) { _userpic->setAttribute(Qt::WA_TransparentForMouseEvents); _userpic->show(); _name->setText(state.bot->name()); - _status->setText(!state.canReply - ? tr::lng_chatbot_status_views(tr::now) - : state.paused + _status->setText(state.paused ? tr::lng_chatbot_status_paused(tr::now) - : tr::lng_chatbot_status_can_reply(tr::now)); + : state.canReply + ? tr::lng_chatbot_status_can_reply(tr::now) + : tr::lng_chatbot_status_views(tr::now)); _togglePaused->setText(state.paused ? tr::lng_chatbot_button_resume() : tr::lng_chatbot_button_pause()); - _togglePaused->setVisible(state.canReply); + _togglePaused->setVisible(state.canReply || state.paused); _paused = state.paused; resizeToWidth(width()); } diff --git a/Telegram/SourceFiles/settings/business/settings_away_message.cpp b/Telegram/SourceFiles/settings/business/settings_away_message.cpp index afaeb3a2b..58f3a6165 100644 --- a/Telegram/SourceFiles/settings/business/settings_away_message.cpp +++ b/Telegram/SourceFiles/settings/business/settings_away_message.cpp @@ -220,7 +220,7 @@ void AwayMessage::setupContent( _recipients = disabled ? Data::BusinessRecipients{ .allButExcluded = true } - : current.recipients; + : Data::BusinessRecipients::MakeValid(current.recipients); auto initialSchedule = disabled ? AwaySchedule{ .type = AwayScheduleType::Always, } : current.schedule; diff --git a/Telegram/SourceFiles/settings/business/settings_chatbots.cpp b/Telegram/SourceFiles/settings/business/settings_chatbots.cpp index d31239e19..3c75cf9ba 100644 --- a/Telegram/SourceFiles/settings/business/settings_chatbots.cpp +++ b/Telegram/SourceFiles/settings/business/settings_chatbots.cpp @@ -408,7 +408,7 @@ void Chatbots::setupContent( const auto content = Ui::CreateChild(this); const auto current = controller->session().data().chatbots().current(); - _recipients = current.recipients; + _recipients = Data::BusinessRecipients::MakeValid(current.recipients); _repliesAllowed = current.repliesAllowed; AddDividerTextWithLottie(content, { diff --git a/Telegram/SourceFiles/settings/business/settings_greeting.cpp b/Telegram/SourceFiles/settings/business/settings_greeting.cpp index 052e97a39..8437acc7c 100644 --- a/Telegram/SourceFiles/settings/business/settings_greeting.cpp +++ b/Telegram/SourceFiles/settings/business/settings_greeting.cpp @@ -125,7 +125,7 @@ void Greeting::setupContent( _recipients = disabled ? Data::BusinessRecipients{ .allButExcluded = true } - : current.recipients; + : Data::BusinessRecipients::MakeValid(current.recipients); _noActivityDays = disabled ? kDefaultNoActivityDays : current.noActivityDays;