mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-01-19 19:32:10 +00:00
Add toggle for support top-ups
This commit is contained in:
@@ -253,6 +253,8 @@ YOOKASSA_QUICK_AMOUNT_SELECTION_ENABLED=true
|
|||||||
|
|
||||||
# Отключить отображение кнопок выбора суммы пополнения (оставить только ввод вручную)
|
# Отключить отображение кнопок выбора суммы пополнения (оставить только ввод вручную)
|
||||||
DISABLE_TOPUP_BUTTONS=false
|
DISABLE_TOPUP_BUTTONS=false
|
||||||
|
# Отключить пополнение баланса через поддержку
|
||||||
|
SUPPORT_TOPUP_ENABLED=true
|
||||||
|
|
||||||
# Автоматическая проверка зависших пополнений и повторные обращения к провайдерам
|
# Автоматическая проверка зависших пополнений и повторные обращения к провайдерам
|
||||||
PAYMENT_VERIFICATION_AUTO_CHECK_ENABLED=false
|
PAYMENT_VERIFICATION_AUTO_CHECK_ENABLED=false
|
||||||
|
|||||||
@@ -194,6 +194,7 @@ class Settings(BaseSettings):
|
|||||||
YOOKASSA_MAX_AMOUNT_KOPEKS: int = 1000000
|
YOOKASSA_MAX_AMOUNT_KOPEKS: int = 1000000
|
||||||
YOOKASSA_QUICK_AMOUNT_SELECTION_ENABLED: bool = False
|
YOOKASSA_QUICK_AMOUNT_SELECTION_ENABLED: bool = False
|
||||||
DISABLE_TOPUP_BUTTONS: bool = False
|
DISABLE_TOPUP_BUTTONS: bool = False
|
||||||
|
SUPPORT_TOPUP_ENABLED: bool = True
|
||||||
PAYMENT_VERIFICATION_AUTO_CHECK_ENABLED: bool = False
|
PAYMENT_VERIFICATION_AUTO_CHECK_ENABLED: bool = False
|
||||||
PAYMENT_VERIFICATION_AUTO_CHECK_INTERVAL_MINUTES: int = 10
|
PAYMENT_VERIFICATION_AUTO_CHECK_INTERVAL_MINUTES: int = 10
|
||||||
|
|
||||||
@@ -931,9 +932,12 @@ class Settings(BaseSettings):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
def is_yookassa_enabled(self) -> bool:
|
def is_yookassa_enabled(self) -> bool:
|
||||||
return (self.YOOKASSA_ENABLED and
|
return (self.YOOKASSA_ENABLED and
|
||||||
self.YOOKASSA_SHOP_ID is not None and
|
self.YOOKASSA_SHOP_ID is not None and
|
||||||
self.YOOKASSA_SECRET_KEY is not None)
|
self.YOOKASSA_SECRET_KEY is not None)
|
||||||
|
|
||||||
|
def is_support_topup_enabled(self) -> bool:
|
||||||
|
return bool(self.SUPPORT_TOPUP_ENABLED)
|
||||||
|
|
||||||
def get_yookassa_return_url(self) -> str:
|
def get_yookassa_return_url(self) -> str:
|
||||||
if self.YOOKASSA_RETURN_URL:
|
if self.YOOKASSA_RETURN_URL:
|
||||||
|
|||||||
@@ -421,7 +421,17 @@ async def request_support_topup(
|
|||||||
db_user: User
|
db_user: User
|
||||||
):
|
):
|
||||||
texts = get_texts(db_user.language)
|
texts = get_texts(db_user.language)
|
||||||
|
|
||||||
|
if not settings.is_support_topup_enabled():
|
||||||
|
await callback.answer(
|
||||||
|
texts.t(
|
||||||
|
"SUPPORT_TOPUP_DISABLED",
|
||||||
|
"Пополнение через поддержку отключено. Попробуйте другой способ оплаты.",
|
||||||
|
),
|
||||||
|
show_alert=True,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
support_text = f"""
|
support_text = f"""
|
||||||
🛠️ <b>Пополнение через поддержку</b>
|
🛠️ <b>Пополнение через поддержку</b>
|
||||||
|
|
||||||
|
|||||||
@@ -758,6 +758,7 @@ def get_subscription_keyboard(
|
|||||||
|
|
||||||
texts = get_texts(language)
|
texts = get_texts(language)
|
||||||
keyboard = []
|
keyboard = []
|
||||||
|
has_direct_payment_methods = False
|
||||||
|
|
||||||
if has_subscription:
|
if has_subscription:
|
||||||
subscription_link = get_display_subscription_link(subscription) if subscription else None
|
subscription_link = get_display_subscription_link(subscription) if subscription else None
|
||||||
@@ -1146,6 +1147,7 @@ def get_balance_keyboard(language: str = DEFAULT_LANGUAGE) -> InlineKeyboardMark
|
|||||||
def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LANGUAGE) -> InlineKeyboardMarkup:
|
def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LANGUAGE) -> InlineKeyboardMarkup:
|
||||||
texts = get_texts(language)
|
texts = get_texts(language)
|
||||||
keyboard = []
|
keyboard = []
|
||||||
|
has_direct_payment_methods = False
|
||||||
|
|
||||||
amount_kopeks = max(0, int(amount_kopeks or 0))
|
amount_kopeks = max(0, int(amount_kopeks or 0))
|
||||||
|
|
||||||
@@ -1161,6 +1163,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("stars")
|
callback_data=_build_callback("stars")
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
if settings.is_yookassa_enabled():
|
if settings.is_yookassa_enabled():
|
||||||
if settings.YOOKASSA_SBP_ENABLED:
|
if settings.YOOKASSA_SBP_ENABLED:
|
||||||
@@ -1170,6 +1173,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("yookassa_sbp"),
|
callback_data=_build_callback("yookassa_sbp"),
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
keyboard.append([
|
keyboard.append([
|
||||||
InlineKeyboardButton(
|
InlineKeyboardButton(
|
||||||
@@ -1177,6 +1181,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("yookassa"),
|
callback_data=_build_callback("yookassa"),
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
if settings.TRIBUTE_ENABLED:
|
if settings.TRIBUTE_ENABLED:
|
||||||
keyboard.append([
|
keyboard.append([
|
||||||
@@ -1185,6 +1190,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("tribute")
|
callback_data=_build_callback("tribute")
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
if settings.is_mulenpay_enabled():
|
if settings.is_mulenpay_enabled():
|
||||||
mulenpay_name = settings.get_mulenpay_display_name()
|
mulenpay_name = settings.get_mulenpay_display_name()
|
||||||
@@ -1197,6 +1203,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("mulenpay")
|
callback_data=_build_callback("mulenpay")
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
if settings.is_wata_enabled():
|
if settings.is_wata_enabled():
|
||||||
keyboard.append([
|
keyboard.append([
|
||||||
@@ -1205,6 +1212,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("wata")
|
callback_data=_build_callback("wata")
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
if settings.is_pal24_enabled():
|
if settings.is_pal24_enabled():
|
||||||
keyboard.append([
|
keyboard.append([
|
||||||
@@ -1213,6 +1221,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("pal24")
|
callback_data=_build_callback("pal24")
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
if settings.is_platega_enabled() and settings.get_platega_active_methods():
|
if settings.is_platega_enabled() and settings.get_platega_active_methods():
|
||||||
keyboard.append([
|
keyboard.append([
|
||||||
@@ -1221,6 +1230,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("platega"),
|
callback_data=_build_callback("platega"),
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
if settings.is_cryptobot_enabled():
|
if settings.is_cryptobot_enabled():
|
||||||
keyboard.append([
|
keyboard.append([
|
||||||
@@ -1229,6 +1239,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("cryptobot")
|
callback_data=_build_callback("cryptobot")
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
if settings.is_heleket_enabled():
|
if settings.is_heleket_enabled():
|
||||||
keyboard.append([
|
keyboard.append([
|
||||||
@@ -1237,15 +1248,24 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
|
|||||||
callback_data=_build_callback("heleket")
|
callback_data=_build_callback("heleket")
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
|
has_direct_payment_methods = True
|
||||||
|
|
||||||
keyboard.append([
|
if settings.is_support_topup_enabled():
|
||||||
InlineKeyboardButton(
|
keyboard.append([
|
||||||
text=texts.t("PAYMENT_VIA_SUPPORT", "🛠️ Через поддержку"),
|
InlineKeyboardButton(
|
||||||
callback_data="topup_support"
|
text=texts.t("PAYMENT_VIA_SUPPORT", "🛠️ Через поддержку"),
|
||||||
)
|
callback_data="topup_support"
|
||||||
])
|
)
|
||||||
|
])
|
||||||
|
|
||||||
if len(keyboard) == 1:
|
if not keyboard:
|
||||||
|
keyboard.append([
|
||||||
|
InlineKeyboardButton(
|
||||||
|
text=texts.t("PAYMENTS_TEMPORARILY_UNAVAILABLE", "⚠️ Способы оплаты временно недоступны"),
|
||||||
|
callback_data="payment_methods_unavailable"
|
||||||
|
)
|
||||||
|
])
|
||||||
|
elif not has_direct_payment_methods and settings.is_support_topup_enabled():
|
||||||
keyboard.insert(0, [
|
keyboard.insert(0, [
|
||||||
InlineKeyboardButton(
|
InlineKeyboardButton(
|
||||||
text=texts.t("PAYMENTS_TEMPORARILY_UNAVAILABLE", "⚠️ Способы оплаты временно недоступны"),
|
text=texts.t("PAYMENTS_TEMPORARILY_UNAVAILABLE", "⚠️ Способы оплаты временно недоступны"),
|
||||||
|
|||||||
@@ -32,3 +32,12 @@ RULES_TEXT: |
|
|||||||
2. Do not distribute spam or malicious content.
|
2. Do not distribute spam or malicious content.
|
||||||
3. Respect other community members.
|
3. Respect other community members.
|
||||||
|
|
||||||
|
PAYMENT_METHODS_NONE_AVAILABLE: |
|
||||||
|
💳 <b>Balance top-up methods</b>
|
||||||
|
|
||||||
|
⚠️ Payment methods are temporarily unavailable.
|
||||||
|
Please try again later.
|
||||||
|
|
||||||
|
Choose a top-up option:
|
||||||
|
SUPPORT_TOPUP_DISABLED: "Top-ups via support are disabled. Please use another payment method."
|
||||||
|
|
||||||
|
|||||||
@@ -32,3 +32,12 @@ RULES_TEXT: |
|
|||||||
2. Не распространяйте спам и вредоносный контент.
|
2. Не распространяйте спам и вредоносный контент.
|
||||||
3. Уважайте других пользователей.
|
3. Уважайте других пользователей.
|
||||||
|
|
||||||
|
PAYMENT_METHODS_NONE_AVAILABLE: |
|
||||||
|
💳 <b>Способы пополнения баланса</b>
|
||||||
|
|
||||||
|
⚠️ В данный момент способы оплаты временно недоступны.
|
||||||
|
Попробуйте позже.
|
||||||
|
|
||||||
|
Выберите способ пополнения:
|
||||||
|
SUPPORT_TOPUP_DISABLED: "Пополнение через поддержку отключено. Попробуйте другой способ оплаты."
|
||||||
|
|
||||||
|
|||||||
@@ -254,6 +254,7 @@ class BotConfigurationService:
|
|||||||
"SIMPLE_SUBSCRIPTION_TRAFFIC_GB": "SIMPLE_SUBSCRIPTION",
|
"SIMPLE_SUBSCRIPTION_TRAFFIC_GB": "SIMPLE_SUBSCRIPTION",
|
||||||
"SIMPLE_SUBSCRIPTION_SQUAD_UUID": "SIMPLE_SUBSCRIPTION",
|
"SIMPLE_SUBSCRIPTION_SQUAD_UUID": "SIMPLE_SUBSCRIPTION",
|
||||||
"DISABLE_TOPUP_BUTTONS": "PAYMENT",
|
"DISABLE_TOPUP_BUTTONS": "PAYMENT",
|
||||||
|
"SUPPORT_TOPUP_ENABLED": "PAYMENT",
|
||||||
"ENABLE_NOTIFICATIONS": "NOTIFICATIONS",
|
"ENABLE_NOTIFICATIONS": "NOTIFICATIONS",
|
||||||
"NOTIFICATION_RETRY_ATTEMPTS": "NOTIFICATIONS",
|
"NOTIFICATION_RETRY_ATTEMPTS": "NOTIFICATIONS",
|
||||||
"NOTIFICATION_CACHE_HOURS": "NOTIFICATIONS",
|
"NOTIFICATION_CACHE_HOURS": "NOTIFICATIONS",
|
||||||
|
|||||||
@@ -100,14 +100,14 @@ def get_available_payment_methods() -> List[Dict[str, str]]:
|
|||||||
"callback": "topup_platega",
|
"callback": "topup_platega",
|
||||||
})
|
})
|
||||||
|
|
||||||
# Поддержка всегда доступна
|
if settings.is_support_topup_enabled():
|
||||||
methods.append({
|
methods.append({
|
||||||
"id": "support",
|
"id": "support",
|
||||||
"name": "Через поддержку",
|
"name": "Через поддержку",
|
||||||
"icon": "🛠️",
|
"icon": "🛠️",
|
||||||
"description": "другие способы",
|
"description": "другие способы",
|
||||||
"callback": "topup_support"
|
"callback": "topup_support"
|
||||||
})
|
})
|
||||||
|
|
||||||
return methods
|
return methods
|
||||||
|
|
||||||
@@ -118,7 +118,18 @@ def get_payment_methods_text(language: str) -> str:
|
|||||||
texts = get_texts(language)
|
texts = get_texts(language)
|
||||||
methods = get_available_payment_methods()
|
methods = get_available_payment_methods()
|
||||||
|
|
||||||
if len(methods) <= 1: # Только поддержка
|
if not methods:
|
||||||
|
return texts.t(
|
||||||
|
"PAYMENT_METHODS_NONE_AVAILABLE",
|
||||||
|
"""💳 <b>Способы пополнения баланса</b>
|
||||||
|
|
||||||
|
⚠️ В данный момент способы оплаты временно недоступны.
|
||||||
|
Попробуйте позже.
|
||||||
|
|
||||||
|
Выберите способ пополнения:""",
|
||||||
|
)
|
||||||
|
|
||||||
|
if len(methods) == 1 and methods[0]["id"] == "support":
|
||||||
return texts.t(
|
return texts.t(
|
||||||
"PAYMENT_METHODS_ONLY_SUPPORT",
|
"PAYMENT_METHODS_ONLY_SUPPORT",
|
||||||
"""💳 <b>Способы пополнения баланса</b>
|
"""💳 <b>Способы пополнения баланса</b>
|
||||||
@@ -186,7 +197,7 @@ def is_payment_method_available(method_id: str) -> bool:
|
|||||||
elif method_id == "platega":
|
elif method_id == "platega":
|
||||||
return settings.is_platega_enabled() and bool(settings.get_platega_active_methods())
|
return settings.is_platega_enabled() and bool(settings.get_platega_active_methods())
|
||||||
elif method_id == "support":
|
elif method_id == "support":
|
||||||
return True # Поддержка всегда доступна
|
return settings.is_support_topup_enabled()
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -204,7 +215,7 @@ def get_payment_method_status() -> Dict[str, bool]:
|
|||||||
"cryptobot": settings.is_cryptobot_enabled(),
|
"cryptobot": settings.is_cryptobot_enabled(),
|
||||||
"heleket": settings.is_heleket_enabled(),
|
"heleket": settings.is_heleket_enabled(),
|
||||||
"platega": settings.is_platega_enabled() and bool(settings.get_platega_active_methods()),
|
"platega": settings.is_platega_enabled() and bool(settings.get_platega_active_methods()),
|
||||||
"support": True
|
"support": settings.is_support_topup_enabled()
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_enabled_payment_methods_count() -> int:
|
def get_enabled_payment_methods_count() -> int:
|
||||||
|
|||||||
Reference in New Issue
Block a user