# 🚀 Remnawave Bedolaga Bot
ChatGPT Image 23 окт 2025 г , 13_18_33 **🤖 Современный Telegram-бот для управления VPN подписками через Remnawave API** _Полнофункциональное решение с управлением пользователями, платежами и администрированием_ [![Python](https://img.shields.io/badge/Python-3.13+-blue?logo=python&logoColor=white)](https://python.org) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15+-blue?logo=postgresql&logoColor=white)](https://postgresql.org) [![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-развертывание) • [💻 Локальная разработка](#-локальная-разработка) • [💬 Поддержка](#-поддержка-и-сообщество)
--- ## 🧪 [Тестирование бота](https://t.me/FringVPN_bot) ## 💬 **[Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi)** - Для общения, вопросов, предложений --- ## 🌟 Почему Bedolaga? Бот Бедолага не добрый и не милый. Он просто делает вашу работу вместо вас, принимает оплату, выдаёт подписки, интегрируется с Remnawave и тихо ненавидит всех, кто ещё не подключил его. Вы хотите продавать VPN — Бедолага позволит это делать. Вы хотите спать — он позволит и это... ### ⚡ **Полная автоматизация VPN бизнеса** - 🎯 **Готовое решение** - разверни за 5 минут, начни продавать сегодня - 💰 **Многоканальные платежи** - Telegram Stars + Tribute + CryptoBot + Heleket + YooKassa (СБП + карты) + MulenPay + PayPalych (СБП + карты) + Platega (карты + СБП) + WATA + Freekassa (NSPK СБП + карты) + CloudPayments (карты + СБП) - 🔄 **Автоматизация 99%** - от регистрации до продления подписок - 📱 **MiniApp лк** - личный кабинет с возможностью покупки/продления подписки - 📊 **Детальная аналитика** - полная картина вашего бизнеса - 💬 **Уведомления в топики** об: Активация триала 💎 Покупка подписки 🔄 Конверсия из триала в платную ⏰ Продление подписки 💰 Пополнение баланса 🚧 Включении тех работ ♻️ Появлении новой версии бота ### 🎛️ **Гибкость конфигурации** - 🌐 **Умный выбор серверов** - автоматический пропуск при одном сервере, мультивыбор - 📱 **Управление устройствами** - от 1 до неограниченного количества - 📊 **Режимы продажи трафика** - фиксированный лимит или выбор пакетов - 🎯 **Режим тарифов** - готовые тарифные планы с фиксированными параметрами - 🎁 **Промо-система** - коды на деньги, дни подписки, триал-периоды - 🔧 **Гибкие тарифы** - от 5GB до безлимита, от 14 дней до года - 🛒 **Умная корзина** - сохранение параметров подписки при недостатке баланса ### 💪 **Enterprise готовность** - 🗃️ **Современная архитектура** - AsyncIO, PostgreSQL, Redis, модульная структура - 🔒 **Безопасность** - интеграция с системой защиты панели через куки-аутентификацию - 📈 **Масштабируемость** - от стартапа до крупного бизнеса - 🔧 **Мониторинг** - автоматическое управление режимом тех. работ - 🛡️ **Защита панели** - поддержка [remnawave-reverse-proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy) - 🗄️ **Бекапы/Восстановление** - автобекапы и восстановление бд прямо в боте с уведомлениями в топики - ✔️ **Проверка на подписку** - проверяет подписку на канал - 🔄 **Автосинхронизация** - фоновая синхронизация подписок и серверов(сквадов) с Remnawave по расписанию - 📝 **Ротация логов** - автоматическая очистка и архивация старых логов - 🚫 **Система ограничений** - блокировка пользователей по различным критериям - 🎮 **Конкурсы и игры** - ежедневные игры с призами и реферальные конкурсы - 📡 **Модем-подписки** - дополнительный функционал для устройств-модемов ### 📚 Поддерживаемые методы авторизации | Конфигурация | Authorization | X-Api-Key | | ---------------- | ------------------- | ------------------- | | Только API Key | Bearer | | | Basic Auth | Bearer | Basic | | Caddy + API Key | Basic | | | Cookies (eGames) | Bearer | + cookies | --- ## 🚀 Быстрый старт ```bash # 1. Скачай репозиторий git clone https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot.git cd remnawave-bedolaga-telegram-bot # 2. Создай необходимые директории mkdir -p ./logs ./data ./data/backups ./data/referral_qr chmod -R 755 ./logs ./data sudo chown -R 1000:1000 ./logs ./data # 3.Установи «Docker» командой: sudo curl -fsSL https://get.docker.com | sh # 4.Установи «make» следующей командой: apt install make -y make up # Поднять контейнеры make help # Показать все команды make down # Остановить контейнеры make reload # Перезапустить make reload-follow # Перезапустить с логами make test # Запустить тесты ``` ### 🳠Ручной Docker запуск Если не хочется пользоваться мастером, можно настроить всё вручную: ```bash # 1. Скачай репозиторий git clone https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot.git cd remnawave-bedolaga-telegram-bot # 2. Настрой конфиг cp .env.example .env nano .env # Заполни токены и настройки # 3. Создай необходимые директории mkdir -p ./logs ./data ./data/backups ./data/referral_qr chmod -R 755 ./logs ./data sudo chown -R 1000:1000 ./logs ./data # 4. Запусти всё разом docker compose up -d # 5. Проверь статус docker compose logs ``` --- ## 🌐 Настройка веб-сервера и обратного проксирования > Встроенный FastAPI-сервер обслуживает Telegram webhook, платежные webhooks, административное API и статические файлы миниапки на **одном порту 8080**. Снаружи вы публикуете только HTTPS-прокси, которое проксирует весь трафик на этот порт. ### 1. Выбор режима запуска | `BOT_RUN_MODE` | Что делает | Когда использовать | | -------------- | --------------------------------------------------------------------------- | ------------------------------------------------ | | `polling` | Бот опрашивает Telegram через long polling. HTTP-сервер можно не поднимать. | Локальная отладка или отсутствие внешнего HTTPS. | | `webhook` | Aiogram получает апдейты только через вебхук. | Продакшн и серверы за HTTPS-прокси. | | `both` | Одновременно работают polling и 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.domain.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 WEBHOOK_URL=https://hooks.domain.com WEBHOOK_PATH=/webhook WEBHOOK_SECRET_TOKEN=super-secret-token WEBHOOK_DROP_PENDING_UPDATES=true WEBHOOK_MAX_QUEUE_SIZE=1024 WEBHOOK_WORKERS=4 WEBHOOK_ENQUEUE_TIMEOUT=0.1 WEBHOOK_WORKER_SHUTDOWN_TIMEOUT=30.0 WEB_API_ENABLED=true WEB_API_HOST=0.0.0.0 WEB_API_PORT=8080 WEB_API_ALLOWED_ORIGINS=https://miniapp.domain.com ``` - `WEBHOOK_URL` — публичный HTTPS-домен прокси. К нему автоматически добавится путь из `WEBHOOK_PATH`. - `WEBHOOK_SECRET_TOKEN` — защитный токен Telegram, обязательно задайте своё значение. - Очередь можно тюнить через `WEBHOOK_MAX_QUEUE_SIZE`, `WEBHOOK_WORKERS`, `WEBHOOK_ENQUEUE_TIMEOUT` и `WEBHOOK_WORKER_SHUTDOWN_TIMEOUT`. - Если миниапка или админка доступны по другим доменам, перечислите их через запятую в `WEB_API_ALLOWED_ORIGINS`. После изменения `.env` перезапустите сервис: `docker compose up -d remnawave_bot`. ### 4. Настройка Docker-сетей #### Вариант 1: Бот на отдельном сервере Если бот запускается на отдельном сервере (не там, где панель 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, os; requests.get(''http://localhost:8080/health'', headers={''X-API-Key'': os.environ.get(''WEB_API_DEFAULT_TOKEN'')}, timeout=5) or exit(1)"', ] interval: 60s timeout: 10s retries: 3 start_period: 30s volumes: postgres_data: driver: local redis_data: driver: local networks: bot_network: name: remnawave_bot_network driver: bridge ipam: config: - subnet: 172.20.0.0/16 gateway: 172.20.0.1 driver_opts: com.docker.network.driver.mtu: 1350 ``` **docker-compose.yml для Caddy (отдельный файл):** ```yaml services: caddy: image: caddy:2-alpine container_name: remnawave_caddy restart: unless-stopped ports: - '80:80' - '443:443' volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config networks: - bot_network volumes: caddy_data: caddy_config: networks: bot_network: name: remnawave_bot_network external: true ``` #### Вариант 2: Бот на одном сервере с панелью Remnawave Если бот и панель Remnawave запускаются на одном сервере, подключите бота к сети панели: **docker-compose.local.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, os; requests.get(''http://localhost:8080/health'', headers={''X-API-Key'': os.environ.get(''WEB_API_DEFAULT_TOKEN'')}, timeout=5) or 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 driver_opts: com.docker.network.driver.mtu: 1350 remnawave-network: name: remnawave-network external: true # Используем существующую сеть панели ``` **Важно:** - Сеть `remnawave-network` должна быть создана панелью Remnawave - В `.env` укажите `REMNAWAVE_API_URL=http://remnawave:3000` (обращение внутри Docker-сети) - Бот сможет напрямую общаться с панелью без внешних запросов ### 5. Проверка здоровья Проверьте, что единый сервер отвечает: ```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 # Hooks + API hooks.domain.com { encode gzip zstd # Webhook пути для платежных систем handle /yookassa-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /platega-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /cryptobot-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /wata-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /heleket-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /tribute-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /pal24-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /mulenpay-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /freekassa-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } handle /cloudpayments-webhook { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } # app-config.json с CORS handle /app-config.json { header Access-Control-Allow-Origin "*" reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } # Все остальные запросы handle { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } } # Статика для miniapp miniapp.domain.com { encode gzip zstd # API эндпоинты /miniapp/* в приложение handle /miniapp/* { reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } # app-config.json с CORS handle /app-config.json { header Access-Control-Allow-Origin "*" reverse_proxy remnawave_bot:8080 { header_up Host {host} header_up X-Real-IP {remote_host} transport http { read_buffer 0 } } } # Статические файлы (корень и всё остальное) handle { root * /var/www/remnawave-miniapp try_files {path} /index.html file_server } } ``` **Примечание:** Если прокси запускается на том же сервере, замените `remnawave_bot:8080` на `localhost:8080` ### 8. Пример nginx-конфига `nginx.conf`: ```nginx events {} http { include /etc/nginx/mime.types; sendfile on; upstream remnawave_bot_unified { server remnawave_bot:8080; } # Hooks + API домен server { listen 80; listen 443 ssl http2; server_name hooks.domain.com; ssl_certificate /etc/ssl/private/hooks.fullchain.pem; ssl_certificate_key /etc/ssl/private/hooks.privkey.pem; client_max_body_size 32m; # Webhook пути для платежных систем location = /yookassa-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /platega-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /cryptobot-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /wata-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /heleket-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /tribute-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /pal24-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /mulenpay-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /freekassa-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } location = /cloudpayments-webhook { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } # app-config.json с CORS location = /app-config.json { add_header Access-Control-Allow-Origin "*"; proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Всё остальное location / { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } } # Miniapp домен (статика + API) server { listen 80; listen 443 ssl http2; server_name miniapp.domain.com; ssl_certificate /etc/ssl/private/miniapp.fullchain.pem; ssl_certificate_key /etc/ssl/private/miniapp.privkey.pem; client_max_body_size 32m; # API эндпоинты /miniapp/* location /miniapp/ { proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 120s; proxy_send_timeout 120s; proxy_buffering off; proxy_request_buffering off; } # app-config.json с CORS location = /app-config.json { add_header Access-Control-Allow-Origin "*"; proxy_pass http://remnawave_bot_unified; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Статические файлы location / { root /var/www/remnawave-miniapp; try_files $uri $uri/ /index.html; # Кэширование expires 1h; add_header Cache-Control "public, immutable"; } } } ``` **Примечание:** Если прокси запускается на том же сервере, замените `remnawave_bot:8080` на `localhost:8080` Рекомендации: - Откройте входящие 80/443 в файерволе. - Если используете Cloudflare/анти-DDoS, разрешите методы `POST` и заголовок `X-Telegram-Bot-Api-Secret-Token`. - После развёртывания перезапустите бот (`make reload`), чтобы он заново зарегистрировал webhook. ### Быстрая настройка SSL для Nginx в Docker #### 1. Установка Certbot ```bash sudo apt update && sudo apt install certbot -y ``` #### 2. Генерация сертификатов ```bash # Остановите Nginx Docker контейнер docker compose down # Сгенерируйте сертификаты (порт 80 должен быть свободен) sudo certbot certonly --standalone -d hooks.domain.com --agree-tos --email your-email@example.com --non-interactive sudo certbot certonly --standalone -d miniapp.domain.com --agree-tos --email your-email@example.com --non-interactive ``` #### 3. Копирование сертификатов ```bash sudo mkdir -p /etc/ssl/private sudo cp /etc/letsencrypt/live/hooks.domain.com/fullchain.pem /etc/ssl/private/hooks.fullchain.pem sudo cp /etc/letsencrypt/live/hooks.domain.com/privkey.pem /etc/ssl/private/hooks.privkey.pem sudo cp /etc/letsencrypt/live/miniapp.domain.com/fullchain.pem /etc/ssl/private/miniapp.fullchain.pem sudo cp /etc/letsencrypt/live/miniapp.domain.com/privkey.pem /etc/ssl/private/miniapp.privkey.pem sudo chmod 600 /etc/ssl/private/*.pem ``` #### 4. Обновите docker-compose.yml ```yaml services: nginx: image: nginx:latest container_name: nginx ports: - '80:80' - '443:443' volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - /etc/ssl/private:/etc/ssl/private:ro - /var/www/remnawave-miniapp:/var/www/remnawave-miniapp:ro networks: - remnawave-network restart: unless-stopped networks: remnawave-network: external: true ``` #### 5. Запуск Nginx ```bash docker compose up -d ``` #### 6. Автообновление сертификатов ```bash # Создайте скрипт обновления sudo tee /opt/renew-certs.sh > /dev/null <<'EOF' #!/bin/bash # Останавливаем Nginx для освобождения порта 80 docker compose -f /путь/к/docker-compose.yml down # Обновляем сертификаты certbot renew --quiet # Копируем обновленные сертификаты cp /etc/letsencrypt/live/hooks.domain.com/fullchain.pem /etc/ssl/private/hooks.fullchain.pem cp /etc/letsencrypt/live/hooks.domain.com/privkey.pem /etc/ssl/private/hooks.privkey.pem cp /etc/letsencrypt/live/miniapp.domain.com/fullchain.pem /etc/ssl/private/miniapp.fullchain.pem cp /etc/letsencrypt/live/miniapp.domain.com/privkey.pem /etc/ssl/private/miniapp.privkey.pem chmod 600 /etc/ssl/private/*.pem # Запускаем Nginx обратно docker compose -f /путь/к/docker-compose.yml up -d EOF # Сделайте скрипт исполняемым sudo chmod +x /opt/renew-certs.sh # Добавьте в cron (запуск каждый день в 3:00 AM) echo "0 3 * * * /opt/renew-certs.sh" | sudo crontab - ``` #### Проверка работы SSL ```bash curl -I https://hooks.domain.com curl -I https://miniapp.domain.com ``` **Важно:** - Замените `domain.com` и `your-email@example.com` на свои данные - Замените `/путь/к/docker-compose.yml` на реальный путь к вашему docker-compose файлу - Убедитесь, что DNS записи для доменов указывают на IP вашего сервера --- ## ⚙️ Конфигурация ### 🔧 Основные параметры | Настройка | Где взять | Пример | | ---------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------ | | 🤖 **BOT_TOKEN** | [@BotFather](https://t.me/BotFather) | `1234567890:AABBCCdd...` | | 👑 **ADMIN_IDS** | Твой Telegram ID | `123456789,987654321` | | **BOT_RUN_MODE** | определяет способ приёма обновлений: `polling`, `webhook` или `both`, чтобы одновременно использовать оба режима. | [Полный список доступных параметров:](.env.example) ### 🌐 Интеграция веб-админки Подробное пошаговое руководство по запуску административного веб-API и подключению внешней панели находится в [docs/web-admin-integration.md](docs/web-admin-integration.md). ### 🤖 Режимы запуска бота - `BOT_RUN_MODE` — определяет способ приёма обновлений: `polling`, `webhook` или `both`, чтобы одновременно использовать оба режима. - `WEBHOOK_SECRET_TOKEN` — секрет для проверки заголовка `X-Telegram-Bot-Api-Secret-Token` при работе через вебхуки. - `WEBHOOK_DROP_PENDING_UPDATES` — управляет очисткой очереди сообщений при установке вебхука. - `WEBHOOK_MAX_QUEUE_SIZE` — ограничивает длину очереди входящих обновлений, чтобы защащаться от перегрузок. - `WEBHOOK_WORKERS` — количество фоновых воркеров, параллельно обрабатывающих обновления Telegram. - `WEBHOOK_ENQUEUE_TIMEOUT` — сколько секунд ждать свободного места в очереди перед отказом (0 — немедленный отказ). - `WEBHOOK_WORKER_SHUTDOWN_TIMEOUT` — таймаут корректного завершения воркеров при остановке приложения. ### 📱 Telegram Mini App ЛК Инструкция по развёртыванию мини-приложения, публикации статической страницы и настройке reverse-proxy доступна в [docs/miniapp-setup.md](docs/miniapp-setup.md). Путь к статическим файлам мини-приложения можно переопределить через переменную `MINIAPP_STATIC_PATH`. ### 📊 Статус серверов в главном меню | Переменная | Описание | Пример | | ---------------------------- | ------------------------------------------------------------------------------------ | --------------------------------- | | `SERVER_STATUS_MODE` | Режим работы кнопки: `disabled`, `external_link`, `external_link_miniapp` или `xray` | `xray` | | `SERVER_STATUS_EXTERNAL_URL` | Прямаяссылка на внешний мониторинг | `https://status.example.com` | | `SERVER_STATUS_METRICS_URL` | URL страницы метрик XrayChecker | `https://sub.example.com/metrics` | ### 🛡️ Защита панели Remnawave Для панелей, защищенных через [remnawave-reverse-proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy): ```env # Для панелей установленных скриптом eGames REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD # Или если ключ и значение одинаковые REMNAWAVE_SECRET_KEY=secret_key_name ``` ### 💳 Freekassa Платёжный провайдер [Freekassa](https://freekassa.ru) поддерживает NSPK СБП и банковские карты. ```env FREEKASSA_ENABLED=true FREEKASSA_SHOP_ID=12345 FREEKASSA_API_KEY=your_api_key FREEKASSA_SECRET_WORD_1=secret1 FREEKASSA_SECRET_WORD_2=secret2 FREEKASSA_USE_API=true FREEKASSA_PAYMENT_SYSTEM_ID=44 # 44 = NSPK СБП, 42 = обычный СБП ``` **Важно:** - `FREEKASSA_USE_API=true` - использовать API для создания заказов (рекомендуется для NSPK) - `FREEKASSA_USE_API=false` - редирект на платежную форму - `FREEKASSA_PAYMENT_SYSTEM_ID=44` - для NSPK СБП (быстрее и надежнее) - Настройте webhook на `https://your-domain.com/freekassa-webhook` ### 💳 CloudPayments Платёжный провайдер [CloudPayments](https://cloudpayments.ru) поддерживает оплату банковскими картами и СБП. ```env CLOUDPAYMENTS_ENABLED=true CLOUDPAYMENTS_PUBLIC_ID=pk_xxxxxxxxxxxxx CLOUDPAYMENTS_API_SECRET=your_api_secret CLOUDPAYMENTS_CURRENCY=RUB ``` **Важно:** - `CLOUDPAYMENTS_PUBLIC_ID` - Public ID из личного кабинета CloudPayments - `CLOUDPAYMENTS_API_SECRET` - API Secret для подписи запросов - Настройте webhook (Pay/Fail уведомления) на `https://your-domain.com/cloudpayments-webhook` - Поддерживает 3D-Secure для безопасных платежей ### 💳 Platega.io Платёжный провайдер [Platega.io](https://platega.io) добавляет ещё один способ приёма оплат картой и по СБП. Включите его, если у вас есть кабинет мерчанта и доступ к API. 1. В кабинете Platega получите `Merchant ID` и `Secret` (раздел **Интеграция → API**). 2. В настройках провайдера укажите URL возврата и ошибки. Их можно задать в `.env` (`PLATEGA_RETURN_URL`, `PLATEGA_FAILED_URL`). 3. Активируйте только нужные платёжные методы и пропишите их ID через запятую в `PLATEGA_ACTIVE_METHODS`. 4. Добавьте вебхук `https://your-domain.com/platega-webhook` в личном кабинете Platega. Пример набора переменных окружения: ```env PLATEGA_ENABLED=true PLATEGA_MERCHANT_ID=your_merchant_id PLATEGA_SECRET=your_secret_key PLATEGA_RETURN_URL=https://your-domain.com/payments/success PLATEGA_FAILED_URL=https://your-domain.com/payments/failed PLATEGA_ACTIVE_METHODS=2,10,11 PLATEGA_MIN_AMOUNT_KOPEKS=100 PLATEGA_MAX_AMOUNT_KOPEKS=5000000 PLATEGA_CURRENCY=RUB PLATEGA_WEBHOOK_PATH=/platega-webhook ``` Остальные параметры (`PLATEGA_BASE_URL`, `PLATEGA_WEBHOOK_HOST`, `PLATEGA_WEBHOOK_PORT`) оставьте по умолчанию, если работаете через встроенный FastAPI сервер. ### 📊 Режимы продажи трафика #### **Выбираемые пакеты** (по умолчанию) ```env TRAFFIC_SELECTION_MODE=selectable TRAFFIC_PACKAGES_CONFIG="5:2000:false,10:3500:false,25:7000:false,50:11000:true,100:15000:true,250:17000:false,500:19000:false,1000:19500:true,0:20000:true" ``` #### **Фиксированный лимит** ```env TRAFFIC_SELECTION_MODE=fixed FIXED_TRAFFIC_LIMIT_GB=100 # 0 = безлимит TRAFFIC_PACKAGES_CONFIG="100:15000:true" ``` ### 🎯 Режим тарифов Альтернативный режим продаж с готовыми тарифными планами: ```env # Включение режима тарифов SALES_MODE=tariffs # classic | tariffs # Тарифы настраиваются в админ-панели бота # Каждый тариф содержит: название, период, трафик, устройства, серверы, цену ``` **Преимущества режима тарифов:** - Готовые пакеты без сложного выбора параметров - Упрощенный UX для пользователей - Возможность создавать акционные тарифы - Поддержка скидок промогрупп на тарифы ### 💰 Система ценообразования Цена подписки рассчитывается по формуле: **Базовая цена + Стоимость трафика + Доп. устройства + Доп. серверы** **Пример расчета для подписки на 180 дней:** - Базовый период: 400₽ - Трафик безлимит: 200₽/мес × 6 мес = 1200₽ - 4 устройства: 50₽/мес × 6 мес = 300₽ - 2 сервера: 100₽/мес × 6 мес = 1200₽ - **Итого: 3100₽** ### 📱 Управление устройствами ```env # Бесплатные устройства в триал подписке TRIAL_DEVICE_LIMIT=1 # Требовать оплату за активацию триала TRIAL_PAYMENT_ENABLED=false # Стоимость активации триала (в копейках) TRIAL_ACTIVATION_PRICE=0 # Бесплатные устройства в платной подписке DEFAULT_DEVICE_LIMIT=3 # Максимум устройств для покупки (0 = без лимита) MAX_DEVICES_LIMIT=15 ``` ### 💥 Реферальная система ```env # Включение/выключение реферальной программы REFERRAL_PROGRAM_ENABLED=true # Минимальная сумма пополнения для активации бонусов REFERRAL_MINIMUM_TOPUP_KOPEKS=10000 # Бонус новому пользователю при первом пополнении REFERRAL_FIRST_TOPUP_BONUS_KOPEKS=10000 # Бонус пригласившему при первом пополнении реферала REFERRAL_INVITER_BONUS_KOPEKS=10000 # Процент комиссии с последующих пополнений REFERRAL_COMMISSION_PERCENT=25 ``` ### 🔄 Автосинхронизация Remnawave ```env # Включение автоматической синхронизации серверов REMNAWAVE_AUTO_SYNC_ENABLED=true # Время синхронизации (через запятую, формат HH:MM) REMNAWAVE_AUTO_SYNC_TIMES=03:00,15:00 ``` ### 🛡️ Мониторинг и техническое обслуживание ```env # Автоматический режим тех. работ MAINTENANCE_MODE=false MAINTENANCE_AUTO_ENABLE=true MAINTENANCE_MONITORING_ENABLED=true MAINTENANCE_CHECK_INTERVAL=30 MAINTENANCE_RETRY_ATTEMPTS=1 # Интервал проверки состояния панели (секунды) MONITORING_INTERVAL=60 ``` ### 🛒 Умная корзина ```env # Redis для сохранения корзины (требуется) REDIS_URL=redis://redis:6379/0 ``` ### 🎮 Конкурсы и игры ```env # Видимость кнопки конкурсов в главном меню CONTEST_BUTTON_VISIBLE=true # Конкурсы и ежедневные игры настраиваются в админ-панели # Типы призов: баланс, дни подписки, промогруппа ``` **Возможности системы конкурсов:** - Реферальные конкурсы с рейтингами - Ежедневные игры с гарантированными призами - Детальная статистика участников - Гибкая настройка призов (баланс, подписка, промогруппа) ### 🚫 Система ограничений пользователей ```env # Управление ограничениями через админ-панель # Типы ограничений: покупка, триал, пополнение баланса ``` Позволяет блокировать отдельные функции для пользователей без полной блокировки аккаунта. ### 📝 Ротация логов ```env # Настройка ротации логов LOG_ROTATION_ENABLED=true LOG_ROTATION_MAX_SIZE_MB=100 LOG_ROTATION_MAX_FILES=10 ``` ### 👁️ Управление видимостью ```env # Скрытие кнопок пополнения баланса HIDE_TOPUP_BUTTONS=false # Скрытие реферальной программы REFERRAL_PROGRAM_VISIBLE=true # Видимость кнопки конкурсов CONTEST_BUTTON_VISIBLE=true ``` --- #### ⭐ Функционал
### 💤 **Для пользователей** 🧭 **Онбординг и доступ** - 🌐 Выбор языка интерфейса (RU/EN), динамическая локализация - 📜 Принятие правил, оферты и политики конфиденциальности - 📡 Проверка подписки на обязательный канал - 🔗 Deeplink-инвайты, UTM-кампании и реферальные коды 🛒 **Умная покупка подписок** - 📅 Гибкие периоды (14—360 дней) со скидками - 📊 Выбор трафика: фиксированный лимит, пакеты или безлимит - 🌐 Автоматический выбор сервера или мультивыбор - 📱 Настройка количества устройств и серверов - 🧾 Динамический калькулятор стоимости - 💾 **Сквозная корзина** - сохранение параметров при недостатке баланса - ↩️ Быстрый возврат к оформлению после пополнения - 🎯 **Режим тарифов** - готовые пакеты без сложного выбора - 🛒 **Простая покупка** - упрощенный режим для быстрого оформления 🧪 **Тестовая подписка** - 🎁 Гибко настраиваемый триал и welcome-цепочка - 🔔 Уведомления об истечении и автоконверсия - 💎 Автовыдача бонусов за кампании и инвайты - 🛡️ Контроль обязательной подписки на канал (отключает подписку при отписке) - 💎 Автовыдача сквада из пула выбранных - 💳 **Платный триал** с выбором способа оплаты 💰 **Платежи и баланс** - ⭐ Telegram Stars - 💳 Tribute - 💳 YooKassa (СБП + банковские карты) - 💰 CryptoBot (USDT, TON, BTC, ETH и др.) - 🪙 Heleket (криптовалюта с наценкой) - 💳 MulenPay (СБП) - 🦐 PayPalych/Pal24 (СБП + карты) - 💳 Platega (СБП + банковские карты) - 💳 **WATA** - 💳 **Freekassa** (NSPK СБП + карты) - 💳 **CloudPayments** (карты + СБП) - 🔥 Автогенерация счетов и webhook-уведомления - 💼 История операций - 🔄 Автоплатёж с настройкой дня списания - 🎁 Реферальные и промо-бонусы - ⚡ **Быстрое пополнение** с кнопками быстрых сумм - 🔄 **Умная автоактивация** подписки после пополнения баланса 📱 **Управление подписками** - 📈 Реальный трафик, устройства и серверы - 🌐 Переключение серверов и стран - 📱 Сброс HWID - 🧩 Смена языка, промогруппы и параметров - 🧾 Просмотр активных услуг и статуса - 🔗 Получение ссылок подключения в один клик - 📡 **Модем-режим** - дополнительные устройства для модемов 🛟 **Поддержка и самообслуживание** - 🎫 **Система тикетов** с вложениями - 📚 FAQ, правила, оферта и политика - 💬 Быстрые ссылки на поддержку 🧩 **Бонусы и промо** - 🎫 Промокоды на деньги, дни, триал подписку, промогруппу - 🎁 **Персональные промо-предложения** от админов - 💰 **Тестовый доступ к серверам** через промо-акции - 💸 **Автоматические скидки** при оплате и автопродлении - 💥 Реферальная программа с комиссиями и бонусами - 📊 Аналитика доходов и конверсии рефералов - 🔗 Генерация реферальных ссылок и QR кодов 🎮 **Конкурсы и игры** - 🎲 **Ежедневные игры** с призами (баланс, подписка, промогруппа) - 🏆 **Реферальные конкурсы** с рейтингами и наградами - 📊 **Детальная статистика** участия в конкурсах - 🎁 **Разнообразные призы** - баланс, дни подписки, промогруппы 💎 **Промо-группы и скидки** - 🏷️ **Система промогрупп** с индивидуальными скидками с приоритетами - 💰 Скидки на серверы, трафик и устройства - 📊 **Скидочные уровни за траты** - прозрачная система лояльности - 📈 Автоматическое повышение уровня при достижении порога - 🎯 **Скидки за длительные периоды** подписки для базовых юзеров 📱 **Mini App и гайды** - 🖥️ **Полноценный личный кабинет** в Telegram WebApp - 📊 Управление подпиской и параметрами - 💳 Интегрированные платежи - 🎁 Активация промо-офферов и промокодов - 📱 Управление устройствами - 💥 Реферальная статистика - 📋 FAQ и юридические документы - 📥 Библиотека загрузочных ссылок для клиентов - 🛰️ Web API для внешних интеграций - 🎯 **Отображение тарифа** при режиме тарифов ### ⚙️ **Для администраторов** 📊 **Аналитика и отчётность** - 📈 Дашборды по пользователям, подпискам и трафику - 💰 Детализация платежей по всем источникам - 🧮 Продажи по тарифам, устройствам и странам - 📣 Эффективность кампаний, промокодов и UTM - 🎯 **Статистика по промо-группам** и скидочным уровням - 📊 **Расширенная фильтрация** пользователей (баланс, траты, активность, трафик) - 🏆 **Топ рефереров** по периодам с детальной аналитикой - 📡 **Мониторинг трафика** и выявление злоупотреблений 💥 **Управление пользователями** - 🔍 Поиск по ID, имени, юзернейму, Telegram ID и фильтры - 💰 Ручное изменение баланса - 📱 Изменение лимитов устройств, трафика, серверов - 🔄 Сброс HWID и перегенерация подписки - 🎯 Назначение промогрупп и тарифов - 💳 **Покупка подписки пользователю** прямо из админки - ⏰ **Продление/сокращение срока** подписки (±365 дней) - 🚫 Блокировки с таймером и аудит действий - 🛡️ **Защита от запрещенных никнеймов** с настраиваемым список банвордов - 💰 **Установка индивидуального реферального процента юзеру** - 💬 **Отправка сообщения** конкретному пользователю - 🚫 **Система ограничений** - блокировка функций (покупка, триал, пополнение) - 📊 **Расширенные фильтры** - по балансу, тратам, трафику, активности - 🔄 **Готовы к продлению** - фильтр пользователей для продления - 🗑️ **Черный список** пользователей с управлением 🎯 **Продажи, маркетинг и удержание** - 🎫 Промокоды - 💳 Промо-группы со скидками - 🎁 **Персональные промо-предложения** с поиском получателей - 💸 **Тестовые серверы** - временная выдача доступа - 💰 **Автоматические скидки** при оплате - 📣 **Рекламные кампании** с deeplink и бонусами - 📨 Рассылки по сегментам с медиа и кнопками - 🎨 **Кастомные кнопки** для рассылок - 📘 Настройка главного меню и приветственных экранов - 🎮 **Управление конкурсами** - создание и настройка призов - 🎲 **Ежедневные игры** с настраиваемыми призами - 📊 **Детальная статистика** реферальных конкурсов - 👁️ **Видимость кнопок** - управление отображением конкурсов и реферальной программы 🛟 **Поддержка и модерация** - 🎫 **Центр тикетов** с приоритетами и статусами - ⏱️ **SLA таймеры** и автоуведомления - 🧑‍⚖️ Роли модераторов с ограниченным доступом - 📊 Детальный журнал всех операций - 🚫 Блокировки нарушителей - 🧾 История диалогов и быстрые ответы - 🔔 **Уведомления об ответах** на тикеты для админов 🔔 **Уведомления и коммуникации** - 📢 **Топики для событий** (покупки, триалы, техработы) - 🔔 Настройка уведомлений и расписаний - 📨 **Управление контентом** - политика, оферта, FAQ - 💬 Автоматические сообщения о задолженностях 🧰 **Обслуживание и DevOps** - 🚧 Ручной и авто-режим техработ - 🗒️ Просмотр системных логов и health-check - 🔄 **Автосинхронизация Remnawave** по расписанию и при старте бота - ♻️ Проверка обновлений репозитория - 📊 **Мониторинг серверов** (интеграция с XrayChecker) - 📝 **Ротация логов** - автоматическая очистка и архивация - 🔄 **Массовая синхронизация** пользователей с Remnawave 🗄️ **Бекапы и восстановление** - 🗓️ **Умные автобекапы** с гибким расписанием - 📦 Ручные бекапы с выбором содержимого - 📤 Отправка архивов в выделенный чат/топик - 🔓 Восстановление без остановки бота - ✅ Автоматическая синхронизация sequences после восстановления 💳 **Биллинг и настройки** - ⚙️ **Управление ценами** без перезапуска бота - 📘 **Управление пакетами трафика** (включение/отключение) - 🧪 Тестовые платежи для каждого провайдера - 🪙 Управление вебхуками всех платёжных систем - ⚙️ **Управление настройками из бота** (с приоритетом в .env) - 🎯 **Режим тарифов** - готовые планы с фиксированными параметрами - 🛒 **Простая покупка подписки** - упрощенный режим без выбора параметров - 👁️ **Скрытие кнопок** пополнения баланса - 👁️ **Скрытие реферальной** программы ⚙️ **Remnawave** - Синхронизация юзеров из панели в бота (Ручная/автоматическая по таймеру) - Синхронизация юзеров из бота в панель - Синхронизация сквадов(серверов) из панели в бота - Управление нодами/сквадами прямо в боте - Детальная статистика по нодам/панели - Создание/Редактивание сквадов в боте 🗃️ **REST API для интеграций** - 🔌 **FastAPI Web API** с полной документацией - 🔒 Управление API-ключами и токенами - 📊 Эндпоинты для подписок, пользователей, транзакций - 🎁 API промо-системы и рассылок - 📋 API управления контентом и настройками
### 🤖 Автоматизация и экосистема - 🔄 **Мониторинг Remnawave** - регулярная проверка API, автоматическое включение/выключение техработ - 🔄 **Автосинхронизация серверов** - фоновая синхронизация по расписанию - 🛒 **Умная корзина** - сохранение параметров подписки в Redis при недостатке баланса - 🛡️ **Антифрод** - валидация подписки на канал - 🚫 **Защита от блокировок** - автоблокировка подозрительных никнеймов и имитация фишинг аккаунтов - 🧠 **Асинхронная архитектура** - aiogram 3, PostgreSQL/SQLite, Redis и очереди задач - 🌐 **Мультиязычность** - локализации RU/EN, быстрый выбор языка - 📦 **Интеграция с Remnawave API** - автоматическое создание пользователей и синхронизация - 🔄 **Миграция сквадов** - массовый перенос пользователей между сквадами - 🧾 **История операций** - хранение всех транзакций и действий для аудита - 💸 **Сервис автопроверки транзакций** - автоматическая проверка транзакций в статусе "В ожидании оплаты" за последние 24ч - 🔄 **Умная автоактивация** - автоматическая активация подписки после пополнения баланса - 📝 **Ротация логов** - автоматическая очистка и архивация старых логов - 🎮 **Система конкурсов** - ежедневные игры и реферальные конкурсы с призами ### 🌐 Веб-API и мини-приложение - ⚙️ **FastAPI Web API** с эндпоинтами для управления всеми аспектами бота - 🔒 **Управление API-ключами** - выпуск, отзыв, реактивация токенов - 🛰️ **Mini App** - полноценный личный кабинет внутри Telegram - 💳 **Интегрированные платежи** в Mini App (Stars, Pal24, YooKassa, WATA, Freekassa, CloudPayments) - 🧭 **Единый стандартный app-config.json** - централизованная раздача ссылок на клиенты - 🪙 **Платёжные вебхуки** - встроенные серверы для всех платёжных систем - 📡 **Мониторинг серверов** - REST-эндпоинты для просмотра нод и статистики ## 🚀 Производительность | Пользователей | Память | CPU | Диск | Описание | | ------------- | ------ | ------- | ------ | ----------------- | | **1,000** | 512MB | 1 vCPU | 10GB | ✅ Стартап | | **10,000** | 2GB | 2 vCPU | 50GB | ✅ Малый бизнес | | **50,000** | 4GB | 4 vCPU | 100GB | ✅ Средний бизнес | | **100,000+** | 8GB+ | 8+ vCPU | 200GB+ | 🚀 Enterprise | --- ## 🗃️ Технологический стек ### 💪 Современные технологии - **🐍 Python 3.13+** с AsyncIO - максимальная производительность - **🗄️ PostgreSQL 15+** - надежное хранение данных - **⚡ Redis** - быстрое кеширование и сессии (для корзины) - **🳠Docker** - простое развертывание в любой среде - **🔗 SQLAlchemy ORM** - безопасная работа с БД - **🚀 aiogram 3** - современная Telegram Bot API - **⚡ FastAPI** - высокопроизводительный REST API - **📦 Pydantic v2** - валидация данных --- ## 🔧 Первичная настройка После запуска необходимо: 1. **📡 Синхронизация серверов** (обязательно!) - Зайди в бот → **Админ панель** → **Подписки** → **Управление серверами** - Нажми **Синхронизация** и дождись завершения - Без этого пользователи не смогут выбирать страны! 2. **💥 Синхронизация пользователей** (если есть база) - **Админ панель** → **Remnawave** → **Синхронизация** - **Синхронизировать всех** → дождись импорта 3. **💳 Настройка платежных систем** - **Telegram Stars**: Работает автоматически - **Tribute**: Настрой webhook на `https://your-domain.com/tribute-webhook` - **YooKassa**: Настрой webhook на `https://your-domain.com/yookassa-webhook` - **CryptoBot**: Настрой webhook на `https://your-domain.com/cryptobot-webhook` - **Heleket**: Настрой webhook на `https://your-domain.com/heleket-webhook` - **MulenPay**: Настрой webhook на `https://your-domain.com/mulenpay-webhook` - **PayPalych**: Укажи Result URL `https://your-domain.com/pal24-webhook` в кабинете Pal24 - **Platega**: Настрой webhook на `https://your-domain.com/platega-webhook` - **WATA**: Настрой webhook на `https://your-domain.com/wata-webhook` - **Freekassa**: Настрой webhook на `https://your-domain.com/freekassa-webhook` - **CloudPayments**: Настрой Pay/Fail уведомления на `https://your-domain.com/cloudpayments-webhook` 4. **🔄 Настройка автосинхронизации** (опционально) - В `.env` установи `REMNAWAVE_AUTO_SYNC_ENABLED=true` - Укажи время синхронизации в `REMNAWAVE_AUTO_SYNC_TIMES=03:00,15:00` ### 🛠️ Настройка уведомлений в топик группы #### 1. Переменные окружения Добавьте в файл `.env`: ```env # Уведомления администраторов ADMIN_NOTIFICATIONS_ENABLED=true ADMIN_NOTIFICATIONS_CHAT_ID=-1001234567890 # ID канала/группы ADMIN_NOTIFICATIONS_TOPIC_ID=123 # ID топика (опционально) ADMIN_NOTIFICATIONS_TICKET_TOPIC_ID=126 # ID топика для тикетов ``` #### 2. Создание канала 1. **Создайте приватный канал** или группу для уведомлений 2. **Добавьте бота** как администратора с правами отправки сообщений 3. **Получите ID канала**: - Отправьте любое сообщение в канал - Перешлите его боту @userinfobot - Скопируйте Chat ID (например: `-1001234567890`) #### 3. Настройка топиков (опционально) Если используете супергруппу с топиками: 1. **Включите топики** в настройках группы 2. **Создайте топики** для уведомлений (например, "Уведомления", "Тикеты") 3. **Получите ID топика** из URL веб-версии Telegram или используйте бота --- ## 🛠 Устранение неполадок ### 🥼 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` ### 🔧 Полезные команды ```bash # Просмотр логов в реальном времени docker compose logs -f bot # Статус всех контейнеров docker compose ps # Перезапуск только бота docker compose restart bot # Проверка базы данных docker compose exec postgres pg_isready -U remnawave_user # Подключение к базе данных docker compose exec postgres psql -U remnawave_user -d remnawave_bot # Проверка Redis docker compose exec redis redis-cli ping # Проверка использования ресурсов docker stats # Очистка Docker docker system prune ``` ### 🚨 Частые проблемы и решения | Проблема | Диагностика | Решение | | -------------------------- | ---------------------------------------------------- | -------------------------------------- | | **Бот не отвечает** | `docker logs remnawave_bot` | Проверь `BOT_TOKEN` и интернет | | **Ошибки БД** | `docker compose ps postgres` | Проверь статус PostgreSQL | | **Webhook не работает** | `curl http://localhost:8080/health/telegram-webhook` | Проверь `WEBHOOK_URL`, прокси и секрет | | **API недоступен** | Проверь логи бота | Проверь `REMNAWAVE_API_URL` | | **Корзина не сохраняется** | `docker compose ps redis` | Проверь статус Redis | | **Платежи не проходят** | Проверь webhook'и | Настрой URL в платежных системах | --- ## 💡 Использование ### 💤 **Для пользователей** 1. **🚀 Старт** → Найди бота и нажми `/start` 2. **🌐 Язык** → Выбери язык интерфейса (RU/EN) 3. **📋 Правила** → Прими правила сервиса 4. **💰 Баланс** → Пополни через любой удобный способ 5. **🛒 Подписка** → Выбери тариф и параметры 6. **📱 Подключение** → Получи ссылку или конфиг 7. **💥 Партнерка** → Поделись ссылкой и получай бонусы ### ⚙️ **Для администраторов** Доступ через **"⚙️ Админ панель"**: - **📦 Подписки** → настройка серверов, цен, синхронизация - **💥 Пользователи** → поиск, редактирование, блокировка - **💎 Промо-группы** → управление скидочными группами и уровнями - **🎁 Промокоды** → создание и статистика - **🎯 Промо-предложения** → персональные акции и скидки - **📨 Рассылки** → уведомления по сегментам - **📣 Кампании** → управление рекламными кампаниями - **🎫 Тикеты** → система поддержки - **🔄 Контент** → политика, оферта, FAQ - **🖥 Remnawave** → мониторинг, синхронизация - **📊 Статистика** → детальная аналитика --- ## 🛡️ Безопасность ### 🔍 Защита панели Remnawave Бот поддерживает интеграцию с системой защиты панели: ```env # Для защищенных панелей REMNAWAVE_SECRET_KEY=secret_name:secret_value # Для панелей eGames скрипта REMNAWAVE_SECRET_KEY=XXXXXXX:DDDDDDDD ``` ### 🔒 Дополнительные меры безопасности - **Валидация всех входящих данных** - **Rate limiting для защиты от спама** - **Шифрование чувствительных данных** - **Автоматическое управление сессиями** - **Мониторинг подозрительной активности** - **Защита от запрещенных никнеймов** - автоблокировка имитации официальных аккаунтов - **Защита от обфусцированных доменов** в отображаемом имени --- ## 🤝 Как помочь проекту - 🐛 [**Сообщай о багах**](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)** - помоги проекту расти - 🔧 **Отправляй Pull Requests** - внеси свой вклад в код --- ## 💬 Поддержка и сообщество ### 📞 **Контакты** - **💬 Telegram:** [@fringg](https://t.me/fringg) - вопросы по разработке (только по делу!) - **💬 Telegram Group:** [Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi) - общение, вопросы, предложения - **🐛 Issues:** [GitHub Issues](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues) - баги и предложения ### 📚 **Полезные ресурсы** - **📖 [https://docs.remna.st](https://docs.rw)))** - документация панели - **🤖 [Telegram Bot API](https://core.telegram.org/bots/api)** - API ботов - **🐳 [Docker Guide](https://docs.docker.com/get-started/)** - обучение Docker - **🛡️ [Reverse Proxy](https://github.com/eGamesAPI/remnawave-reverse-proxy)** - защита панели --- ### 🎉 **Сообщество** - **Remnawave Team** - за отличную панель и стабильный API - **Сообщество Bedolaga** - за активное тестирование и обратную связь - **Всем пользователям** - за доверие и использование бота --- ## 📋 Roadmap ### 🚧 **В разработке** - 🌎 **Веб-панель** - полноценная административная панель - 🔄 **API для интеграций** - подключение внешних сервисов - 🎨 **Темы оформления** - Новая тема интерфейса Mini App by https://t.me/arpicme --- ## 📄 Лицензия Проект распространяется под лицензией **MIT** [📜 Посмотреть лицензию](LICENSE) --- ## 🚀 Начни уже сегодня!

🧪 Протестируй бота

Test Bot

💬 Присоединись к сообществу

Community

⭐ Поставь звезду

Star

💝 Поддержи проект

Donate
--- ## 📈 Статистика проекта ![GitHub stars](https://img.shields.io/github/stars/Fr1ngg/remnawave-bedolaga-telegram-bot?style=social) ![GitHub forks](https://img.shields.io/github/forks/Fr1ngg/remnawave-bedolaga-telegram-bot?style=social) ![GitHub watchers](https://img.shields.io/github/watchers/Fr1ngg/remnawave-bedolaga-telegram-bot?style=social) ![GitHub last commit](https://img.shields.io/github/last-commit/Fr1ngg/remnawave-bedolaga-telegram-bot) ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/Fr1ngg/remnawave-bedolaga-telegram-bot) ![GitHub contributors](https://img.shields.io/github/contributors/Fr1ngg/remnawave-bedolaga-telegram-bot) ![GitHub issues](https://img.shields.io/github/issues/Fr1ngg/remnawave-bedolaga-telegram-bot) ![GitHub pull requests](https://img.shields.io/github/issues-pr/Fr1ngg/remnawave-bedolaga-telegram-bot) ![GitHub closed issues](https://img.shields.io/github/issues-closed/Fr1ngg/remnawave-bedolaga-telegram-bot) --- ## 🎯 Ключевые особенности в цифрах | Метрика | Значение | | -------------------------- | ----------------------------------------------------------------------------------------------------------- | | 💳 **Платёжных систем** | 11 (Stars, YooKassa, Tribute, CryptoBot, Heleket, MulenPay, Pal24, Platega, WATA, Freekassa, CloudPayments) | | 🌍 **Языков интерфейса** | 2 (RU, EN) с возможностью расширения | | 📊 **Периодов подписки** | 6 (от 14 дней до года) | | 🎁 **Типов промо-акций** | 5 (коды, группы, предложения, скидки, кампании) | | 🔌 **REST API эндпоинтов** | 50+ для полного управления | | 📱 **Режимов работы** | 3 (классический + тарифы + MiniApp focus) | | 🛡️ **Методов авторизации** | 4 (API Key, Bearer, Basic Auth, eGames) | | 🗄️ **Способов хранения** | 2 (PostgreSQL, SQLite) с автовыбором | --- ## 🔥 Почему выбирают Bedolaga? ### 💼 **Для бизнеса** ✅ **Быстрый запуск** - от установки до первых продаж за 10 минут ✅ **Полная автоматизация** - бот работает 24/7 без вашего участия ✅ **Прозрачная аналитика** - всегда знаете, сколько зарабатываете ✅ **Гибкие тарифы** - настройте цены под свою аудиторию ✅ **Система лояльности** - удерживайте клиентов промо-группами и скидками ✅ **Масштабируемость** - от 10 до 100,000+ пользователей ### 🛠️ **Для разработчиков** ✅ **Современный стек** - Python 3.13, AsyncIO, PostgreSQL, Redis ✅ **Модульная архитектура** - легко расширять и модифицировать ✅ **Полное API** - интегрируйте с любыми сервисами ✅ **Docker-ready** - разворачивается за минуты ✅ **Подробная документация** - все описано и понятно ✅ **Активное сообщество** - помощь в Telegram чате ### 👥 **Для пользователей** ✅ **Простой интерфейс** - интуитивно понятное меню на родном языке ✅ **Много способов оплаты** - выбирайте удобный вариант ✅ **Быстрая поддержка** - система тикетов с приоритетами ✅ **Прозрачность** - всегда видите, за что платите ✅ **Бонусы и скидки** - реферальная программа и промо-акции ✅ **Удобное управление** - все в одном месте, в Telegram --- ## 💡 Советы по оптимизации ### ⚡ Повышение производительности 1. **Используйте Redis** для корзины и кэширования 2. **Настройте автосинхронизацию** в ночное время 3. **Включите автобэкапы** с отправкой в Telegram 4. **Оптимизируйте логирование** - LOG_LEVEL=INFO для продакшена 5. **Используйте PostgreSQL** вместо SQLite для больших баз ### 💰 Увеличение продаж 1. **Включите реферальную программу** - пользователи приведут друзей 2. **Настройте промо-группы** - дайте скидки постоянным клиентам 3. **Используйте персональные акции** - реактивируйте неактивных 4. **Запускайте кампании** - привлекайте новых через deeplink 5. **Добавьте быстрое пополнение** - упростите процесс оплаты ### 🎯 Улучшение UX 1. **Включите Mini App режим** - современный интерфейс 2. **Настройте корзину** - пользователи не потеряют выбор 3. **Добавьте FAQ** - ответьте на частые вопросы заранее 4. **Настройте быстрые ответы** - ускорьте поддержку 5. **Используйте уведомления** - держите пользователей в курсе --- ## 🔐 Безопасность и соответствие ### 🛡️ Защита данных - ✅ Шифрование чувствительных данных в БД - ✅ Безопасное хранение токенов и ключей - ✅ Валидация всех входящих данных - ✅ Защита от SQL-инъекций через ORM - ✅ Rate limiting для предотвращения злоупотреблений - ✅ Аудит всех административных действий ### 📋 Юридическое соответствие - ✅ Политика конфиденциальности (настраивается) - ✅ Публичная оферта (настраивается) - ✅ Правила использования (настраивается) - ✅ История транзакций для аудита - ✅ Соответствие требованиям платёжных систем - ✅ GDPR-ready (возможность удаления данных) --- ## 📞 Нужна помощь? ### 🆘 Частые вопросы
Какие требования к серверу? Минимальные: - 1 vCPU - 512 MB RAM - 10 GB диск - Ubuntu 20.04+ или Debian 11+ - Docker и Docker Compose Рекомендуемые: - 2+ vCPU - 2+ GB RAM - 50+ GB SSD - Стабильное интернет-соединение
Как настроить платёжную систему? 1. Получите ключи API в личном кабинете платёжной системы 2. Добавьте их в `.env` файл 3. Настройте webhook URL в кабинете провайдера 4. Протестируйте через админ-панель бота 5. Включите метод для пользователей Подробнее: [docs/payment-setup.md](docs/payment-setup.md)
Как обновить бота? **Вручную:** ```bash cd /root/remnawave-bedolaga-telegram-bot # Обновление до последнего коммита (до последней мастер ветки, не всегда стабильно): git pull origin main # Обновление до конкретной версии (более стабильно, релиз версии): git fetch --tags git checkout v2.7.0 # Перезагружаем конты: make reload # Перезагружаем конты с логами: make reload-follow ``` Скрипт автоматически создаст бэкап перед обновлением!
Как сделать бэкап? **Автоматически:** - Настройте в `.env`: `BACKUP_AUTO_ENABLED=true` - Бэкапы создаются по расписанию **Через админ-панель:** - Админ панель → Настройки → Бэкапы → Создать
Бот не отвечает, что делать? 1. Проверьте статус: `docker compose ps` 2. Посмотрите логи: `docker compose logs -f bot` 3. Проверьте BOT_TOKEN в `.env` 4. Убедитесь, что все контейнеры запущены 5. Попробуйте перезапустить: `docker compose restart` Если не помогло - пишите в [чат поддержки](https://t.me/+wTdMtSWq8YdmZmVi)
### 💬 Куда обратиться? - 🐛 **Баг?** → [GitHub Issues](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/issues) - 💡 **Идея?** → [GitHub Discussions](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/discussions) - 🆘 **Вопрос?** → [Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi) - 📧 **Личное?** → [@fringg](https://t.me/fringg) --- **Made with ❤️ by [@fringg](https://t.me/fringg) and amazing [contributors](https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot/graphs/contributors)**
### ⭐ Не забудь поставить звезду проекту! [![Star History Chart](https://api.star-history.com/svg?repos=Fr1ngg/remnawave-bedolaga-telegram-bot&type=Date)](https://star-history.com/#Fr1ngg/remnawave-bedolaga-telegram-bot&Date)