Скрытие кнопки партнерки через env

This commit is contained in:
gy9vin
2025-10-13 23:00:06 +03:00
parent 66e56c68cb
commit a320de1cbb
6 changed files with 83 additions and 19 deletions
+1
View File
@@ -136,6 +136,7 @@ TRAFFIC_PACKAGES_CONFIG="5:2000:false,10:3500:false,25:7000:false,50:11000:true,
PRICE_PER_DEVICE=5000
# ===== РЕФЕРАЛЬНАЯ СИСТЕМА =====
REFERRAL_PROGRAM_ENABLED=true
REFERRAL_MINIMUM_TOPUP_KOPEKS=10000
REFERRAL_FIRST_TOPUP_BONUS_KOPEKS=10000
REFERRAL_INVITER_BONUS_KOPEKS=10000
+5
View File
@@ -134,6 +134,7 @@ class Settings(BaseSettings):
REFERRAL_INVITER_BONUS_KOPEKS: int = 10000
REFERRAL_COMMISSION_PERCENT: int = 25
REFERRAL_PROGRAM_ENABLED: bool = True
REFERRAL_NOTIFICATIONS_ENABLED: bool = True
REFERRAL_NOTIFICATION_RETRY_ATTEMPTS: int = 3
REFERRED_USER_REWARD: int = 0
@@ -950,6 +951,7 @@ class Settings(BaseSettings):
referred_reward_kopeks = self.get_referred_user_reward_kopeks()
return {
"program_enabled": self.is_referral_program_enabled(),
"minimum_topup_kopeks": self.REFERRAL_MINIMUM_TOPUP_KOPEKS,
"first_topup_bonus_kopeks": self.REFERRAL_FIRST_TOPUP_BONUS_KOPEKS,
"inviter_bonus_kopeks": self.REFERRAL_INVITER_BONUS_KOPEKS,
@@ -959,6 +961,9 @@ class Settings(BaseSettings):
"referred_user_reward_kopeks": referred_reward_kopeks,
}
def is_referral_program_enabled(self) -> bool:
return bool(self.REFERRAL_PROGRAM_ENABLED)
def is_referral_notifications_enabled(self) -> bool:
return self.REFERRAL_NOTIFICATIONS_ENABLED
+11 -5
View File
@@ -356,12 +356,18 @@ def get_main_menu_keyboard(
if isinstance(button, InlineKeyboardButton):
keyboard.append([button])
keyboard.extend([
[
InlineKeyboardButton(text=texts.MENU_PROMOCODE, callback_data="menu_promocode"),
InlineKeyboardButton(text=texts.MENU_REFERRALS, callback_data="menu_referrals")
# Добавляем кнопки промокода и рефералов, учитывая настройки
additional_buttons = [
InlineKeyboardButton(text=texts.MENU_PROMOCODE, callback_data="menu_promocode")
]
])
# Добавляем кнопку рефералов только если программа включена
if settings.is_referral_program_enabled():
additional_buttons.append(
InlineKeyboardButton(text=texts.MENU_REFERRALS, callback_data="menu_referrals")
)
keyboard.append(additional_buttons)
# Support button is configurable (runtime via service)
try:
+18 -9
View File
@@ -2,26 +2,35 @@ from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, ReplyKeyboardRemo
from typing import List
from app.localization.texts import get_texts
from app.config import settings
def get_main_reply_keyboard(language: str = "ru") -> ReplyKeyboardMarkup:
texts = get_texts(language)
return ReplyKeyboardMarkup(
keyboard = [
[
KeyboardButton(text=texts.MENU_BALANCE),
KeyboardButton(text=texts.MENU_SUBSCRIPTION)
],
[
KeyboardButton(text=texts.MENU_PROMOCODE),
KeyboardButton(text=texts.MENU_REFERRALS)
],
[
]
]
# Добавляем кнопки промокода и рефералов, учитывая настройки
second_row = [KeyboardButton(text=texts.MENU_PROMOCODE)]
# Добавляем кнопку рефералов только если программа включена
if settings.is_referral_program_enabled():
second_row.append(KeyboardButton(text=texts.MENU_REFERRALS))
keyboard.append(second_row)
keyboard.append([
KeyboardButton(text=texts.MENU_SUPPORT),
KeyboardButton(text=texts.MENU_RULES)
]
],
])
return ReplyKeyboardMarkup(
keyboard=keyboard,
resize_keyboard=True,
one_time_keyboard=False
)
+14
View File
@@ -14,6 +14,7 @@ from app.database.models import (
MainMenuButtonActionType,
MainMenuButtonVisibility,
)
from app.config import settings
@dataclass(frozen=True)
@@ -105,6 +106,19 @@ class MainMenuButtonService:
if item.visibility == MainMenuButtonVisibility.SUBSCRIBERS and not has_subscription:
continue
# Проверка реферальной программы: скрыть кнопки, связанные с рефералами, если программа отключена
if (
not settings.is_referral_program_enabled()
and (
"partner" in item.text.lower()
or "referr" in item.text.lower()
or "партнер" in item.text.lower()
or "реферал" in item.text.lower()
or "referral" in item.action_value.lower()
)
):
continue
button = cls._build_button(item)
if button:
buttons.append(button)
+29
View File
@@ -0,0 +1,29 @@
# Включение/отключение реферальной программы
## Описание
Добавлена возможность включать и отключать реферальную программу (партнерку) через переменную окружения.
## Настройка
В файле `.env` установите значение переменной:
- `REFERRAL_PROGRAM_ENABLED=true` - реферальная программа включена
- `REFERRAL_PROGRAM_ENABLED=false` - реферальная программа отключена
## Поведение
- При отключенной программе кнопки "Партнерка", "Рефералы" и другие связанные элементы скрываются из главного меню бота
- Обычные (не реферальные) кнопки продолжают отображаться независимо от настройки
- Административные функции реферальной программы остаются доступными в админ-панели для управления
- Настройка также учитывается в API и других сервисах, использующих информацию о реферальной программе
## Примеры скрываемых элементов
- Кнопка "🤝 Партнерка" в главном меню
- Кнопка "👥 Мои рефералы"
- Кнопка "🤝 Referral program" (английская версия)
- Другие элементы, содержащие слова "partner", "referr", "партнер", "реферал"
## Технические детали
- Новая переменная `REFERRAL_PROGRAM_ENABLED` добавлена в `app/config.py`
- Метод `is_referral_program_enabled()` проверяет состояние настройки
- Функция `get_main_menu_keyboard` в `app/keyboards/inline.py` скрывает кнопку "Партнерка" при отключенной программе
- Сервис `MainMenuButtonService` в `app/services/main_menu_button_service.py` скрывает дополнительные кнопки, связанные с рефералами
- Обновлен файл `.env.example` с новой настройкой