From 39c3ec9ed4aa95d417b56dba951bb6e5a8690339 Mon Sep 17 00:00:00 2001 From: Egor Date: Sat, 10 Jan 2026 21:43:29 +0300 Subject: [PATCH 1/5] Add files via upload --- app/localization/locales/en.json | 8 ++++++-- app/localization/locales/ru.json | 9 ++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/localization/locales/en.json b/app/localization/locales/en.json index 494b82e8..bd0721ec 100644 --- a/app/localization/locales/en.json +++ b/app/localization/locales/en.json @@ -201,6 +201,7 @@ "ADMIN_MAIN_SETTINGS": "⚙️ Settings", "ADMIN_MAIN_SUPPORT": "🛟 Support", "ADMIN_MAIN_SYSTEM": "🛠️ System", + "ADMIN_MAIN_TARIFFS": "📦 Tariffs", "ADMIN_MAIN_TRIALS": "🧪 Trials", "ADMIN_MAIN_PAYMENTS": "💳 Top-ups", "ADMIN_MAIN_USERS_SUBSCRIPTIONS": "👥 Users / Subscriptions", @@ -889,6 +890,7 @@ "AUTOPAY_SUCCESS": "\n✅ Autopay completed\n\nYour subscription was automatically renewed for {days} days.\nCharged from balance: {amount}\n", "AUTOPAY_TOGGLE_SUCCESS": "✅ Autopay {status}!", "BACK": "⬅️ Back", + "BACK_BUTTON": "◀️ Back", "BACK_TO_MAIN_MENU_BUTTON": "⬅️ Back to main menu", "BACK_TO_MENU": "🏠 Back to menu", "BACK_TO_OPEN_TICKETS": "🔴 Open tickets", @@ -1031,6 +1033,7 @@ "FAQ_PAGE_NOT_AVAILABLE": "This FAQ page is not available.", "FAQ_PAGE_TITLE": "{title}", "FAQ_PAGE_UNTITLED": "Untitled", + "FREEKASSA_ENTER_AMOUNT": "💳 Top up via {name}\n\nEnter the amount in rubles.\n\nMinimum: {min_amount}\nMaximum: {max_amount}", "GO_TO_BALANCE_TOP_UP": "💳 Go to balance top up", "HAPP_DOWNLOAD_BUTTON": "⬇️ Download Happ", "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Download Happ for {platform}:", @@ -1140,6 +1143,7 @@ "PAYMENT_CARD_YOOKASSA": "💳 Bank card (YooKassa)", "PAYMENT_PLATEGA": "💳 Platega", "PAYMENT_CHARGE_ERROR": "⚠️ Failed to charge the payment", + "PAYMENT_CREATE_ERROR": "❌ Failed to create payment. Please try again later.", "PAYMENT_CRYPTOBOT": "🪙 Cryptocurrency (CryptoBot)", "PAYMENT_HELEKET": "🪙 Cryptocurrency (Heleket)", "HELEKET_PAYMENT_ALREADY_PAID": "✅ Payment has already been credited", @@ -1397,7 +1401,7 @@ "SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 Personal {percent}% discount\n\nIt's been {trigger_days} days without a subscription. Come back and activate the extra discount — it stacks with your promo group and is valid until {expires_at}.", "SUBSCRIPTION_EXPIRING": "\n⚠️ Subscription expiring!\n\nYour subscription expires in {days} days.\n\nRenew it now so you don't lose access.\n", "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Subscription expires in {days_text}!\n\nYour paid subscription ends on {end_date}.\n\n💳 Autopay: {autopay_status}\n\n{action_text}\n", - "SUBSCRIPTION_EXTEND": "💎 Extend subscription", + "SUBSCRIPTION_EXTEND": "💎 Extend", "SUBSCRIPTION_HAPP_CRYPTOLINK_BLOCK": "
{crypto_link}
", "SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Subscription link is ready. Tap the \"Connect\" button below to open it in Happ.", "SUBSCRIPTION_HAPP_OPEN_BUTTON_HINT": "▶️ Tap the \"Connect\" button below to open Happ and add the subscription automatically.", @@ -1425,7 +1429,7 @@ "SUBSCRIPTION_PROMO_DISCOUNT_NOTE": "⚡ Extra discount {percent}%: -{amount}", "SUBSCRIPTION_PROMO_DISCOUNT_TIMER": "⏳ Discount active for {time_left}\n{bar}", "SUBSCRIPTION_PURCHASED": "🎉 Subscription purchased successfully!", - "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Subscription settings", + "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Settings", "SUBSCRIPTION_SETTINGS_OVERVIEW": "⚙️ Subscription settings\n\n📊 Current parameters:\n🌐 Countries: {countries_count}\n📈 Traffic: {traffic_used} / {traffic_limit}\n📱 Devices: {devices_used} / {devices_limit}\n\nChoose what you want to change:", "SUBSCRIPTION_SETTINGS_PAID_ONLY": "⚠️ Settings are available only for paid subscriptions", "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", diff --git a/app/localization/locales/ru.json b/app/localization/locales/ru.json index 718672ef..ea9167fa 100644 --- a/app/localization/locales/ru.json +++ b/app/localization/locales/ru.json @@ -906,6 +906,7 @@ "AUTOPAY_SUCCESS": "\n✅ Автоплатеж выполнен\n\nВаша подписка автоматически продлена на {days} дней.\nСписано с баланса: {amount}\n", "AUTOPAY_TOGGLE_SUCCESS": "✅ Автоплатеж {status}!", "BACK": "⬅️ Назад", + "BACK_BUTTON": "◀️ Назад", "BACK_TO_MAIN_MENU_BUTTON": "⬅️ В главное меню", "BACK_TO_MENU": "🏠 В главное меню", "BACK_TO_OPEN_TICKETS": "🔴 Открытые тикеты", @@ -942,7 +943,7 @@ "CHANGE_DEVICES_SUCCESS_DECREASE": "\n ✅ Количество устройств уменьшено!\n\n 📱 Было: {old_count} → Стало: {new_count}\n ℹ️ Возврат средств не производится\n ", "CHANGE_DEVICES_SUCCESS_INCREASE": "\n ✅ Количество устройств увеличено!\n\n 📱 Было: {old_count} → Стало: {new_count}\n 💰 Списано: {amount}\n ", "CHANGE_DEVICES_TITLE": "📱 Изменение количества устройств", - "CHANGE_TARIFF_BUTTON": "📦 Сменить тариф", + "CHANGE_TARIFF_BUTTON": "📦 Тариф", "CHANNEL_CHECK_BUTTON": "✅ Я подписался", "CHANNEL_REQUIRED_TEXT": "🔒 Для использования бота подпишитесь на новостной канал, а затем нажмите кнопку ниже.", "CHANNEL_SUBSCRIBE_BUTTON": "🔗 Подписаться", @@ -1049,6 +1050,7 @@ "FAQ_PAGE_NOT_AVAILABLE": "Эта страница FAQ недоступна.", "FAQ_PAGE_TITLE": "{title}", "FAQ_PAGE_UNTITLED": "Без названия", + "FREEKASSA_ENTER_AMOUNT": "💳 Пополнение через {name}\n\nВведите сумму пополнения в рублях.\n\nМинимум: {min_amount}\nМаксимум: {max_amount}", "GO_TO_BALANCE_TOP_UP": "💳 Перейти к пополнению баланса", "HAPP_DOWNLOAD_BUTTON": "⬇️ Скачать Happ", "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Скачайте Happ для {platform}:", @@ -1158,6 +1160,7 @@ "PAYMENT_CARD_YOOKASSA": "💳 Банковская карта (YooKassa)", "PAYMENT_PLATEGA": "💳 Platega", "PAYMENT_CHARGE_ERROR": "⚠️ Ошибка списания средств", + "PAYMENT_CREATE_ERROR": "❌ Не удалось создать платёж. Попробуйте позже.", "PAYMENT_CRYPTOBOT": "🪙 Криптовалюта (CryptoBot)", "PAYMENT_HELEKET": "🪙 Криптовалюта (Heleket)", "HELEKET_PAYMENT_ALREADY_PAID": "✅ Платёж уже зачислен", @@ -1415,7 +1418,7 @@ "SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 Индивидуальная скидка {percent}%\n\nПрошло {trigger_days} дней без подписки. Вернитесь и активируйте дополнительную скидку — она суммируется с промогруппой и действует до {expires_at}.", "SUBSCRIPTION_EXPIRING": "\n⚠️ Подписка истекает!\n\nВаша подписка истекает через {days} дней.\n\nНе забудьте продлить подписку, чтобы не потерять доступ к серверам.\n", "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Подписка истекает через {days_text}!\n\nВаша платная подписка истекает {end_date}.\n\n💳 Автоплатеж: {autopay_status}\n\n{action_text}\n", - "SUBSCRIPTION_EXTEND": "💎 Продлить подписку", + "SUBSCRIPTION_EXTEND": "💎 Продлить", "SUBSCRIPTION_HAPP_CRYPTOLINK_BLOCK": "
{crypto_link}
", "SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Ссылка на подписку создана. Нажмите кнопку \"Подключиться\" ниже, чтобы открыть её в Happ.", "SUBSCRIPTION_HAPP_OPEN_BUTTON_HINT": "▶️ Нажмите кнопку \"Подключиться\" ниже, чтобы открыть Happ и добавить подписку автоматически.", @@ -1443,7 +1446,7 @@ "SUBSCRIPTION_PROMO_DISCOUNT_NOTE": "⚡ Доп. скидка {percent}%: -{amount}", "SUBSCRIPTION_PROMO_DISCOUNT_TIMER": "⏳ Скидка действует ещё: {time_left}\n{bar}", "SUBSCRIPTION_PURCHASED": "🎉 Подписка успешно приобретена!", - "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Настройки подписки", + "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Настройки", "SUBSCRIPTION_SETTINGS_OVERVIEW": "⚙️ Настройки подписки\n\n📊 Текущие параметры:\n🌐 Стран: {countries_count}\n📈 Трафик: {traffic_used} / {traffic_limit}\n📱 Устройства: {devices_used} / {devices_limit}\n\nВыберите что хотите изменить:", "SUBSCRIPTION_SETTINGS_PAID_ONLY": "⚠️ Настройки доступны только для платных подписок", "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", From 2b89748384977e364af0a6e14868673417a58565 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 11 Jan 2026 00:08:14 +0300 Subject: [PATCH 2/5] Update docker-hub.yml --- .github/workflows/docker-hub.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 06ebd817..ecc4234e 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -36,15 +36,15 @@ jobs: TAGS="fr1ngg/remnawave-bedolaga-telegram-bot:latest,fr1ngg/remnawave-bedolaga-telegram-bot:${VERSION}" echo "🏷️ Собираем релизную версию: $VERSION" elif [[ $GITHUB_REF == refs/heads/main ]]; then - VERSION="v2.9.5-$(git rev-parse --short HEAD)" + VERSION="v2.9.6-$(git rev-parse --short HEAD)" TAGS="fr1ngg/remnawave-bedolaga-telegram-bot:latest,fr1ngg/remnawave-bedolaga-telegram-bot:${VERSION}" echo "🚀 Собираем версию из main: $VERSION" elif [[ $GITHUB_REF == refs/heads/dev ]]; then - VERSION="v2.9.5-dev-$(git rev-parse --short HEAD)" + VERSION="v2.9.6-dev-$(git rev-parse --short HEAD)" TAGS="fr1ngg/remnawave-bedolaga-telegram-bot:dev,fr1ngg/remnawave-bedolaga-telegram-bot:${VERSION}" echo "🧪 Собираем dev версию: $VERSION" else - VERSION="v2.9.5-pr-$(git rev-parse --short HEAD)" + VERSION="v2.9.6-pr-$(git rev-parse --short HEAD)" TAGS="fr1ngg/remnawave-bedolaga-telegram-bot:pr-$(git rev-parse --short HEAD)" echo "🔀 Собираем PR версию: $VERSION" fi From 6a1eb3a530c53fb0b2245bc1a9898c5b25c698a1 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 11 Jan 2026 00:08:24 +0300 Subject: [PATCH 3/5] Update docker-registry.yml --- .github/workflows/docker-registry.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-registry.yml b/.github/workflows/docker-registry.yml index d23c7a8c..87ea6baa 100644 --- a/.github/workflows/docker-registry.yml +++ b/.github/workflows/docker-registry.yml @@ -49,13 +49,13 @@ jobs: VERSION=${GITHUB_REF#refs/tags/} echo "🏷️ Building release version: $VERSION" elif [[ $GITHUB_REF == refs/heads/main ]]; then - VERSION="v2.9.5-$(git rev-parse --short HEAD)" + VERSION="v2.9.6-$(git rev-parse --short HEAD)" echo "🚀 Building main version: $VERSION" elif [[ $GITHUB_REF == refs/heads/dev ]]; then - VERSION="v2.9.5-dev-$(git rev-parse --short HEAD)" + VERSION="v2.9.6-dev-$(git rev-parse --short HEAD)" echo "🧪 Building dev version: $VERSION" else - VERSION="v2.9.5-pr-$(git rev-parse --short HEAD)" + VERSION="v2.9.6-pr-$(git rev-parse --short HEAD)" echo "🔀 Building PR version: $VERSION" fi echo "version=$VERSION" >> $GITHUB_OUTPUT From 752850e56b0e3c2bebfbedc07c7fc2960acb48b4 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 11 Jan 2026 00:08:34 +0300 Subject: [PATCH 4/5] Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b11675f7..4f7bbed1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ RUN pip install --no-cache-dir --upgrade pip && \ FROM python:3.13-slim -ARG VERSION="v2.9.5" +ARG VERSION="v2.9.6" ARG BUILD_DATE ARG VCS_REF From 11a35e105862be8f27f954f74dd7ece9f449fb43 Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 11 Jan 2026 02:28:20 +0300 Subject: [PATCH 5/5] Update index.html --- miniapp/index.html | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/miniapp/index.html b/miniapp/index.html index 51ffe9f8..75dc2297 100644 --- a/miniapp/index.html +++ b/miniapp/index.html @@ -8916,8 +8916,8 @@ trafficTopupBtn.classList.remove('hidden'); // Сохраняем данные для модального окна window._trafficTopupPackages = trafficTopupPackages; - window._subscriptionId = userData?.subscription_id; - window._userBalance = userData?.balance_kopeks || 0; + window._subscriptionId = userData?.subscription_id ?? userData?.subscriptionId; + window._userBalance = userData?.balance_kopeks || userData?.balanceKopeks || 0; } else { trafficTopupBtn.classList.add('hidden'); } @@ -12251,14 +12251,19 @@ clearTrafficTopupError(); try { + const initData = tg.initData || ''; + const requestBody = { + initData: initData, + gb: gb + }; + if (window._subscriptionId) { + requestBody.subscriptionId = window._subscriptionId; + } + const response = await fetch('/miniapp/subscription/traffic-topup', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - initData: window._initData, - subscriptionId: window._subscriptionId, - gb: gb - }) + body: JSON.stringify(requestBody) }); const data = await response.json();