from typing import List, Dict, Tuple from app.config import settings from app.localization.texts import get_texts def get_available_payment_methods() -> List[Dict[str, str]]: """ Возвращает список доступных способов оплаты с их настройками """ methods = [] if settings.TELEGRAM_STARS_ENABLED: methods.append({ "id": "stars", "name": "Telegram Stars", "icon": "⭐", "description": "быстро и удобно", "callback": "topup_stars" }) if settings.is_yookassa_enabled(): if getattr(settings, "YOOKASSA_SBP_ENABLED", False): methods.append({ "id": "yookassa_sbp", "name": "СБП (YooKassa)", "icon": "🏦", "description": "моментальная оплата по QR", "callback": "topup_yookassa_sbp", }) methods.append({ "id": "yookassa", "name": "Банковская карта", "icon": "💳", "description": "через YooKassa", "callback": "topup_yookassa", }) if settings.TRIBUTE_ENABLED: methods.append({ "id": "tribute", "name": "Банковская карта", "icon": "💳", "description": "через Tribute", "callback": "topup_tribute" }) if settings.is_mulenpay_enabled(): mulenpay_name = settings.get_mulenpay_display_name() methods.append({ "id": "mulenpay", "name": "Банковская карта", "icon": "💳", "description": f"через {mulenpay_name}", "callback": "topup_mulenpay" }) if settings.is_wata_enabled(): methods.append({ "id": "wata", "name": "Банковская карта", "icon": "💳", "description": "через WATA", "callback": "topup_wata" }) if settings.is_pal24_enabled(): methods.append({ "id": "pal24", "name": "СБП", "icon": "🏦", "description": "через PayPalych", "callback": "topup_pal24" }) if settings.is_cryptobot_enabled(): methods.append({ "id": "cryptobot", "name": "Криптовалюта", "icon": "🪙", "description": "через CryptoBot", "callback": "topup_cryptobot" }) if settings.is_heleket_enabled(): methods.append({ "id": "heleket", "name": "Криптовалюта", "icon": "🪙", "description": "через Heleket", "callback": "topup_heleket" }) if settings.is_platega_enabled() and settings.get_platega_active_methods(): methods.append({ "id": "platega", "name": "Банковская карта", "icon": "💳", "description": "через Platega (карты + СБП)", "callback": "topup_platega", }) if settings.is_support_topup_enabled(): methods.append({ "id": "support", "name": "Через поддержку", "icon": "🛠️", "description": "другие способы", "callback": "topup_support" }) return methods def get_payment_methods_text(language: str) -> str: """ Генерирует текст с описанием доступных способов оплаты """ texts = get_texts(language) methods = get_available_payment_methods() if not methods: return texts.t( "PAYMENT_METHODS_NONE_AVAILABLE", """💳 Способы пополнения баланса ⚠️ В данный момент способы оплаты временно недоступны. Попробуйте позже. Выберите способ пополнения:""", ) if len(methods) == 1 and methods[0]["id"] == "support": return texts.t( "PAYMENT_METHODS_ONLY_SUPPORT", """💳 Способы пополнения баланса ⚠️ В данный момент автоматические способы оплаты временно недоступны. Обратитесь в техподдержку для пополнения баланса. Выберите способ пополнения:""", ) text = texts.t( "PAYMENT_METHODS_TITLE", "💳 Способы пополнения баланса", ) + "\n\n" text += texts.t( "PAYMENT_METHODS_PROMPT", "Выберите удобный для вас способ оплаты:", ) + "\n\n" for method in methods: method_id = method['id'].upper() name = texts.t( f"PAYMENT_METHOD_{method_id}_NAME", f"{method['icon']} {method['name']}", ) description = texts.t( f"PAYMENT_METHOD_{method_id}_DESCRIPTION", method['description'], ) if method_id == "MULENPAY": mulenpay_name = settings.get_mulenpay_display_name() mulenpay_name_html = settings.get_mulenpay_display_name_html() name = name.format(mulenpay_name=mulenpay_name_html) description = description.format(mulenpay_name=mulenpay_name) text += f"{name} - {description}\n" text += "\n" + texts.t( "PAYMENT_METHODS_FOOTER", "Выберите способ пополнения:", ) return text def is_payment_method_available(method_id: str) -> bool: """ Проверяет, доступен ли конкретный способ оплаты """ if method_id == "stars": return settings.TELEGRAM_STARS_ENABLED elif method_id == "yookassa": return settings.is_yookassa_enabled() elif method_id == "tribute": return settings.TRIBUTE_ENABLED elif method_id == "mulenpay": return settings.is_mulenpay_enabled() elif method_id == "wata": return settings.is_wata_enabled() elif method_id == "pal24": return settings.is_pal24_enabled() elif method_id == "cryptobot": return settings.is_cryptobot_enabled() elif method_id == "heleket": return settings.is_heleket_enabled() elif method_id == "platega": return settings.is_platega_enabled() and bool(settings.get_platega_active_methods()) elif method_id == "support": return settings.is_support_topup_enabled() else: return False def get_payment_method_status() -> Dict[str, bool]: """ Возвращает статус всех способов оплаты """ return { "stars": settings.TELEGRAM_STARS_ENABLED, "yookassa": settings.is_yookassa_enabled(), "tribute": settings.TRIBUTE_ENABLED, "mulenpay": settings.is_mulenpay_enabled(), "wata": settings.is_wata_enabled(), "pal24": settings.is_pal24_enabled(), "cryptobot": settings.is_cryptobot_enabled(), "heleket": settings.is_heleket_enabled(), "platega": settings.is_platega_enabled() and bool(settings.get_platega_active_methods()), "support": settings.is_support_topup_enabled() } def get_enabled_payment_methods_count() -> int: """ Возвращает количество включенных способов оплаты (не считая поддержку) """ count = 0 if settings.TELEGRAM_STARS_ENABLED: count += 1 if settings.is_yookassa_enabled(): count += 1 if settings.TRIBUTE_ENABLED: count += 1 if settings.is_mulenpay_enabled(): count += 1 if settings.is_wata_enabled(): count += 1 if settings.is_pal24_enabled(): count += 1 if settings.is_cryptobot_enabled(): count += 1 if settings.is_heleket_enabled(): count += 1 if settings.is_platega_enabled() and settings.get_platega_active_methods(): count += 1 return count