diff --git a/README.md b/README.md index e7eceb7a..6ce7fdcf 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,7 @@
-ChatGPT Image 23 окт  2025 г , 13_18_33 - +ChatGPT Image 23 окт 2025 г , 13_18_33 **🤖 Современный Telegram-бот для управления VPN подписками через Remnawave API** @@ -14,7 +13,7 @@ [![License](https://img.shields.io/badge/License-MIT-green)](LICENSE) [![GitHub Stars](https://img.shields.io/github/stars/Fr1ngg/remnawave-bedolaga-telegram-bot?style=social)](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/stargazers) -[🚀 Быстрый старт](#-быстрый-старт) • [📖 Функционал](#-функционал) • [🐳 Docker](#-docker-развертывание) • [💻 Локальная разработка](#-локальная-разработка) • [💬 Поддержка](#-поддержка-и-сообщество) +[🚀 Быстрый старт](#-быстрый-старт) • [📖 Функционал](#-функционал) • [🳠Docker](#-docker-развертывание) • [💻 Локальная разработка](#-локальная-разработка) • [💬 Поддержка](#-поддержка-и-сообщество)
@@ -38,12 +37,12 @@ - 🎯 **Готовое решение** - разверни за 5 минут, начни продавать сегодня - 💰 **Многоканальные платежи** - Telegram Stars + Tribute + CryptoBot + Heleket + YooKassa (СБП + карты) + MulenPay + PayPalych (СБП + карты) + Platega (карты + СБП) + WATA - 🔄 **Автоматизация 99%** - от регистрации до продления подписок -- - 📱 **MiniApp лк** - личный кабинет с возможностью покупки/продления подписки +- 📱 **MiniApp лк** - личный кабинет с возможностью покупки/продления подписки - 📊 **Детальная аналитика** - полная картина вашего бизнеса - 💬 **Уведомления в топики** об: Активация триала 💎 Покупка подписки 🔄 Конверсия из триала в платную ⏰ Продление подписки 💰 Пополнение баланса 🚧 Включении тех работ ♻️ Появлении новой версии бота ### 🎛️ **Гибкость конфигурации** -- 🌍 **Умный выбор серверов** - автоматический пропуск при одном сервере, мультивыбор +- 🌐 **Умный выбор серверов** - автоматический пропуск при одном сервере, мультивыбор - 📱 **Управление устройствами** - от 1 до неограниченного количества - 📊 **Режимы продажи трафика** - фиксированный лимит или выбор пакетов - 🎁 **Промо-система** - коды на деньги, дни подписки, триал-периоды @@ -51,13 +50,13 @@ - 🛒 **Умная корзина** - сохранение параметров подписки при недостатке баланса ### 💪 **Enterprise готовность** -- 🏗️ **Современная архитектура** - AsyncIO, PostgreSQL, Redis, модульная структура +- 🗃️ **Современная архитектура** - AsyncIO, PostgreSQL, Redis, модульная структура - 🔒 **Безопасность** - интеграция с системой защиты панели через куки-аутентификацию - 📈 **Масштабируемость** - от стартапа до крупного бизнеса - 🔧 **Мониторинг** - автоматическое управление режимом тех. работ - 🛡️ **Защита панели** - поддержка [remnawave-reverse-proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy) - 🗄️ **Бекапы/Восстановление** - автобекапы и восстановление бд прямо в боте с уведомлениями в топики -- ✍️ **Проверка на подписку** - проверяет подписку на канал +- ✔️ **Проверка на подписку** - проверяет подписку на канал - 🔄 **Автосинхронизация** - фоновая синхронизация подписок и серверов(сквадов) с Remnawave по расписанию ### 📚 Поддерживаемые методы авторизации @@ -83,7 +82,6 @@ mkdir -p ./logs ./data ./data/backups ./data/referral_qr chmod -R 755 ./logs ./data sudo chown -R 1000:1000 ./logs ./data - # 3. make up # Поднять контейнеры make help # Показать все команды @@ -91,11 +89,9 @@ make down # Остановить контейнеры make reload # Перезапустить make reload-follow # Перезапустить с логами make test # Запустить тесты - - ``` -### 🐳 Ручной Docker запуск +### 🳠Ручной Docker запуск Если не хочется пользоваться мастером, можно настроить всё вручную: @@ -122,21 +118,9 @@ docker compose logs --- -## 🌐 Настройка webhook-режима и обратного прокси +## 🌐 Настройка веб-сервера и обратного проксирования -> Встроенный FastAPI-сервер теперь обслуживает Telegram webhook, платежные webhooks, административное API и статические файлы миниапки на **одном порту 8080**. Снаружи вы публикуете только HTTPS-прокси, которое проксирует весь трафик на этот порт. - -### ♻️ Миграция со старой схемы (несколько портов) - -Если бот уже развернут в режиме polling или с отдельными контейнерами для `payments-webhook`, выполните переход на единую схему: - -1. **Обновите `.env`:** установите `BOT_RUN_MODE=webhook` (или `both` для гибридного режима), задайте `WEBHOOK_URL`, `WEBHOOK_PATH` и обязательно сгенерируйте собственный `WEBHOOK_SECRET_TOKEN` командой `openssl rand -hex 32`. -2. **Проверьте `docker-compose.*`:** оставьте публикацию только порта `8080` у сервиса `remnawave_bot`. Все значения `*_WEBHOOK_PORT` теперь используются лишь для обратной совместимости и могут быть удалены. -3. **Обновите прокси:** перенаправляйте *все* пути (`/webhook`, `/yookassa-webhook`, `/cryptobot-webhook`, `/miniapp/static`, `/app-config.json` и т.д.) на один upstream `remnawave_bot:8080`. Примеры Caddy/nginx ниже можно адаптировать к текущей инфраструктуре. -4. **Перезапустите сервисы:** `docker compose up -d --force-recreate bot` и затем перезагрузите прокси. После запуска бот автоматически зарегистрирует новый webhook. -5. **Проверьте здоровье:** `curl http://localhost:8080/health/unified` (или `/health`, если административное API отключено) и `curl http://localhost:8080/health/telegram-webhook`. Убедитесь, что в логах нет ошибок регистрации webhook. - -После миграции старые контейнеры/сервисы для отдельных вебхуков можно удалить. +> Встроенный FastAPI-сервер обслуживает Telegram webhook, платежные webhooks, административное API и статические файлы миниапки на **одном порту 8080**. Снаружи вы публикуете только HTTPS-прокси, которое проксирует весь трафик на этот порт. ### 1. Выбор режима запуска @@ -144,9 +128,41 @@ docker compose logs |----------------|------------|---------------------| | `polling` | Бот опрашивает Telegram через long polling. HTTP-сервер можно не поднимать. | Локальная отладка или отсутствие внешнего HTTPS. | | `webhook` | Aiogram получает апдейты только через вебхук. | Продакшн и серверы за HTTPS-прокси. | -| `both` | Одновременно работают polling и webhook. | Миграция с polling на webhook или повышенная отказоустойчивость. | +| `both` | Одновременно работают polling и webhook. | Тестирование или повышенная отказоустойчивость. | -### 2. Переменные окружения для webhook +### 2. Минимальные настройки для webhook + +Для запуска бота в режиме webhook минимально необходимы следующие параметры в `.env`: + +```env +# Обязательные базовые настройки +BOT_TOKEN=1234567890:AABBCCdd... +ADMIN_IDS=123456789,987654321 + +# Настройки webhook +BOT_RUN_MODE=webhook +WEBHOOK_URL=https://hooks.domain.com +WEBHOOK_PATH=/webhook +WEBHOOK_SECRET_TOKEN=super-secret-token + +# Настройки Web API +WEB_API_ENABLED=true +WEB_API_PORT=8080 +WEB_API_ALLOWED_ORIGINS=https://miniapp.example.com +WEB_API_DEFAULT_TOKEN=super-secret-token + +# Настройки Remnawave +REMNAWAVE_API_URL=https://your-panel.com +REMNAWAVE_API_KEY=your_api_key +``` + +**Важно:** +- `WEBHOOK_SECRET_TOKEN` - сгенерируйте командой `openssl rand -hex 32` +- `WEB_API_DEFAULT_TOKEN` - сгенерируйте командой `openssl rand -hex 32` +- `WEBHOOK_URL` должен быть доступен извне по HTTPS +- `WEB_API_ALLOWED_ORIGINS` - укажите домен, где будет размещена миниапка + +### 3. Полные настройки webhook (опционально) ```env BOT_RUN_MODE=webhook @@ -173,47 +189,107 @@ MINIAPP_CUSTOM_URL=https://bot.example.com/miniapp После изменения `.env` перезапустите сервис: `docker compose up -d remnawave_bot`. -### 3. Подготовка Docker-сети +### 4. Настройка Docker-сетей -`docker-compose.yml` создаёт сеть `bot_network`. Прокси должен находиться в той же сети, чтобы обращаться к контейнеру по имени `remnawave_bot`. +#### Вариант 1: Бот на отдельном сервере -```bash -docker network ls | grep bot_network || docker network create bot_network -docker network connect bot_network -``` - -Если прокси стартует отдельным compose-файлом, объявите сеть внешней: +Если бот запускается на отдельном сервере (не там, где панель Remnawave), используйте стандартную конфигурацию: +**docker-compose.yml бота:** ```yaml +services: + postgres: + image: postgres:15-alpine + container_name: remnawave_bot_db + restart: unless-stopped + environment: + POSTGRES_DB: ${POSTGRES_DB:-remnawave_bot} + POSTGRES_USER: ${POSTGRES_USER:-remnawave_user} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_123} + POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - bot_network + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-remnawave_user} -d ${POSTGRES_DB:-remnawave_bot}"] + interval: 30s + timeout: 5s + retries: 5 + start_period: 30s + + redis: + image: redis:7-alpine + container_name: remnawave_bot_redis + restart: unless-stopped + command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru + volumes: + - redis_data:/data + networks: + - bot_network + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 30s + timeout: 10s + retries: 3 + + bot: + build: . + container_name: remnawave_bot + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + env_file: + - .env + environment: + DOCKER_ENV: "true" + DATABASE_MODE: "auto" + POSTGRES_HOST: "postgres" + POSTGRES_PORT: "5432" + POSTGRES_DB: "${POSTGRES_DB:-remnawave_bot}" + POSTGRES_USER: "${POSTGRES_USER:-remnawave_user}" + POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-secure_password_123}" + REDIS_URL: "redis://redis:6379/0" + TZ: "Europe/Moscow" + LOCALES_PATH: "${LOCALES_PATH:-/app/locales}" + volumes: + - ./logs:/app/logs:rw + - ./data:/app/data:rw + - ./locales:/app/locales:rw + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - ./vpn_logo.png:/app/vpn_logo.png:ro + ports: + - "${WEB_API_PORT:-8080}:8080" + networks: + - bot_network + healthcheck: + test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8080/health\", timeout=5)' || exit 1"] + interval: 60s + timeout: 10s + retries: 3 + start_period: 30s + +volumes: + postgres_data: + driver: local + redis_data: + driver: local + networks: bot_network: - external: true + name: remnawave_bot_network + driver: bridge + ipam: + config: + - subnet: 172.20.0.0/16 + gateway: 172.20.0.1 ``` -### 4. Проверка здоровья - -Статические файлы миниапки автоматически монтируются из каталога `MINIAPP_STATIC_PATH` (по умолчанию `miniapp/`) и доступны по пути `/miniapp/static`. - -Проверьте, что единый сервер отвечает: - -```bash -curl -s https://bot.example.com/health/unified | jq -``` - -Полезные диагностические endpoints: - -- `/health/unified` — агрегированный статус (режим бота, очередь Telegram, наличие миниапки и платежей). Когда административное API отключено, тот же статус доступен по `/health`. -- `/health/telegram-webhook` — состояние очереди Telegram webhook. -- `/health/payment-webhooks` — какие платёжные интеграции активированы. - -### 5. Swagger и документация - -- Включите `WEB_API_DOCS_ENABLED=true`, если нужно открыть Swagger UI и OpenAPI. После перезапуска сервиса станут доступны эндпоинты `/docs`, `/doc` (редирект для обратной совместимости), `/redoc` и `/openapi.json`. -- Не забудьте проксировать эти пути через внешний HTTPS-прокси вместе с остальными эндпоинтами бота. -- В продакшене держите `WEB_API_DOCS_ENABLED=false`, чтобы документация не была публичной. При необходимости включайте временно или защищайте прокси базовой авторизацией/IP-фильтрацией. - -### 6. Пример Caddy-конфига - +**docker-compose.yml для Caddy (отдельный файл):** ```yaml services: caddy: @@ -236,9 +312,143 @@ volumes: networks: bot_network: + name: remnawave_bot_network external: true ``` +#### Вариант 2: Бот на одном сервере с панелью Remnawave + +Если бот и панель Remnawave запускаются на одном сервере, подключите бота к сети панели: + +**docker-compose.yml бота:** +```yaml +services: + postgres: + image: postgres:15-alpine + container_name: remnawave_bot_db + restart: unless-stopped + environment: + POSTGRES_DB: ${POSTGRES_DB:-remnawave_bot} + POSTGRES_USER: ${POSTGRES_USER:-remnawave_user} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_123} + POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" + volumes: + - postgres_data:/var/lib/postgresql/data + networks: + - bot_network + - remnawave-network # Подключаем к сети панели + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-remnawave_user} -d ${POSTGRES_DB:-remnawave_bot}"] + interval: 30s + timeout: 5s + retries: 5 + start_period: 30s + + redis: + image: redis:7-alpine + container_name: remnawave_bot_redis + restart: unless-stopped + command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru + volumes: + - redis_data:/data + networks: + - bot_network + - remnawave-network # Подключаем к сети панели + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 30s + timeout: 10s + retries: 3 + + bot: + build: . + container_name: remnawave_bot + restart: unless-stopped + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy + env_file: + - .env + environment: + DOCKER_ENV: "true" + DATABASE_MODE: "auto" + POSTGRES_HOST: "postgres" + POSTGRES_PORT: "5432" + POSTGRES_DB: "${POSTGRES_DB:-remnawave_bot}" + POSTGRES_USER: "${POSTGRES_USER:-remnawave_user}" + POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-secure_password_123}" + REDIS_URL: "redis://redis:6379/0" + TZ: "Europe/Moscow" + LOCALES_PATH: "${LOCALES_PATH:-/app/locales}" + volumes: + - ./logs:/app/logs:rw + - ./data:/app/data:rw + - ./locales:/app/locales:rw + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - ./vpn_logo.png:/app/vpn_logo.png:ro + ports: + - "${WEB_API_PORT:-8080}:8080" + networks: + - bot_network + - remnawave-network # Подключаем к сети панели + healthcheck: + test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8080/health\", timeout=5)' || exit 1"] + interval: 60s + timeout: 10s + retries: 3 + start_period: 30s + +volumes: + postgres_data: + driver: local + redis_data: + driver: local + +networks: + bot_network: + driver: bridge + ipam: + config: + - subnet: 172.20.0.0/16 + gateway: 172.20.0.1 + + remnawave-network: + name: remnawave-network + external: true # Используем существующую сеть панели +``` + +**Важно:** +- Сеть `remnawave-network` должна быть создана панелью Remnawave +- В `.env` укажите `REMNAWAVE_API_URL=http://remnawave:3000` (обращение внутри Docker-сети) +- Бот сможет напрямую общаться с панелью без внешних запросов + +### 5. Проверка здоровья + +Статические файлы миниапки автоматически монтируются из каталога `MINIAPP_STATIC_PATH` (по умолчанию `miniapp/`) и доступны по пути `/miniapp/static`. + +Проверьте, что единый сервер отвечает: + +```bash +curl -s https://bot.example.com/health/unified | jq +``` + +Полезные диагностические endpoints: + +- `/health/unified` — агрегированный статус (режим бота, очередь Telegram, наличие миниапки и платежей). Когда административное API отключено, тот же статус доступен по `/health`. +- `/health/telegram-webhook` — состояние очереди Telegram webhook. +- `/health/payment-webhooks` — какие платёжные интеграции активированы. + +### 6. Swagger и документация + +- Включите `WEB_API_DOCS_ENABLED=true`, если нужно открыть Swagger UI и OpenAPI. После перезапуска сервиса станут доступны эндпоинты `/docs`, `/doc` (редирект для обратной совместимости), `/redoc` и `/openapi.json`. +- Не забудьте проксировать эти пути через внешний HTTPS-прокси вместе с остальными эндпоинтами бота. +- В продакшене держите `WEB_API_DOCS_ENABLED=false`, чтобы документация не была публичной. При необходимости включайте временно или защищайте прокси базовой авторизацией/IP-фильтрацией. + +### 7. Пример Caddy-конфига + `Caddyfile`: ```caddy @@ -249,7 +459,7 @@ api.domain.com { @config path /app-config.json header @config Access-Control-Allow-Origin "*" - reverse_proxy localhost:8080 { + reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { @@ -264,7 +474,7 @@ podpiska.domain.com { # API эндпоинты /miniapp/* в приложение handle /miniapp/* { - reverse_proxy localhost:8080 { + reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { @@ -276,7 +486,7 @@ podpiska.domain.com { # app-config.json с CORS handle /app-config.json { header Access-Control-Allow-Origin "*" - reverse_proxy localhost:8080 { + reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { @@ -294,31 +504,9 @@ podpiska.domain.com { } ``` -#### +**Примечание:** Если прокси запускается на том же сервере, замените `remnawave_bot:8080` на `localhost:8080` -Либо вместо `remnawave_bot:8080` используйте `localhost:8080` - - -### 6. Пример nginx-конфига - -```yaml -services: - nginx: - image: nginx:1.25-alpine - container_name: remnawave_nginx - restart: unless-stopped - ports: - - "80:80" - - "443:443" - volumes: - - ./nginx.conf:/etc/nginx/nginx.conf:ro - networks: - - bot_network - -networks: - bot_network: - external: true -``` +### 8. Пример nginx-конфига `nginx.conf`: @@ -354,7 +542,7 @@ http { proxy_set_header X-Forwarded-Proto $scheme; } - # Все остальное + # Всё остальное location / { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; @@ -415,13 +603,11 @@ http { } ``` -#### - -Либо вместо `remnawave_bot:8080` используйте `localhost:8080` +**Примечание:** Если прокси запускается на том же сервере, замените `remnawave_bot:8080` на `localhost:8080` Рекомендации: -- Откройте входящие 80/443 в фаерволе. +- Откройте входящие 80/443 в файерволе. - Если используете Cloudflare/анти-DDoS, разрешите методы `POST` и заголовок `X-Telegram-Bot-Api-Secret-Token`. - После развёртывания перезапустите бот (`make reload`), чтобы он заново зарегистрировал webhook. @@ -448,7 +634,7 @@ http { - `BOT_RUN_MODE` — определяет способ приёма обновлений: `polling`, `webhook` или `both`, чтобы одновременно использовать оба режима. - `WEBHOOK_SECRET_TOKEN` — секрет для проверки заголовка `X-Telegram-Bot-Api-Secret-Token` при работе через вебхуки. - `WEBHOOK_DROP_PENDING_UPDATES` — управляет очисткой очереди сообщений при установке вебхука. -- `WEBHOOK_MAX_QUEUE_SIZE` — ограничивает длину очереди входящих обновлений, чтобы защищаться от перегрузок. +- `WEBHOOK_MAX_QUEUE_SIZE` — ограничивает длину очереди входящих обновлений, чтобы защащаться от перегрузок. - `WEBHOOK_WORKERS` — количество фоновых воркеров, параллельно обрабатывающих обновления Telegram. - `WEBHOOK_ENQUEUE_TIMEOUT` — сколько секунд ждать свободного места в очереди перед отказом (0 — немедленный отказ). - `WEBHOOK_WORKER_SHUTDOWN_TIMEOUT` — таймаут корректного завершения воркеров при остановке приложения. @@ -464,7 +650,7 @@ http { | Переменная | Описание | Пример | |------------|----------|--------| | `SERVER_STATUS_MODE` | Режим работы кнопки: `disabled`, `external_link`, `external_link_miniapp` или `xray` | `xray` | -| `SERVER_STATUS_EXTERNAL_URL` | Прямая ссылка на внешний мониторинг | `https://status.example.com` | +| `SERVER_STATUS_EXTERNAL_URL` | Прямаяссылка на внешний мониторинг | `https://status.example.com` | | `SERVER_STATUS_METRICS_URL` | URL страницы метрик XrayChecker | `https://sub.example.com/metrics` | ### 🛡️ Защита панели Remnawave @@ -551,7 +737,7 @@ DEFAULT_DEVICE_LIMIT=3 MAX_DEVICES_LIMIT=15 ``` -### 👥 Реферальная система +### 💥 Реферальная система ```env # Включение/выключение реферальной программы @@ -609,7 +795,7 @@ REDIS_URL=redis://redis:6379/0 -### 👤 **Для пользователей** +### 💤 **Для пользователей** 🧭 **Онбординг и доступ** - 🌐 Выбор языка интерфейса (RU/EN), динамическая локализация @@ -618,9 +804,9 @@ REDIS_URL=redis://redis:6379/0 - 🔗 Deeplink-инвайты, UTM-кампании и реферальные коды 🛒 **Умная покупка подписок** -- 📅 Гибкие периоды (14–360 дней) со скидками +- 📅 Гибкие периоды (14—360 дней) со скидками - 📊 Выбор трафика: фиксированный лимит, пакеты или безлимит -- 🌍 Автоматический выбор сервера или мультивыбор +- 🌐 Автоматический выбор сервера или мультивыбор - 📱 Настройка количества устройств и серверов - 🧾 Динамический калькулятор стоимости - 💾 **Сквозная корзина** - сохранение параметров при недостатке баланса @@ -640,10 +826,10 @@ REDIS_URL=redis://redis:6379/0 - 💰 CryptoBot (USDT, TON, BTC, ETH и др.) - 🪙 Heleket (криптовалюта с наценкой) - 💳 MulenPay (СБП) -- 🏦 PayPalych/Pal24 (СБП + карты) +- 🦐 PayPalych/Pal24 (СБП + карты) - 💳 Platega (СБП + банковские карты) - 💳 **WATA** -- 📥 Автогенерация счетов и webhook-уведомления +- 🔥 Автогенерация счетов и webhook-уведомления - 💼 История операций - 🔄 Автоплатёж с настройкой дня списания - 🎁 Реферальные и промо-бонусы @@ -651,7 +837,7 @@ REDIS_URL=redis://redis:6379/0 📱 **Управление подписками** - 📈 Реальный трафик, устройства и серверы -- 🌍 Переключение серверов и стран +- 🌐 Переключение серверов и стран - 📱 Сброс HWID - 🧩 Смена языка, промогруппы и параметров - 🧾 Просмотр активных услуг и статуса @@ -667,7 +853,7 @@ REDIS_URL=redis://redis:6379/0 - 🎁 **Персональные промо-предложения** от админов - 💰 **Тестовый доступ к серверам** через промо-акции - 💸 **Автоматические скидки** при оплате и автопродлении -- 👥 Реферальная программа с комиссиями и бонусами +- 💥 Реферальная программа с комиссиями и бонусами - 📊 Аналитика доходов и конверсии рефералов - 🔗 Генерация реферальных ссылок и QR кодов @@ -682,9 +868,9 @@ REDIS_URL=redis://redis:6379/0 - 🖥️ **Полноценный личный кабинет** в Telegram WebApp - 📊 Управление подпиской и параметрами - 💳 Интегрированные платежи -- 🎁 Активация промо-оферов и промокодов +- 🎁 Активация промо-офферов и промокодов - 📱 Управление устройствами -- 👥 Реферальная статистика +- 💥 Реферальная статистика - 📋 FAQ и юридические документы - 📥 Библиотека загрузочных ссылок для клиентов - 🛰️ Web API для внешних интеграций @@ -702,7 +888,7 @@ REDIS_URL=redis://redis:6379/0 - 🎯 **Статистика по промо-группам** и скидочным уровням - 📊 **Расширенная фильтрация** пользователей (баланс, траты, активность) -👥 **Управление пользователями** +💥 **Управление пользователями** - 🔍 Поиск по ID, имени, юзернейму, Telegram ID и фильтры - 💰 Ручное изменение баланса - 📱 Изменение лимитов устройств, трафика, серверов @@ -722,7 +908,7 @@ REDIS_URL=redis://redis:6379/0 - 📣 **Рекламные кампании** с deeplink и бонусами (Автовыдача подписки / баланса при переходе) - 📨 Рассылки по сегментам с медиа и кнопка - 🎨 **Кастомные кнопки** для рассылок (подключение, подписка, поддержка, партнертка и тд) -- 🔘 Настройка главного меню и приветственных экранов +- 📘 Настройка главного меню и приветственных экранов 🛟 **Поддержка и модерация** - 🎫 **Центр тикетов** с приоритетами и статусами @@ -749,18 +935,18 @@ REDIS_URL=redis://redis:6379/0 - 🗓️ **Умные автобекапы** с гибким расписанием - 📦 Ручные бекапы с выбором содержимого - 📤 Отправка архивов в выделенный чат/топик -- 🔁 Восстановление без остановки бота +- 🔓 Восстановление без остановки бота - ✅ Автоматическая синхронизация sequences после восстановления 💳 **Биллинг и настройки** - ⚙️ **Управление ценами** без перезапуска бота -- 🔘 **Управление пакетами трафика** (включение/отключение) +- 📘 **Управление пакетами трафика** (включение/отключение) - 🧪 Тестовые платежи для каждого провайдера -- 🪝 Управление вебхуками всех платёжных систем +- 🪙 Управление вебхуками всех платёжных систем -🏗️ **REST API для интеграций** +🗃️ **REST API для интеграций** - 🔌 **FastAPI Web API** с полной документацией -- 🔑 Управление API-ключами и токенами +- 🔒 Управление API-ключами и токенами - 📊 Эндпоинты для подписок, пользователей, транзакций - 🎁 API промо-системы и рассылок - 📋 API управления контентом и настройками @@ -775,22 +961,22 @@ REDIS_URL=redis://redis:6379/0 - 🔄 **Автосинхронизация серверов** - фоновая синхронизация по расписанию - 🛒 **Умная корзина** - сохранение параметров подписки в Redis при недостатке баланса - 🛡️ **Антифрод** - валидация подписки на канал -- 🚫 **Защита от блокировок** - автоблокировка подозрительных никнеймов и имитации фишинг аккаунтов +- 🚫 **Защита от блокировок** - автоблокировка подозрительных никнеймов и имитация фишинг аккаунтов - 🧠 **Асинхронная архитектура** - aiogram 3, PostgreSQL/SQLite, Redis и очереди задач - 🌐 **Мультиязычность** - локализации RU/EN, быстрый выбор языка - 📦 **Интеграция с Remnawave API** - автоматическое создание пользователей и синхронизация - 🔄 **Миграция сквадов** - массовый перенос пользователей между сквадами - 🧾 **История операций** - хранение всех транзакций и действий для аудита -- 💸 **Сервис автопрвоерки транзакций** - автоматическая проверка транзакций в статусе "В ожидании оплаты" за последние 24ч +- 💸 **Сервис автопрворки транзакций** - автоматическая проверка транзакций в статусе "В ожидании оплаты" за последние 24ч ### 🌐 Веб-API и мини-приложение - ⚙️ **FastAPI Web API** с эндпоинтами для управления всеми аспектами бота -- 🔑 **Управление API-ключами** - выпуск, отзыв, реактивация токенов +- 🔒 **Управление API-ключами** - выпуск, отзыв, реактивация токенов - 🛰️ **Mini App** - полноценный личный кабинет внутри Telegram - 💳 **Интегрированные платежи** в Mini App (Stars, Pal24, YooKassa, WATA) - 🧭 **Единый стандартный app-config.json** - централизованная раздача ссылок на клиенты -- 🪝 **Платёжные вебхуки** - встроенные серверы для всех платёжных систем +- 🪙 **Платёжные вебхуки** - встроенные серверы для всех платёжных систем - 📡 **Мониторинг серверов** - REST-эндпоинты для просмотра нод и статистики ## 🚀 Производительность @@ -804,14 +990,14 @@ REDIS_URL=redis://redis:6379/0 --- -## 🏗️ Технологический стек +## 🗃️ Технологический стек ### 💪 Современные технологии - **🐍 Python 3.13+** с AsyncIO - максимальная производительность - **🗄️ PostgreSQL 15+** - надежное хранение данных - **⚡ Redis** - быстрое кеширование и сессии (для корзины) -- **🐳 Docker** - простое развертывание в любой среде +- **🳠Docker** - простое развертывание в любой среде - **🔗 SQLAlchemy ORM** - безопасная работа с БД - **🚀 aiogram 3** - современная Telegram Bot API - **⚡ FastAPI** - высокопроизводительный REST API @@ -828,7 +1014,7 @@ REDIS_URL=redis://redis:6379/0 - Нажми **Синхронизация** и дождись завершения - Без этого пользователи не смогут выбирать страны! -2. **👥 Синхронизация пользователей** (если есть база) +2. **💥 Синхронизация пользователей** (если есть база) - **Админ панель** → **Remnawave** → **Синхронизация** - **Синхронизировать всех** → дождись импорта @@ -880,9 +1066,9 @@ ADMIN_NOTIFICATIONS_TICKET_TOPIC_ID=126 # ID топика для тикет --- -## 🐛 Устранение неполадок +## 🛠 Устранение неполадок -### 🏥 Health Checks +### 🥼 Health Checks - **Unified сервер**: `http://localhost:8080/health/unified` (или `/health`, если административное API отключено) - **Telegram webhook**: `http://localhost:8080/health/telegram-webhook` - **Платёжные webhooks**: `http://localhost:8080/health/payment-webhooks` @@ -929,7 +1115,7 @@ docker system prune ## 💡 Использование -### 👤 **Для пользователей** +### 💤 **Для пользователей** 1. **🚀 Старт** → Найди бота и нажми `/start` 2. **🌐 Язык** → Выбери язык интерфейса (RU/EN) @@ -937,21 +1123,21 @@ docker system prune 4. **💰 Баланс** → Пополни через любой удобный способ 5. **🛒 Подписка** → Выбери тариф и параметры 6. **📱 Подключение** → Получи ссылку или конфиг -7. **👥 Партнерка** → Поделись ссылкой и получай бонусы +7. **💥 Партнерка** → Поделись ссылкой и получай бонусы ### ⚙️ **Для администраторов** Доступ через **"⚙️ Админ панель"**: - **📦 Подписки** → настройка серверов, цен, синхронизация -- **👥 Пользователи** → поиск, редактирование, блокировка +- **💥 Пользователи** → поиск, редактирование, блокировка - **💎 Промо-группы** → управление скидочными группами и уровнями - **🎁 Промокоды** → создание и статистика - **🎯 Промо-предложения** → персональные акции и скидки - **📨 Рассылки** → уведомления по сегментам - **📣 Кампании** → управление рекламными кампаниями - **🎫 Тикеты** → система поддержки -- **📄 Контент** → политика, оферта, FAQ +- **🔄 Контент** → политика, оферта, FAQ - **🖥 Remnawave** → мониторинг, синхронизация - **📊 Статистика** → детальная аналитика @@ -959,7 +1145,7 @@ docker system prune ## 🛡️ Безопасность -### 🔐 Защита панели Remnawave +### 🔍 Защита панели Remnawave Бот поддерживает интеграцию с системой защиты панели: @@ -985,11 +1171,11 @@ REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD ## 🤝 Как помочь проекту -- 🔍 [**Сообщай о багах**](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues) с подробным описанием +- 🐛 [**Сообщай о багах**](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues) с подробным описанием - 💡 [**Предлагай идеи**](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/discussions) для улучшения - ⭐ **Ставь звезды** проекту - это мотивирует разработку! - 📢 **Рассказывай друзьям** о проекте -- 💝 **[Поддержи разработку](https://t.me/tribute/app?startapp=duUO)** - помоги проекту расти +- 👍 **[Поддержи разработку](https://t.me/tribute/app?startapp=duUO)** - помоги проекту расти - 🔧 **Отправляй Pull Requests** - внеси свой вклад в код --- @@ -1366,8 +1552,6 @@ docker compose up -d **Made with ❤️ by [@fringg](https://t.me/fringg) and amazing [contributors](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/graphs/contributors)** -**Версия:** v2.5.2 | **Последнее обновление:** 2024 -
### ⭐ Не забудь поставить звезду проекту!