From 38deb70f8118d371e36ac92a4417bdb543635fc9 Mon Sep 17 00:00:00 2001 From: Fringg Date: Wed, 18 Mar 2026 06:37:49 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20redesign=20README=20=E2=80=94=20concise?= =?UTF-8?q?=20feature=20showcase,=20link=20to=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace 2200-line README with a clean 190-line version: - Centered header with badges (for-the-badge style) - Feature grid (2x2 HTML table) - Payment providers showcase (14 providers) - Quick start (4 lines → link to full docs) - Tech stack table - Cabinet section with link to repo - Documentation links to docs.bedolagam.ru - Community section All setup/config details moved to docs.bedolagam.ru. --- README.md | 2299 ++++------------------------------------------------- 1 file changed, 145 insertions(+), 2154 deletions(-) diff --git a/README.md b/README.md index 6aae90d0..85153970 100644 --- a/README.md +++ b/README.md @@ -1,2198 +1,189 @@ -# 🚀 Remnawave Bedolaga Bot - -> **🆕 Новый веб-кабинет (Cabinet WebApp) https://github.com/BEDOLAGA-DEV/bedolaga-cabinet/** -> -> Вышла новая версия личного кабинета пользователя — веб-интерфейс для управления подписками! -> -> **Переменные окружения для Cabinet:** -> | Переменная | Описание | По умолчанию | -> |------------|----------|--------------| -> | `CABINET_ENABLED` | Включить личный кабинет | `false` | -> | `CABINET_JWT_SECRET` | Секретный ключ для JWT токенов | `BOT_TOKEN` | -> | `CABINET_ACCESS_TOKEN_EXPIRE_MINUTES` | Время жизни access token (минуты) | `15` | -> | `CABINET_REFRESH_TOKEN_EXPIRE_DAYS` | Время жизни refresh token (дни) | `7` | -> | `CABINET_ALLOWED_ORIGINS` | Разрешённые origins для CORS | — | -> | `CABINET_EMAIL_VERIFICATION_ENABLED` | Включить верификацию email | `false` | -> | `CABINET_EMAIL_VERIFICATION_EXPIRE_HOURS` | Время жизни токена верификации email (часы) | `24` | -> | `CABINET_PASSWORD_RESET_EXPIRE_HOURS` | Время жизни токена сброса пароля (часы) | `1` | -> -> Для работы email-уведомлений настройте SMTP-переменные: `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD`, `SMTP_FROM_EMAIL`, `SMTP_FROM_NAME`, `SMTP_USE_TLS`. -
-Image +Bedolaga Bot -**🤖 Современный Telegram-бот для управления VPN подписками через Remnawave API** +# Bedolaga Bot -_Полнофункциональное решение с управлением пользователями, платежами и администрированием_ +**Telegram-бот для автоматизации VPN-бизнеса на базе [Remnawave](https://github.com/remnawave/backend)** -[![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-развертывание) • [💻 Локальная разработка](#-локальная-разработка) • [💬 Поддержка](#-поддержка-и-сообщество) +[![Python 3.13+](https://img.shields.io/badge/Python-3.13+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://python.org) +[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-15+-4169E1?style=for-the-badge&logo=postgresql&logoColor=white)](https://postgresql.org) +[![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://docs.bedolagam.ru/getting-started/docker-deployment) +[![License: MIT](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](LICENSE) + +[Документация](https://docs.bedolagam.ru) · [Тестировать бота](https://t.me/zero_ping_vpn_bot?start=Git) · [Чат сообщества](https://t.me/+wTdMtSWq8YdmZmVi)
--- -## 🧪 [Тестирование бота](https://t.me/zero_ping_vpn_bot?start=Git) +## Что такое Bedolaga? -## 💬 **[Bedolaga Chat](https://t.me/+wTdMtSWq8YdmZmVi)** - Для общения, вопросов, предложений +Bedolaga — полнофункциональная платформа для продажи VPN-подписок через Telegram. Бот интегрируется с панелью [Remnawave](https://github.com/remnawave/backend) и берёт на себя весь цикл: от регистрации пользователя до автопродления подписки. + +> **[Bedolaga Cabinet](https://github.com/BEDOLAGA-DEV/bedolaga-cabinet)** — веб-кабинет, который существенно расширяет возможности бота: личный кабинет пользователя, OAuth-авторизация, лендинги, расширенная админ-панель с аналитикой продаж и управлением ролями. --- -## 🌟 Почему 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-прокси. | - -### 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 - } - } - } - - handle /riopay-webhook { - reverse_proxy remnawave_bot:8080 { - header_up Host {host} - header_up X-Real-IP {remote_host} - transport http { - read_buffer 0 - } - } - } - - handle /remnawave-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; - } - - location = /riopay-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 = /remnawave-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`. | - -[Полный список доступных параметров:](.env.example) - -### 🌐 Интеграция веб-админки - -Подробное пошаговое руководство по запуску административного веб-API и подключению внешней панели находится в [docs/web-admin-integration.md](docs/web-admin-integration.md). - -### 🤖 Режимы запуска бота - -- `BOT_RUN_MODE` — определяет способ приёма обновлений: `polling` или `webhook`. -- `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 -``` - -### 📡 Вебхуки Remnawave (real-time события) - -Бот может принимать входящие вебхуки от панели Remnawave для мгновенной реакции на события подписок. Это значительно улучшает скорость обновления данных по сравнению с периодической синхронизацией. - -#### Поддерживаемые события - -| Событие | Описание | -|---------|----------| -| `user.expired` | Подписка истекла | -| `user.disabled` | Подписка деактивирована | -| `user.enabled` | Подписка активирована | -| `user.limited` | Превышен лимит трафика | -| `user.traffic_reset` | Трафик сброшен | -| `user.modified` | Данные подписки изменены (трафик, дата, URL) | -| `user.deleted` | Пользователь удалён | -| `user.revoked` | Ключи подписки отозваны | -| `user.created` | Пользователь создан | -| `user.expires_in_*` | Предупреждения об истечении (72ч, 48ч, 24ч) | -| `user.first_connected` | Первое подключение | -| `user.bandwidth_usage_threshold_reached` | Порог трафика достигнут | -| `user_hwid_devices.*` | Устройство добавлено/удалено | -| `node.*`, `service.*` | Административные события (ноды, сервис) | - -#### Настройка - -**1. Переменные окружения в `.env`:** - -```env -REMNAWAVE_WEBHOOK_ENABLED=true -REMNAWAVE_WEBHOOK_PATH=/remnawave-webhook -REMNAWAVE_WEBHOOK_SECRET=your_secret_min_32_chars_here -``` - -Сгенерируйте секрет: - -```bash -openssl rand -hex 32 -``` - -**2. Настройка в панели Remnawave:** - -В env панели Remnawave заполните: - -- **URL**: `https://hooks.domain.com/remnawave-webhook` -- **Secret**: тот же секрет, что и в `REMNAWAVE_WEBHOOK_SECRET` - -**3. Настройка прокси:** - -Добавьте путь `/remnawave-webhook` в конфигурацию обратного прокси. - -**Caddy:** - -```caddy -handle /remnawave-webhook { - reverse_proxy remnawave_bot:8080 { - header_up Host {host} - header_up X-Real-IP {remote_host} - transport http { - read_buffer 0 - } - } -} -``` - -**Nginx:** - -```nginx -location = /remnawave-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; -} -``` - -**4. Проверка работоспособности:** - -```bash -# Health-check (GET запрос) -curl -s https://hooks.domain.com/remnawave-webhook | jq - -# Ожидаемый ответ: -# {"status": "ok", "service": "remnawave_webhook", "enabled": true} -``` - -**Важно:** -- Секрет должен быть не менее 32 символов -- Бот верифицирует подпись `X-Remnawave-Signature` (HMAC-SHA256) для каждого запроса -- При включённых вебхуках бот автоматически защищает подписки от перезаписи данными из периодической синхронизации в течение 60 секунд после получения события -- Если бот и панель на одном сервере, URL вебхука может быть `http://remnawave_bot:8080/remnawave-webhook` (внутри Docker-сети) - -### 💳 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** (карты + СБП) -- 💳 **RioPay** (карты + СБП) -- 🔥 Автогенерация счетов и webhook-уведомления -- 💼 История операций -- 🔄 Автоплатёж с настройкой дня списания -- 🎁 Реферальные и промо-бонусы -- ⚡ **Быстрое пополнение** с кнопками быстрых сумм - -📱 **Управление подписками** - -- 📈 Реальный трафик, устройства и серверы -- 🌐 Переключение серверов и стран -- 📱 Сброс HWID -- 🧩 Смена языка, промогруппы и параметров -- 🧾 Просмотр активных услуг и статуса -- 🔗 Получение ссылок подключения в один клик -- 📡 **Модем-режим** - дополнительные устройства для модемов - -🛟 **Поддержка и самообслуживание** - -- 🎫 **Система тикетов** с вложениями -- 📚 FAQ, правила, оферта и политика -- 💬 Быстрые ссылки на поддержку - -🧩 **Бонусы и промо** - -- 🎫 Промокоды на деньги, дни, триал подписку, промогруппу -- 🎁 **Персональные промо-предложения** от админов -- 💰 **Тестовый доступ к серверам** через промо-акции -- 💸 **Автоматические скидки** при оплате и автопродлении -- 💥 Реферальная программа с комиссиями и бонусами -- 📊 Аналитика доходов и конверсии рефералов -- 🔗 Генерация реферальных ссылок и QR кодов - -🎮 **Конкурсы и игры** - -- 🎲 **Ежедневные игры** с призами (баланс, подписка, промогруппа) -- 🏆 **Реферальные конкурсы** с рейтингами и наградами -- 📊 **Детальная статистика** участия в конкурсах -- 🎁 **Разнообразные призы** - баланс, дни подписки, промогруппы - -💎 **Промо-группы и скидки** - -- 🏷️ **Система промогрупп** с индивидуальными скидками с приоритетами -- 💰 Скидки на серверы, трафик и устройства -- 📊 **Скидочные уровни за траты** - прозрачная система лояльности -- 📈 Автоматическое повышение уровня при достижении порога -- 🎯 **Скидки за длительные периоды** подписки для базовых юзеров - -📱 **Mini App и гайды** - -- 🖥️ **Полноценный личный кабинет** в Telegram WebApp -- 📊 Управление подпиской и параметрами -- 💳 Интегрированные платежи -- 🎁 Активация промо-офферов и промокодов -- 📱 Управление устройствами -- 💥 Реферальная статистика -- 📋 FAQ и юридические документы -- 📥 Библиотека загрузочных ссылок для клиентов -- 🛰️ Web API для внешних интеграций -- 🎯 **Отображение тарифа** при режиме тарифов +- Гибкие тарифные планы (от 14 дней до года) +- Трафик: безлимит, фиксированный лимит или пакеты +- Управление устройствами (1–20 на подписку) +- Автовыбор сервера или ручной выбор +- Пробный период с конвертацией в платный +- Умная корзина — сохраняет выбор при недостатке баланса +- Автопродление за 3 дня до окончания +- Подарочные подписки -### ⚙️ **Для администраторов** +### Платежи -📊 **Аналитика и отчётность** - -- 📈 Дашборды по пользователям, подпискам и трафику -- 💰 Детализация платежей по всем источникам -- 🧮 Продажи по тарифам, устройствам и странам -- 📣 Эффективность кампаний, промокодов и 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 управления контентом и настройками +- **14 платёжных провайдеров** одновременно +- Единый баланс: пополнение любым способом → покупка с баланса +- Автопокупка подписки после пополнения +- Рекуррентные платежи (сохранённые карты) +- Фискализация через НалоGo (для самозанятых) +- Проверка статуса платежей +- Поддержка гостевых покупок через лендинги
- -### 🤖 Автоматизация и экосистема - -- 🔄 **Мониторинг 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 - +
+ +### Администрирование + +- Панель управления прямо в Telegram +- Управление пользователями, подписками, платежами +- Уведомления в топики: покупки, продления, пополнения +- Автобэкапы БД с восстановлением из бота +- Режим техработ (авто-детект недоступности панели) +- Мониторинг трафика и аномалий +- Партнёрская программа +- RBAC: роли и гранулярные права доступа +
--- -## 📈 Статистика проекта - -![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) +| Провайдер | Методы | | Провайдер | Методы | +|:---|:---|:---:|:---|:---| +| **Telegram Stars** | Звёзды Telegram | | **CloudPayments** | Карты, 3D-Secure | +| **YooKassa** | Карты, СБП | | **Freekassa** | NSPK СБП, карты | +| **CryptoBot** | USDT, TON, BTC, ETH | | **Kassa AI** | СБП, карты, SberPay | +| **PayPalych** | Карты, СБП | | **RioPay** | Карты | +| **Platega** | Карты, СБП, крипто | | **SeverPay** | СБП, карты | +| **WATA** | Карты | | **Tribute** | Telegram | +| **Heleket** | Криптовалюта | | **MulenPay** | Карты |
+> Все провайдеры работают параллельно через единый веб-сервер. Подробная настройка каждого — в [документации](https://docs.bedolagam.ru/bot/payments). + +--- + +## Быстрый старт + +```bash +git clone https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git +cd remnawave-bedolaga-telegram-bot +cp .env.example .env # заполните переменные +docker compose up -d +``` + +Подробнее: **[Развёртывание →](https://docs.bedolagam.ru/getting-started/docker-deployment)** + +--- + +## Стек + +| Компонент | Технология | +|:---|:---| +| Язык | Python 3.13, полностью async | +| Telegram | aiogram 3.x | +| База данных | PostgreSQL + SQLAlchemy 2.x + Alembic | +| Web-сервер | FastAPI (webhook, платежи, Cabinet API) | +| Логирование | structlog | +| Контейнеризация | Docker + Docker Compose | +| Линтер | ruff | + +--- + +## Bedolaga Cabinet + +
+ +[![Cabinet](https://img.shields.io/badge/Репозиторий-Cabinet-6366f1?style=for-the-badge&logo=react&logoColor=white)](https://github.com/BEDOLAGA-DEV/bedolaga-cabinet) +
+ +Веб-кабинет на React + TypeScript, расширяющий бота: + +- **Личный кабинет** — подписки, баланс, устройства, реферальная программа +- **OAuth-авторизация** — Google, Yandex, Discord, VK, Telegram OIDC +- **Лендинги** — кастомные страницы для привлечения клиентов +- **Админ-панель** — аналитика продаж, RBAC, управление контентом +- **Подарочные подписки** — покупка и отправка подписок другим пользователям + +--- + +## Документация + +| Раздел | Описание | +|:---|:---| +| [Быстрый старт](https://docs.bedolagam.ru/getting-started/quickstart) | Развёртывание за 5 минут | +| [Настройка платежей](https://docs.bedolagam.ru/bot/payments) | 14 провайдеров, webhook, фискализация | +| [Подписки и тарифы](https://docs.bedolagam.ru/bot/subscriptions) | Конфигурация планов и трафика | +| [Реферальная программа](https://docs.bedolagam.ru/bot/referral-program) | Партнёрка и вывод средств | +| [Cabinet](https://docs.bedolagam.ru/cabinet/overview) | Настройка веб-кабинета | +| [Промо-система](https://docs.bedolagam.ru/bot/promo-system) | Промокоды, предложения, скидки | +| [API Reference](https://docs.bedolagam.ru/api-reference/overview) | REST API для внешних интеграций | + +**Полная документация: [docs.bedolagam.ru](https://docs.bedolagam.ru)** + +--- + +## Сообщество + +[![Telegram Chat](https://img.shields.io/badge/Telegram-Чат_сообщества-26A5E4?style=flat-square&logo=telegram&logoColor=white)](https://t.me/+wTdMtSWq8YdmZmVi) +[![GitHub Issues](https://img.shields.io/badge/GitHub-Баг--репорты-181717?style=flat-square&logo=github&logoColor=white)](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/issues) + +- **Баги и предложения** — [GitHub Issues](https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot/issues) +- **Вопросы и обсуждения** — [Telegram-чат](https://t.me/+wTdMtSWq8YdmZmVi) +- **Тестирование** — [@zero_ping_vpn_bot](https://t.me/zero_ping_vpn_bot?start=Git) + +--- + +## Лицензия + +[MIT](LICENSE) — используйте свободно для личных и коммерческих проектов.