Revert "Handle unsupported Happ cryptolink URLs in Telegram"

This commit is contained in:
Egor
2025-09-25 11:39:34 +03:00
committed by GitHub
parent c353c69180
commit 4e6bc5ae71
4 changed files with 39 additions and 130 deletions

View File

@@ -4589,45 +4589,11 @@ async def handle_no_traffic_packages(
):
await callback.answer(
"⚠️ В данный момент нет доступных пакетов трафика. "
"Обратитесь в техподдержку для получения информации.",
"Обратитесь в техподдержку для получения информации.",
show_alert=True
)
async def handle_happ_copy_subscription_link(
callback: types.CallbackQuery,
db_user: User,
db: AsyncSession
):
texts = get_texts(db_user.language)
subscription = db_user.subscription
subscription_link = get_display_subscription_link(subscription)
if not subscription_link:
await callback.answer(
texts.t("SUBSCRIPTION_LINK_UNAVAILABLE", "❌ Ссылка подписки недоступна"),
show_alert=True,
)
return
await callback.message.answer(
texts.t(
"SUBSCRIPTION_HAPP_COPY_MESSAGE",
"🔗 <b>Ссылка для Happ:</b>\n<code>{subscription_link}</code>",
).format(subscription_link=subscription_link),
parse_mode="HTML",
disable_web_page_preview=True,
)
await callback.answer(
texts.t(
"SUBSCRIPTION_HAPP_COPY_ALERT",
"📋 Ссылка отправлена отдельным сообщением.",
),
show_alert=False,
)
async def handle_open_subscription_link(
callback: types.CallbackQuery,
db_user: User,
@@ -4645,37 +4611,21 @@ async def handle_open_subscription_link(
return
if settings.is_happ_cryptolink_mode():
allowed_schemes = ("http://", "https://", "tg://", "ton://", "ftp://")
link_supported = subscription_link.startswith(allowed_schemes)
if link_supported:
link_line = texts.t(
"SUBSCRIPTION_HAPP_OPEN_LINK",
"<a href=\"{subscription_link}\">🔓 Открыть ссылку в Happ</a>",
).format(subscription_link=subscription_link)
else:
link_line = texts.t(
"SUBSCRIPTION_HAPP_OPEN_LINK_UNSUPPORTED",
"🔓 Скопируйте ссылку из блока ниже и откройте её в Happ вручную.",
)
happ_message = (
texts.t(
"SUBSCRIPTION_HAPP_OPEN_TITLE",
"🔗 <b>Подключение через Happ</b>",
)
+ "\n\n"
+ link_line
+ texts.t(
"SUBSCRIPTION_HAPP_OPEN_LINK",
"<a href=\"{subscription_link}\">🔓 Открыть ссылку в Happ</a>",
).format(subscription_link=subscription_link)
+ "\n\n"
+ texts.t(
"SUBSCRIPTION_HAPP_OPEN_HINT",
"💡 Если ссылка не открывается автоматически, скопируйте её вручную: <code>{subscription_link}</code>",
).format(subscription_link=subscription_link)
+ "\n\n"
+ texts.t(
"SUBSCRIPTION_HAPP_OPEN_COPY_HINT",
"📋 Нажмите кнопку ниже, чтобы получить ссылку одним нажатием.",
)
)
keyboard = get_happ_cryptolink_keyboard(subscription_link, db_user.language)
@@ -5416,16 +5366,11 @@ def register_handlers(dp: Dispatcher):
F.data == "happ_download_back"
)
dp.callback_query.register(
handle_happ_copy_subscription_link,
F.data == "happ_copy_link"
)
dp.callback_query.register(
handle_connect_subscription,
F.data == "subscription_connect"
)
dp.callback_query.register(
handle_device_guide,
F.data.startswith("device_guide_")

View File

@@ -2,7 +2,6 @@ from typing import List, Optional
from aiogram import types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from datetime import datetime
from urllib.parse import urlparse
from app.database.models import User
from sqlalchemy.ext.asyncio import AsyncSession
@@ -255,74 +254,49 @@ def get_happ_download_button_row(texts) -> Optional[List[InlineKeyboardButton]]:
]
def _is_supported_inline_button_url(url: str) -> bool:
try:
parsed = urlparse(url)
except ValueError:
return False
if not parsed.scheme:
return False
return parsed.scheme.lower() in {"http", "https", "tg", "ton", "ftp"}
def get_happ_cryptolink_keyboard(
subscription_link: str,
language: str = DEFAULT_LANGUAGE,
) -> InlineKeyboardMarkup:
texts = get_texts(language)
buttons = []
if _is_supported_inline_button_url(subscription_link):
buttons.append([
buttons = [
[
InlineKeyboardButton(
text=texts.t("CONNECT_BUTTON", "🔗 Подключиться"),
url=subscription_link,
)
])
else:
buttons.append([
InlineKeyboardButton(
text=texts.t("HAPP_COPY_LINK_BUTTON", "📋 Получить ссылку"),
callback_data="happ_copy_link",
)
])
buttons.extend(
],
[
[
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",
)
],
]
)
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)

