Respect appconfig starref restrictions.

This commit is contained in:
John Preston 2024-11-29 17:35:46 +04:00
parent 89058c63c8
commit a97880132a
10 changed files with 56 additions and 12 deletions

View file

@ -1242,7 +1242,9 @@ void Controller::fillManageSection() {
&& (channel->isBroadcast() || channel->isGigagroup()); && (channel->isBroadcast() || channel->isGigagroup());
const auto hasRecentActions = isChannel const auto hasRecentActions = isChannel
&& (channel->hasAdminRights() || channel->amCreator()); && (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 canEditStickers = isChannel && channel->canEditStickers();
const auto canDeleteChannel = isChannel && channel->canDelete(); const auto canDeleteChannel = isChannel && channel->canDelete();
const auto canEditColorIndex = isChannel && channel->canEditEmoji(); const auto canEditColorIndex = isChannel && channel->canEditEmoji();
@ -1730,6 +1732,10 @@ void Controller::fillBotCreditsButton() {
void Controller::fillBotAffiliateProgram() { void Controller::fillBotAffiliateProgram() {
Expects(_isBot); Expects(_isBot);
if (!Info::BotStarRef::Setup::Allowed(_peer)) {
return;
}
const auto user = _peer->asUser(); const auto user = _peer->asUser();
auto label = user->session().changes().peerFlagsValue( auto label = user->session().changes().peerFlagsValue(
user, user,

View file

@ -253,7 +253,7 @@ void InnerWidget::fill() {
return v ? ToUsd(v, multiplier, kMinorLength) : QString(); return v ? ToUsd(v, multiplier, kMinorLength) : QString();
})); }));
} }
{ if (BotStarRef::Join::Allowed(peer())) {
const auto button = BotStarRef::AddViewListButton( const auto button = BotStarRef::AddViewListButton(
container, container,
tr::lng_credits_summary_earn_title(), tr::lng_credits_summary_earn_title(),

View file

@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/weak_ptr.h" #include "base/weak_ptr.h"
#include "boxes/peer_list_box.h" #include "boxes/peer_list_box.h"
#include "core/click_handler_types.h" #include "core/click_handler_types.h"
#include "data/data_channel.h"
#include "data/data_session.h" #include "data/data_session.h"
#include "data/data_user.h" #include "data/data_user.h"
#include "info/bot/starref/info_bot_starref_common.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_controller.h"
#include "info/info_memento.h" #include "info/info_memento.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "main/main_app_config.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "settings/settings_common.h" #include "settings/settings_common.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
@ -680,6 +682,18 @@ std::unique_ptr<Ui::Premium::TopBarAbstract> Widget::setupTop() {
return result; return result;
} }
bool Allowed(not_null<PeerData*> 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<Info::Memento> Make(not_null<PeerData*> peer) { std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer) {
return std::make_shared<Info::Memento>( return std::make_shared<Info::Memento>(
std::vector<std::shared_ptr<ContentMemento>>( std::vector<std::shared_ptr<ContentMemento>>(

View file

@ -79,6 +79,7 @@ private:
}; };
[[nodiscard]] bool Allowed(not_null<PeerData*> peer);
[[nodiscard]] std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer); [[nodiscard]] std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer);
[[nodiscard]] object_ptr<Ui::BoxContent> ProgramsListBox( [[nodiscard]] object_ptr<Ui::BoxContent> ProgramsListBox(

View file

@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "info/info_controller.h" #include "info/info_controller.h"
#include "info/info_memento.h" #include "info/info_memento.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "main/main_app_config.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "settings/settings_common.h" #include "settings/settings_common.h"
#include "ui/effects/premium_top_bar.h" #include "ui/effects/premium_top_bar.h"
@ -903,6 +904,12 @@ std::unique_ptr<Ui::RpWidget> Widget::setupBottom() {
return result; return result;
} }
bool Allowed(not_null<PeerData*> peer) {
return peer->isUser()
&& peer->asUser()->isBot()
&& peer->session().appConfig().starrefSetupAllowed();
}
std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer) { std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer) {
return std::make_shared<Info::Memento>( return std::make_shared<Info::Memento>(
std::vector<std::shared_ptr<ContentMemento>>( std::vector<std::shared_ptr<ContentMemento>>(

View file

@ -80,6 +80,7 @@ private:
}; };
[[nodiscard]] bool Allowed(not_null<PeerData*> peer);
[[nodiscard]] std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer); [[nodiscard]] std::shared_ptr<Info::Memento> Make(not_null<PeerData*> peer);
} // namespace Info::BotStarRef::Setup } // namespace Info::BotStarRef::Setup

View file

@ -963,15 +963,17 @@ void InnerWidget::fill() {
) | rpl::map(creditsToUsdMap)); ) | rpl::map(creditsToUsdMap));
} }
const auto button = Info::BotStarRef::AddViewListButton( if (Info::BotStarRef::Join::Allowed(_peer)) {
container, const auto button = Info::BotStarRef::AddViewListButton(
tr::lng_credits_summary_earn_title(), container,
tr::lng_credits_summary_earn_about()); tr::lng_credits_summary_earn_title(),
button->setClickedCallback([=] { tr::lng_credits_summary_earn_about());
_controller->showSection(Info::BotStarRef::Join::Make(_peer)); button->setClickedCallback([=] {
}); _controller->showSection(Info::BotStarRef::Join::Make(_peer));
Ui::AddSkip(container); });
Ui::AddDivider(container); Ui::AddSkip(container);
Ui::AddDivider(container);
}
Ui::AddSkip(container); Ui::AddSkip(container);
const auto sectionIndex = container->lifetime().make_state<int>(0); const auto sectionIndex = container->lifetime().make_state<int>(0);

View file

@ -57,6 +57,14 @@ const std::vector<QString> &AppConfig::startRefPrefixes() {
return _startRefPrefixes; return _startRefPrefixes;
} }
bool AppConfig::starrefSetupAllowed() const {
return get<bool>(u"starref_program_allowed"_q, false);
}
bool AppConfig::starrefJoinAllowed() const {
return get<bool>(u"starref_connect_allowed"_q, false);
}
void AppConfig::refresh(bool force) { void AppConfig::refresh(bool force) {
if (_requestId || !_api) { if (_requestId || !_api) {
if (force) { if (force) {

View file

@ -67,6 +67,8 @@ public:
[[nodiscard]] int stargiftConvertPeriodMax() const; [[nodiscard]] int stargiftConvertPeriodMax() const;
[[nodiscard]] const std::vector<QString> &startRefPrefixes(); [[nodiscard]] const std::vector<QString> &startRefPrefixes();
[[nodiscard]] bool starrefSetupAllowed() const;
[[nodiscard]] bool starrefJoinAllowed() const;
void refresh(bool force = false); void refresh(bool force = false);

View file

@ -210,13 +210,16 @@ void Credits::setupSubscriptions(not_null<Ui::VerticalLayout*> container) {
} }
void Credits::setupStarRefPromo(not_null<Ui::VerticalLayout*> container) { void Credits::setupStarRefPromo(not_null<Ui::VerticalLayout*> container) {
const auto self = _controller->session().user();
if (!Info::BotStarRef::Join::Allowed(self)) {
return;
}
Ui::AddSkip(container); Ui::AddSkip(container);
const auto button = Info::BotStarRef::AddViewListButton( const auto button = Info::BotStarRef::AddViewListButton(
container, container,
tr::lng_credits_summary_earn_title(), tr::lng_credits_summary_earn_title(),
tr::lng_credits_summary_earn_about()); tr::lng_credits_summary_earn_about());
button->setClickedCallback([=] { button->setClickedCallback([=] {
const auto self = _controller->session().user();
_controller->showSection(Info::BotStarRef::Join::Make(self)); _controller->showSection(Info::BotStarRef::Join::Make(self));
}); });
Ui::AddSkip(container); Ui::AddSkip(container);