diff --git a/.env.example b/.env.example index 1070f38a..747f289c 100644 --- a/.env.example +++ b/.env.example @@ -290,6 +290,9 @@ MINIAPP_CUSTOM_URL= CONNECT_BUTTON_HAPP_DOWNLOAD_ENABLED=false HAPP_DOWNLOAD_LINK_IOS= HAPP_DOWNLOAD_LINK_ANDROID= +HAPP_DOWNLOAD_LINK_MACOS= +HAPP_DOWNLOAD_LINK_WINDOWS= +# (опционально) устаревшее поле для Windows, будет использовано если HAPP_DOWNLOAD_LINK_WINDOWS не задан HAPP_DOWNLOAD_LINK_PC= # Пропустить принятие правил использования бота diff --git a/README.md b/README.md index a7efc850..fb7f037d 100644 --- a/README.md +++ b/README.md @@ -531,6 +531,9 @@ MINIAPP_CUSTOM_URL= CONNECT_BUTTON_HAPP_DOWNLOAD_ENABLED=false HAPP_DOWNLOAD_LINK_IOS= HAPP_DOWNLOAD_LINK_ANDROID= +HAPP_DOWNLOAD_LINK_MACOS= +HAPP_DOWNLOAD_LINK_WINDOWS= +# (опционально) устаревшее поле для Windows, будет использовано если HAPP_DOWNLOAD_LINK_WINDOWS не задан HAPP_DOWNLOAD_LINK_PC= # Пропустить принятие правил использования бота diff --git a/app/config.py b/app/config.py index bace5055..6d16054c 100644 --- a/app/config.py +++ b/app/config.py @@ -212,6 +212,8 @@ class Settings(BaseSettings): CONNECT_BUTTON_HAPP_DOWNLOAD_ENABLED: bool = False HAPP_DOWNLOAD_LINK_IOS: Optional[str] = None HAPP_DOWNLOAD_LINK_ANDROID: Optional[str] = None + HAPP_DOWNLOAD_LINK_MACOS: Optional[str] = None + HAPP_DOWNLOAD_LINK_WINDOWS: Optional[str] = None HAPP_DOWNLOAD_LINK_PC: Optional[str] = None HIDE_SUBSCRIPTION_LINK: bool = False ENABLE_LOGO_MODE: bool = True @@ -555,10 +557,18 @@ class Settings(BaseSettings): def get_happ_download_link(self, platform: str) -> Optional[str]: platform_key = platform.lower() + + if platform_key == "pc": + platform_key = "windows" + links = { "ios": (self.HAPP_DOWNLOAD_LINK_IOS or "").strip(), "android": (self.HAPP_DOWNLOAD_LINK_ANDROID or "").strip(), - "pc": (self.HAPP_DOWNLOAD_LINK_PC or "").strip(), + "macos": (self.HAPP_DOWNLOAD_LINK_MACOS or "").strip(), + "windows": ( + (self.HAPP_DOWNLOAD_LINK_WINDOWS or "").strip() + or (self.HAPP_DOWNLOAD_LINK_PC or "").strip() + ), } link = links.get(platform_key) return link if link else None diff --git a/app/handlers/subscription.py b/app/handlers/subscription.py index f76aba7c..e6dab937 100644 --- a/app/handlers/subscription.py +++ b/app/handlers/subscription.py @@ -39,6 +39,7 @@ from app.keyboards.inline import ( get_extend_subscription_keyboard_with_prices, get_confirm_change_devices_keyboard, get_devices_management_keyboard, get_device_reset_confirm_keyboard, get_device_management_help_keyboard, + get_happ_cryptolink_keyboard, get_happ_download_platform_keyboard, get_happ_download_link_keyboard, get_happ_download_button_row, get_payment_methods_keyboard_with_cart, @@ -4115,6 +4116,8 @@ async def handle_happ_download_platform_choice( db: AsyncSession ): platform = callback.data.split('_')[-1] + if platform == "pc": + platform = "windows" texts = get_texts(db_user.language) link = settings.get_happ_download_link(platform) @@ -4128,7 +4131,8 @@ async def handle_happ_download_platform_choice( platform_names = { "ios": texts.t("HAPP_PLATFORM_IOS", "🍎 iOS"), "android": texts.t("HAPP_PLATFORM_ANDROID", "🤖 Android"), - "pc": texts.t("HAPP_PLATFORM_PC", "💻 ПК"), + "macos": texts.t("HAPP_PLATFORM_MACOS", "🖥️ Mac OS"), + "windows": texts.t("HAPP_PLATFORM_WINDOWS", "💻 Windows"), } link_text = texts.t( @@ -4624,10 +4628,13 @@ async def handle_open_subscription_link( ).format(subscription_link=subscription_link) ) + keyboard = get_happ_cryptolink_keyboard(subscription_link, db_user.language) + await callback.message.answer( happ_message, parse_mode="HTML", disable_web_page_preview=True, + reply_markup=keyboard, ) await callback.answer() return @@ -5340,7 +5347,13 @@ def register_handlers(dp: Dispatcher): dp.callback_query.register( handle_happ_download_platform_choice, - F.data.in_(["happ_download_ios", "happ_download_android", "happ_download_pc"]) + F.data.in_([ + "happ_download_ios", + "happ_download_android", + "happ_download_pc", + "happ_download_macos", + "happ_download_windows", + ]) ) dp.callback_query.register( diff --git a/app/keyboards/inline.py b/app/keyboards/inline.py index 68a5a30b..01e79ce4 100644 --- a/app/keyboards/inline.py +++ b/app/keyboards/inline.py @@ -254,12 +254,60 @@ def get_happ_download_button_row(texts) -> Optional[List[InlineKeyboardButton]]: ] +def get_happ_cryptolink_keyboard( + subscription_link: str, + language: str = DEFAULT_LANGUAGE, +) -> InlineKeyboardMarkup: + texts = get_texts(language) + buttons = [ + [ + InlineKeyboardButton( + text=texts.t("CONNECT_BUTTON", "🔗 Подключиться"), + url=subscription_link, + ) + ], + [ + InlineKeyboardButton( + text=texts.t("HAPP_PLATFORM_IOS", "🍎 iOS"), + callback_data="happ_download_ios", + ) + ], + [ + InlineKeyboardButton( + text=texts.t("HAPP_PLATFORM_ANDROID", "🤖 Android"), + callback_data="happ_download_android", + ) + ], + [ + InlineKeyboardButton( + text=texts.t("HAPP_PLATFORM_MACOS", "🖥️ Mac OS"), + callback_data="happ_download_macos", + ) + ], + [ + InlineKeyboardButton( + text=texts.t("HAPP_PLATFORM_WINDOWS", "💻 Windows"), + callback_data="happ_download_windows", + ) + ], + [ + InlineKeyboardButton( + text=texts.t("BACK_TO_MAIN_MENU_BUTTON", "⬅️ В главное меню"), + callback_data="back_to_menu", + ) + ], + ] + + return InlineKeyboardMarkup(inline_keyboard=buttons) + + def get_happ_download_platform_keyboard(language: str = DEFAULT_LANGUAGE) -> InlineKeyboardMarkup: texts = get_texts(language) buttons = [ [InlineKeyboardButton(text=texts.t("HAPP_PLATFORM_IOS", "🍎 iOS"), callback_data="happ_download_ios")], [InlineKeyboardButton(text=texts.t("HAPP_PLATFORM_ANDROID", "🤖 Android"), callback_data="happ_download_android")], - [InlineKeyboardButton(text=texts.t("HAPP_PLATFORM_PC", "💻 ПК"), callback_data="happ_download_pc")], + [InlineKeyboardButton(text=texts.t("HAPP_PLATFORM_MACOS", "🖥️ Mac OS"), callback_data="happ_download_macos")], + [InlineKeyboardButton(text=texts.t("HAPP_PLATFORM_WINDOWS", "💻 Windows"), callback_data="happ_download_windows")], [InlineKeyboardButton(text=texts.BACK, callback_data="happ_download_close")], ] diff --git a/app/localization/locales/en.json b/app/localization/locales/en.json index 94eb4eca..98b41a5b 100644 --- a/app/localization/locales/en.json +++ b/app/localization/locales/en.json @@ -23,6 +23,8 @@ "HAPP_DOWNLOAD_PROMPT": "📥 Download Happ\nChoose your device:", "HAPP_PLATFORM_IOS": "🍎 iOS", "HAPP_PLATFORM_ANDROID": "🤖 Android", + "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", + "HAPP_PLATFORM_WINDOWS": "💻 Windows", "HAPP_PLATFORM_PC": "💻 PC", "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Download Happ for {platform}:", "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Download link for this device is not configured", diff --git a/app/localization/locales/ru.json b/app/localization/locales/ru.json index 5f0fad3d..831a55d1 100644 --- a/app/localization/locales/ru.json +++ b/app/localization/locales/ru.json @@ -103,6 +103,8 @@ "HAPP_DOWNLOAD_PROMPT": "📥 Скачать Happ\nВыберите ваше устройство:", "HAPP_PLATFORM_IOS": "🍎 iOS", "HAPP_PLATFORM_ANDROID": "🤖 Android", + "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", + "HAPP_PLATFORM_WINDOWS": "💻 Windows", "HAPP_PLATFORM_PC": "💻 ПК", "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Скачайте Happ для {platform}:", "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Ссылка для этого устройства не настроена", diff --git a/locales/en.json b/locales/en.json index d5e575d8..84a68c61 100644 --- a/locales/en.json +++ b/locales/en.json @@ -24,6 +24,8 @@ "HAPP_DOWNLOAD_PROMPT": "📥 Download Happ\nChoose your device:", "HAPP_PLATFORM_IOS": "🍎 iOS", "HAPP_PLATFORM_ANDROID": "🤖 Android", + "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", + "HAPP_PLATFORM_WINDOWS": "💻 Windows", "HAPP_PLATFORM_PC": "💻 PC", "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Download Happ for {platform}:", "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Download link for this device is not configured", diff --git a/locales/ru.json b/locales/ru.json index ac9f1ee6..b1498e4e 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -187,6 +187,8 @@ "HAPP_DOWNLOAD_PROMPT": "📥 Скачать Happ\nВыберите ваше устройство:", "HAPP_PLATFORM_IOS": "🍎 iOS", "HAPP_PLATFORM_ANDROID": "🤖 Android", + "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", + "HAPP_PLATFORM_WINDOWS": "💻 Windows", "HAPP_PLATFORM_PC": "💻 ПК", "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Скачайте Happ для {platform}:", "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Ссылка для этого устройства не настроена",