diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp index b33b92af9..dfe78d20a 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp @@ -1242,7 +1242,9 @@ void Controller::fillManageSection() { && (channel->isBroadcast() || channel->isGigagroup()); const auto hasRecentActions = isChannel && (channel->hasAdminRights() || channel->amCreator()); - const auto hasStarRef = isChannel && channel->canPostMessages(); + const auto hasStarRef = Info::BotStarRef::Join::Allowed(_peer) + && isChannel + && channel->canPostMessages(); const auto canEditStickers = isChannel && channel->canEditStickers(); const auto canDeleteChannel = isChannel && channel->canDelete(); const auto canEditColorIndex = isChannel && channel->canEditEmoji(); @@ -1730,6 +1732,10 @@ void Controller::fillBotCreditsButton() { void Controller::fillBotAffiliateProgram() { Expects(_isBot); + if (!Info::BotStarRef::Setup::Allowed(_peer)) { + return; + } + const auto user = _peer->asUser(); auto label = user->session().changes().peerFlagsValue( user, diff --git a/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp b/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp index 64b734fe6..ac9bfb055 100644 --- a/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp +++ b/Telegram/SourceFiles/info/bot/earn/info_bot_earn_list.cpp @@ -253,7 +253,7 @@ void InnerWidget::fill() { return v ? ToUsd(v, multiplier, kMinorLength) : QString(); })); } - { + if (BotStarRef::Join::Allowed(peer())) { const auto button = BotStarRef::AddViewListButton( container, tr::lng_credits_summary_earn_title(), diff --git a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_join_widget.cpp b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_join_widget.cpp index 200fbcb73..5b36457b1 100644 --- a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_join_widget.cpp +++ b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_join_widget.cpp @@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/weak_ptr.h" #include "boxes/peer_list_box.h" #include "core/click_handler_types.h" +#include "data/data_channel.h" #include "data/data_session.h" #include "data/data_user.h" #include "info/bot/starref/info_bot_starref_common.h" @@ -20,6 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/info_controller.h" #include "info/info_memento.h" #include "lang/lang_keys.h" +#include "main/main_app_config.h" #include "main/main_session.h" #include "settings/settings_common.h" #include "ui/boxes/confirm_box.h" @@ -680,6 +682,18 @@ std::unique_ptr Widget::setupTop() { return result; } +bool Allowed(not_null peer) { + if (!peer->session().appConfig().starrefJoinAllowed()) { + return false; + } else if (const auto user = peer->asUser()) { + return user->isSelf() + || (user->isBot() && user->botInfo->canEditInformation); + } else if (const auto channel = peer->asChannel()) { + return channel->isBroadcast() && channel->canPostMessages(); + } + return false; +} + std::shared_ptr Make(not_null peer) { return std::make_shared( std::vector>( diff --git a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_join_widget.h b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_join_widget.h index 6f5ff630f..e3b9c868e 100644 --- a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_join_widget.h +++ b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_join_widget.h @@ -79,6 +79,7 @@ private: }; +[[nodiscard]] bool Allowed(not_null peer); [[nodiscard]] std::shared_ptr Make(not_null peer); [[nodiscard]] object_ptr ProgramsListBox( diff --git a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_setup_widget.cpp b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_setup_widget.cpp index c589520f2..01cee27ae 100644 --- a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_setup_widget.cpp +++ b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_setup_widget.cpp @@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/info_controller.h" #include "info/info_memento.h" #include "lang/lang_keys.h" +#include "main/main_app_config.h" #include "main/main_session.h" #include "settings/settings_common.h" #include "ui/effects/premium_top_bar.h" @@ -903,6 +904,12 @@ std::unique_ptr Widget::setupBottom() { return result; } +bool Allowed(not_null peer) { + return peer->isUser() + && peer->asUser()->isBot() + && peer->session().appConfig().starrefSetupAllowed(); +} + std::shared_ptr Make(not_null peer) { return std::make_shared( std::vector>( diff --git a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_setup_widget.h b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_setup_widget.h index ebc2be754..6fd66c8ca 100644 --- a/Telegram/SourceFiles/info/bot/starref/info_bot_starref_setup_widget.h +++ b/Telegram/SourceFiles/info/bot/starref/info_bot_starref_setup_widget.h @@ -80,6 +80,7 @@ private: }; +[[nodiscard]] bool Allowed(not_null peer); [[nodiscard]] std::shared_ptr Make(not_null peer); } // namespace Info::BotStarRef::Setup diff --git a/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp b/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp index 3b578f56e..21e896bcc 100644 --- a/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp +++ b/Telegram/SourceFiles/info/channel_statistics/earn/info_channel_earn_list.cpp @@ -963,15 +963,17 @@ void InnerWidget::fill() { ) | rpl::map(creditsToUsdMap)); } - const auto button = Info::BotStarRef::AddViewListButton( - container, - tr::lng_credits_summary_earn_title(), - tr::lng_credits_summary_earn_about()); - button->setClickedCallback([=] { - _controller->showSection(Info::BotStarRef::Join::Make(_peer)); - }); - Ui::AddSkip(container); - Ui::AddDivider(container); + if (Info::BotStarRef::Join::Allowed(_peer)) { + const auto button = Info::BotStarRef::AddViewListButton( + container, + tr::lng_credits_summary_earn_title(), + tr::lng_credits_summary_earn_about()); + button->setClickedCallback([=] { + _controller->showSection(Info::BotStarRef::Join::Make(_peer)); + }); + Ui::AddSkip(container); + Ui::AddDivider(container); + } Ui::AddSkip(container); const auto sectionIndex = container->lifetime().make_state(0); diff --git a/Telegram/SourceFiles/main/main_app_config.cpp b/Telegram/SourceFiles/main/main_app_config.cpp index 424e8e0bf..8d9797a32 100644 --- a/Telegram/SourceFiles/main/main_app_config.cpp +++ b/Telegram/SourceFiles/main/main_app_config.cpp @@ -57,6 +57,14 @@ const std::vector &AppConfig::startRefPrefixes() { return _startRefPrefixes; } +bool AppConfig::starrefSetupAllowed() const { + return get(u"starref_program_allowed"_q, false); +} + +bool AppConfig::starrefJoinAllowed() const { + return get(u"starref_connect_allowed"_q, false); +} + void AppConfig::refresh(bool force) { if (_requestId || !_api) { if (force) { diff --git a/Telegram/SourceFiles/main/main_app_config.h b/Telegram/SourceFiles/main/main_app_config.h index cd0c5ae6a..55817f26e 100644 --- a/Telegram/SourceFiles/main/main_app_config.h +++ b/Telegram/SourceFiles/main/main_app_config.h @@ -67,6 +67,8 @@ public: [[nodiscard]] int stargiftConvertPeriodMax() const; [[nodiscard]] const std::vector &startRefPrefixes(); + [[nodiscard]] bool starrefSetupAllowed() const; + [[nodiscard]] bool starrefJoinAllowed() const; void refresh(bool force = false); diff --git a/Telegram/SourceFiles/settings/settings_credits.cpp b/Telegram/SourceFiles/settings/settings_credits.cpp index eb4a2435f..50f1301e4 100644 --- a/Telegram/SourceFiles/settings/settings_credits.cpp +++ b/Telegram/SourceFiles/settings/settings_credits.cpp @@ -210,13 +210,16 @@ void Credits::setupSubscriptions(not_null container) { } void Credits::setupStarRefPromo(not_null container) { + const auto self = _controller->session().user(); + if (!Info::BotStarRef::Join::Allowed(self)) { + return; + } Ui::AddSkip(container); const auto button = Info::BotStarRef::AddViewListButton( container, tr::lng_credits_summary_earn_title(), tr::lng_credits_summary_earn_about()); button->setClickedCallback([=] { - const auto self = _controller->session().user(); _controller->showSection(Info::BotStarRef::Join::Make(self)); }); Ui::AddSkip(container);