Скрытие кнопки партнерки через 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
|
PRICE_PER_DEVICE=5000
|
||||||
|
|
||||||
# ===== РЕФЕРАЛЬНАЯ СИСТЕМА =====
|
# ===== РЕФЕРАЛЬНАЯ СИСТЕМА =====
|
||||||
|
REFERRAL_PROGRAM_ENABLED=true
|
||||||
REFERRAL_MINIMUM_TOPUP_KOPEKS=10000
|
REFERRAL_MINIMUM_TOPUP_KOPEKS=10000
|
||||||
REFERRAL_FIRST_TOPUP_BONUS_KOPEKS=10000
|
REFERRAL_FIRST_TOPUP_BONUS_KOPEKS=10000
|
||||||
REFERRAL_INVITER_BONUS_KOPEKS=10000
|
REFERRAL_INVITER_BONUS_KOPEKS=10000
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ class Settings(BaseSettings):
|
|||||||
REFERRAL_INVITER_BONUS_KOPEKS: int = 10000
|
REFERRAL_INVITER_BONUS_KOPEKS: int = 10000
|
||||||
REFERRAL_COMMISSION_PERCENT: int = 25
|
REFERRAL_COMMISSION_PERCENT: int = 25
|
||||||
|
|
||||||
|
REFERRAL_PROGRAM_ENABLED: bool = True
|
||||||
REFERRAL_NOTIFICATIONS_ENABLED: bool = True
|
REFERRAL_NOTIFICATIONS_ENABLED: bool = True
|
||||||
REFERRAL_NOTIFICATION_RETRY_ATTEMPTS: int = 3
|
REFERRAL_NOTIFICATION_RETRY_ATTEMPTS: int = 3
|
||||||
REFERRED_USER_REWARD: int = 0
|
REFERRED_USER_REWARD: int = 0
|
||||||
@@ -950,6 +951,7 @@ class Settings(BaseSettings):
|
|||||||
referred_reward_kopeks = self.get_referred_user_reward_kopeks()
|
referred_reward_kopeks = self.get_referred_user_reward_kopeks()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
"program_enabled": self.is_referral_program_enabled(),
|
||||||
"minimum_topup_kopeks": self.REFERRAL_MINIMUM_TOPUP_KOPEKS,
|
"minimum_topup_kopeks": self.REFERRAL_MINIMUM_TOPUP_KOPEKS,
|
||||||
"first_topup_bonus_kopeks": self.REFERRAL_FIRST_TOPUP_BONUS_KOPEKS,
|
"first_topup_bonus_kopeks": self.REFERRAL_FIRST_TOPUP_BONUS_KOPEKS,
|
||||||
"inviter_bonus_kopeks": self.REFERRAL_INVITER_BONUS_KOPEKS,
|
"inviter_bonus_kopeks": self.REFERRAL_INVITER_BONUS_KOPEKS,
|
||||||
@@ -959,6 +961,9 @@ class Settings(BaseSettings):
|
|||||||
"referred_user_reward_kopeks": referred_reward_kopeks,
|
"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:
|
def is_referral_notifications_enabled(self) -> bool:
|
||||||
return self.REFERRAL_NOTIFICATIONS_ENABLED
|
return self.REFERRAL_NOTIFICATIONS_ENABLED
|
||||||
|
|
||||||
|
|||||||
+11
-5
@@ -356,12 +356,18 @@ def get_main_menu_keyboard(
|
|||||||
if isinstance(button, InlineKeyboardButton):
|
if isinstance(button, InlineKeyboardButton):
|
||||||
keyboard.append([button])
|
keyboard.append([button])
|
||||||
|
|
||||||
keyboard.extend([
|
# Добавляем кнопки промокода и рефералов, учитывая настройки
|
||||||
[
|
additional_buttons = [
|
||||||
InlineKeyboardButton(text=texts.MENU_PROMOCODE, callback_data="menu_promocode"),
|
InlineKeyboardButton(text=texts.MENU_PROMOCODE, callback_data="menu_promocode")
|
||||||
InlineKeyboardButton(text=texts.MENU_REFERRALS, callback_data="menu_referrals")
|
|
||||||
]
|
]
|
||||||
])
|
|
||||||
|
# Добавляем кнопку рефералов только если программа включена
|
||||||
|
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)
|
# Support button is configurable (runtime via service)
|
||||||
try:
|
try:
|
||||||
|
|||||||
+19
-10
@@ -2,26 +2,35 @@ from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, ReplyKeyboardRemo
|
|||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from app.localization.texts import get_texts
|
from app.localization.texts import get_texts
|
||||||
|
from app.config import settings
|
||||||
|
|
||||||
|
|
||||||
def get_main_reply_keyboard(language: str = "ru") -> ReplyKeyboardMarkup:
|
def get_main_reply_keyboard(language: str = "ru") -> ReplyKeyboardMarkup:
|
||||||
texts = get_texts(language)
|
texts = get_texts(language)
|
||||||
|
|
||||||
return ReplyKeyboardMarkup(
|
keyboard = [
|
||||||
keyboard=[
|
|
||||||
[
|
[
|
||||||
KeyboardButton(text=texts.MENU_BALANCE),
|
KeyboardButton(text=texts.MENU_BALANCE),
|
||||||
KeyboardButton(text=texts.MENU_SUBSCRIPTION)
|
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_SUPPORT),
|
||||||
KeyboardButton(text=texts.MENU_RULES)
|
KeyboardButton(text=texts.MENU_RULES)
|
||||||
]
|
])
|
||||||
],
|
|
||||||
|
return ReplyKeyboardMarkup(
|
||||||
|
keyboard=keyboard,
|
||||||
resize_keyboard=True,
|
resize_keyboard=True,
|
||||||
one_time_keyboard=False
|
one_time_keyboard=False
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from app.database.models import (
|
|||||||
MainMenuButtonActionType,
|
MainMenuButtonActionType,
|
||||||
MainMenuButtonVisibility,
|
MainMenuButtonVisibility,
|
||||||
)
|
)
|
||||||
|
from app.config import settings
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
@@ -105,6 +106,19 @@ class MainMenuButtonService:
|
|||||||
if item.visibility == MainMenuButtonVisibility.SUBSCRIBERS and not has_subscription:
|
if item.visibility == MainMenuButtonVisibility.SUBSCRIBERS and not has_subscription:
|
||||||
continue
|
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)
|
button = cls._build_button(item)
|
||||||
if button:
|
if button:
|
||||||
buttons.append(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