From 2ef5bbdff50b990006600412379eff357ebd0fd8 Mon Sep 17 00:00:00 2001 From: machka Date: Sun, 18 May 2025 08:06:36 +0000 Subject: [PATCH] Added ToS button, updated Yookassa VAT Code (but please check yookassa docs first) --- .env.example | 1 + bot/keyboards/inline/user_keyboards.py | 6 +++++- config/settings.py | 7 +++---- docker-compose.yml | 4 ++-- locales/en.json | 3 ++- locales/ru.json | 7 ++++--- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/.env.example b/.env.example index 44ade0d..6ca9ddf 100644 --- a/.env.example +++ b/.env.example @@ -12,6 +12,7 @@ DEFAULT_CURRENCY_SYMBOL="RUB" # e.g., RUB, USD, EUR # External Links SUPPORT_LINK=https://t.me/your_support_link SERVER_STATUS_URL=https://status.yourdomain.tld/status/your_service +TERMS_OF_SERVICE_URL=https://example.com/tos # YooKassa Payment Gateway Configuration YOOKASSA_SHOP_ID=your_shop_id diff --git a/bot/keyboards/inline/user_keyboards.py b/bot/keyboards/inline/user_keyboards.py index 6451ca2..8d8e244 100644 --- a/bot/keyboards/inline/user_keyboards.py +++ b/bot/keyboards/inline/user_keyboards.py @@ -21,7 +21,6 @@ def get_main_menu_inline_keyboard( builder.row( InlineKeyboardButton(text=_(key="menu_subscribe_inline"), callback_data="main_action:subscribe")) - builder.row( InlineKeyboardButton(text=_(key="menu_my_subscription_inline"), callback_data="main_action:my_subscription")) @@ -53,6 +52,11 @@ def get_main_menu_inline_keyboard( InlineKeyboardButton(text=_(key="menu_support_button"), url=settings.SUPPORT_LINK)) + if settings.TERMS_OF_SERVICE_URL: + builder.row( + InlineKeyboardButton(text=_(key="menu_terms_button"), + url=settings.TERMS_OF_SERVICE_URL)) + return builder.as_markup() diff --git a/config/settings.py b/config/settings.py index fd27ded..04699a3 100644 --- a/config/settings.py +++ b/config/settings.py @@ -22,6 +22,8 @@ class Settings(BaseSettings): SERVER_STATUS_URL: Optional[str] = Field( default=None, description="Link to server status page (e.g., Uptime Kuma)") + TERMS_OF_SERVICE_URL: Optional[str] = Field( + default=None, description="Link to Terms of Use page") YOOKASSA_SHOP_ID: Optional[str] = None YOOKASSA_SECRET_KEY: Optional[str] = None @@ -32,10 +34,7 @@ class Settings(BaseSettings): default=None, description="Default email for YooKassa receipts (REQUIRED for 54-FZ)") YOOKASSA_VAT_CODE: int = Field( - default=6, - description= - "YooKassa VAT code (e.g., 1=20%, 2=10%, 4=0%, 6=No VAT - check YooKassa docs!)" - ) + default=1, description="YooKassa VAT code (check YooKassa docs!)") YOOKASSA_PAYMENT_MODE: str = Field( default="full_prepayment", description= diff --git a/docker-compose.yml b/docker-compose.yml index 749dd1a..d79a2f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,8 @@ services: vpn-shop: build: . - container_name: vpn-shop - hostname: vpn-shop + container_name: vpn-shop-stable + hostname: vpn-shop-stable env_file: - .env networks: diff --git a/locales/en.json b/locales/en.json index 6e72dbd..8bb8d87 100644 --- a/locales/en.json +++ b/locales/en.json @@ -10,13 +10,14 @@ "error_try_again": "An error occurred. Please try again.", "menu_subscribe_inline": "🚀 Buy", - "menu_my_subscription_inline": "📄 My Sub/Config", + "menu_my_subscription_inline": "📆 My Sub/Config", "menu_referral_inline": "🎁 Referrals", "menu_apply_promo_button": "🎁 Promo Code", "menu_activate_trial_button": "🆓 Activate Trial", "menu_language_settings_inline": "🌐 Language", "menu_server_status_button": "📊 Status", "menu_support_button": "💬 Support", + "menu_terms_button": "📄 Terms Of Service", "back_to_main_menu_button": "⬅️ Main Menu", "no_subscription_options_available": "Subscription options are currently unavailable.", diff --git a/locales/ru.json b/locales/ru.json index 84a84c0..2b32121 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -10,13 +10,14 @@ "error_try_again": "Произошла ошибка. Попробуйте снова.", "menu_subscribe_inline": "🚀 Купить", - "menu_my_subscription_inline": "📄 Моя подписка", + "menu_my_subscription_inline": "📆 Моя подписка", "menu_referral_inline": "🎁 Рефералы", "menu_apply_promo_button": "🎁 Промокод", "menu_activate_trial_button": "🆓 Пробный период", "menu_language_settings_inline": "🌐 Язык", "menu_server_status_button": "📊 Статус", "menu_support_button": "💬 Поддержка", + "menu_terms_button": "📄 Условия сервиса", "back_to_main_menu_button": "⬅️ Назад", "no_subscription_options_available": "Варианты подписки сейчас недоступны.", @@ -33,7 +34,7 @@ "payment_successful": "✅ Оплата успешна! Ваша подписка на {months} мес. активна до {end_date}.", "payment_failed": "❌ Оплата не удалась/отменена. Если деньги списаны, напишите в поддержку.", "payment_description_subscription": "Подписка на {months} мес.", - "my_subscription_details": "ℹ️ Ваша подписка\n\n🗓️ До: {end_date} (Осталось: {days_left} дн.)\n\n🔗 Ссылка: {config_link}\n\n📊 Трафик: {traffic_used} / {traffic_limit}\n💡 Статус: {status}", + "my_subscription_details": "ℹ️ Ваша подписка\n\n🗓️ До: {end_date} (Дней осталось: {days_left})\n\n🔗 Ссылка: {config_link}\n\n📊 Трафик: {traffic_used} / {traffic_limit}\n💡 Статус: {status}", "subscription_not_active": "Активной подписки нет. Оформите сейчас!", "config_link_not_available": "Н/Д (Попробуйте /sync или поддержка)", "traffic_unlimited": "Безлимит", @@ -43,7 +44,7 @@ "status_disabled": "Отключена", "status_limited": "Ограничена", "status_unknown": "Неизвестен", - "subscription_ending_soon_notification": "{user_name},\nВаша подписка истекает {end_date} (через {days_left} дней).\nНе забудьте продлить!", + "subscription_ending_soon_notification": "{user_name},\nВаша подписка истекает {end_date} (дней осталось: {days_left}).\nНе забудьте продлить!", "payment_successful_with_referral_bonus": "✅ Оплата на {months} мес. успешна! Базовая дата: {base_end_date}.\n\n🎉 Вас пригласил(а) {inviter_name}, вы получили дополнительно {bonus_days} бонусных дней!\nИтоговая дата окончания: {final_end_date}.", "payment_successful_error_details": "Оплата прошла успешно, но возникла ошибка отображения деталей подписки. Пожалуйста, проверьте раздел 'Моя подписка' или свяжитесь с поддержкой.", "error_processing_your_payment": "Ошибка обработки платежа. Обратитесь в поддержку, если проблема не решится.",