Скрытие кнопки партнерки через env
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
+19
-10
@@ -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=[
|
||||
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,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)
|
||||
|
||||
@@ -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` с новой настройкой
|
||||
Reference in New Issue
Block a user