View File

@@ -26,7 +26,6 @@
"HAPP_PLATFORM_ANDROID": "🤖 Android",
"HAPP_PLATFORM_MACOS": "🖥️ Mac OS",
"HAPP_PLATFORM_WINDOWS": "💻 Windows",
"HAPP_COPY_LINK_BUTTON": "📋 Get link",
"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",
@@ -409,11 +408,7 @@
"SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 <b>Setup for {device_name}</b>",
"SUBSCRIPTION_HAPP_OPEN_TITLE": "🔗 <b>Connect via Happ</b>",
"SUBSCRIPTION_HAPP_OPEN_LINK": "<a href=\"{subscription_link}\">🔓 Open link in Happ</a>",
"SUBSCRIPTION_HAPP_OPEN_LINK_UNSUPPORTED": "🔓 Copy the link from the block below and open it in Happ manually.",
"SUBSCRIPTION_HAPP_OPEN_HINT": "💡 If the link doesn't open automatically, copy it manually: <code>{subscription_link}</code>",
"SUBSCRIPTION_HAPP_OPEN_COPY_HINT": "📋 Use the button below to get the link in one tap.",
"SUBSCRIPTION_HAPP_COPY_MESSAGE": "🔗 <b>Happ link:</b>\n<code>{subscription_link}</code>",
"SUBSCRIPTION_HAPP_COPY_ALERT": "📋 The link was sent as a separate message.",
"SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 <b>Subscription link:</b>",
"SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 <b>Recommended app:</b> {app_name}",
"SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "<b>Step 1 - Install:</b>",

View File

@@ -189,7 +189,6 @@
"HAPP_PLATFORM_ANDROID": "🤖 Android",
"HAPP_PLATFORM_MACOS": "🖥️ Mac OS",
"HAPP_PLATFORM_WINDOWS": "💻 Windows",
"HAPP_COPY_LINK_BUTTON": "📋 Получить ссылку",
"HAPP_PLATFORM_PC": "💻 ПК",
"HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Скачайте Happ для {platform}:",
"HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Ссылка для этого устройства не настроена",
@@ -409,11 +408,7 @@
"SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 <b>Настройка для {device_name}</b>",
"SUBSCRIPTION_HAPP_OPEN_TITLE": "🔗 <b>Подключение через Happ</b>",
"SUBSCRIPTION_HAPP_OPEN_LINK": "<a href=\"{subscription_link}\">🔓 Открыть ссылку в Happ</a>",
"SUBSCRIPTION_HAPP_OPEN_LINK_UNSUPPORTED": "🔓 Скопируйте ссылку из блока ниже и откройте её в Happ вручную.",
"SUBSCRIPTION_HAPP_OPEN_HINT": "💡 Если ссылка не открывается автоматически, скопируйте её вручную: <code>{subscription_link}</code>",
"SUBSCRIPTION_HAPP_OPEN_COPY_HINT": "📋 Нажмите кнопку ниже, чтобы получить ссылку одним нажатием.",
"SUBSCRIPTION_HAPP_COPY_MESSAGE": "🔗 <b>Ссылка для Happ:</b>\n<code>{subscription_link}</code>",
"SUBSCRIPTION_HAPP_COPY_ALERT": "📋 Ссылка отправлена отдельным сообщением.",
"SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 <b>Ссылка подписки:</b>",
"SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 <b>Рекомендуемое приложение:</b> {app_name}",
"SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "<b>Шаг 1 - Установка:</b>",