mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-14 16:10:27 +00:00
560 lines
20 KiB
Markdown
560 lines
20 KiB
Markdown
# 🤖 RemnaWave Telegram Bot
|
||
|
||
[](https://hub.docker.com/r/fr1ngg/remnawave-bedolaga-telegram-bot)
|
||
[](https://python.org)
|
||
[](https://postgresql.org)
|
||
[](LICENSE)
|
||
|
||
Современный Telegram бот для управления VPN подписками через RemnaWave API с полным функционалом управления пользователями, платежами и администрированием.
|
||
|
||
## 🚀 Особенности
|
||
|
||
### 👤 Для пользователей
|
||
- 💰 **Управление балансом** - пополнение через поддержку
|
||
- 🛒 **Покупка подписок** - различные тарифные планы c возможностью индивидуальной настройки сквада у плана
|
||
- 📱 **Управление подписками** - просмотр, продление, получение ссылок
|
||
- 🎁 **Система промокодов** - денежные коды
|
||
- 👥 **Реферальная программа** - зарабатывай с друзей
|
||
- 🎰 **Игра удачи** - выигрывай бонусы каждые 24 часа
|
||
- 🆓 **Тестовая подписка** - бесплатная пробная версия с детальной конфигурацией
|
||
- 🌐 **Мультиязычность** - русский и английский
|
||
|
||
### ⚙️ Для администраторов
|
||
- 📊 **Полная статистика** - пользователи, платежи, подписки
|
||
- 👥 **Управление пользователями** - поиск, редактирование, баланс
|
||
- 💳 **Управление платежами** - одобрение, отклонение, история
|
||
- 🎫 **Управление промокодами** - создание, редактирование, статистика
|
||
- 🖥 **Мониторинг системы** - состояние нод, пользователей RemnaWave
|
||
- 🔄 **Синхронизация данных** - импорт из RemnaWave
|
||
- 📨 **Рассылки** - уведомления пользователям
|
||
- 🔍 **Мониторинг подписок** - автоматические уведомления об истечении
|
||
|
||
## 📋 Требования
|
||
|
||
### Системные требования
|
||
- Docker и Docker Compose
|
||
- 1+ GB RAM
|
||
- 10+ GB свободного места
|
||
|
||
### Внешние сервисы
|
||
- **Telegram Bot Token** - создайте бота через [@BotFather](https://t.me/BotFather)
|
||
- **RemnaWave API** - доступ к панели RemnaWave
|
||
- **PostgreSQL** - автоматически разворачивается через Docker
|
||
|
||
## 🛠 Установка и запуск
|
||
|
||
### 1. Клонирование репозитория
|
||
|
||
```bash
|
||
git clone https://github.com/Fr1ngg/remnawave-bedolaga-telegram-bot.git
|
||
cd remnawave-bedolaga-telegram-bot
|
||
```
|
||
|
||
### 2. Настройка переменных окружения
|
||
|
||
Создайте файл `.env` на основе примера:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
nano .env
|
||
```
|
||
|
||
### 3. Конфигурация
|
||
|
||
#### 📋 Основные настройки
|
||
|
||
| Переменная | Описание | Пример |
|
||
|------------|----------|---------|
|
||
| `BOT_TOKEN` | Токен Telegram бота | `123456:ABC-DEF1234ghIkl-zyx` |
|
||
| `BOT_USERNAME` | Username бота (без @) | `your_bot_username` |
|
||
| `REMNAWAVE_URL` | URL панели RemnaWave | `https://panel.example.com` |
|
||
| `REMNAWAVE_MODE` | Тип подключения | `remote/local` |
|
||
| `REMNAWAVE_TOKEN` | API токен RemnaWave | `your_api_token` |
|
||
| `ADMIN_IDS` | ID администраторов (через запятую) | `123456789,987654321` |
|
||
|
||
#### 🎁 Реферальная программа
|
||
|
||
| Переменная | Описание | По умолчанию |
|
||
|------------|----------|--------------|
|
||
| `REFERRAL_FIRST_REWARD` | Награда за первого реферала | `100.0` |
|
||
| `REFERRAL_REFERRED_BONUS` | Бонус приглашенному | `100.0` |
|
||
| `REFERRAL_THRESHOLD` | Порог активации (руб.) | `200.0` |
|
||
| `REFERRAL_PERCENTAGE` | Процент со второго и послед. платежей | `0.2` (20%) |
|
||
|
||
#### 🎰 Игра удачи
|
||
|
||
| Переменная | Описание | По умолчанию |
|
||
|------------|----------|--------------|
|
||
| `LUCKY_GAME_ENABLED` | Включить игру | `true` |
|
||
| `LUCKY_GAME_REWARD` | Награда за выигрыш | `50.0` |
|
||
| `LUCKY_GAME_NUMBERS` | Всего чисел | `30` |
|
||
| `LUCKY_GAME_WINNING_COUNT` | Выигрышных чисел | `3` |
|
||
|
||
#### 🆓 Тестовая подписка
|
||
|
||
| Переменная | Описание | По умолчанию |
|
||
|------------|----------|--------------|
|
||
| `TRIAL_ENABLED` | Включить тестовую подписку | `true/false` |
|
||
| `TRIAL_DURATION_DAYS` | Длительность (дни) | `3` |
|
||
| `TRIAL_TRAFFIC_GB` | Лимит трафика (ГБ) | `2` |
|
||
| `TRIAL_SQUAD_UUID` | UUID squad для тестовых | `uuid-here` |
|
||
|
||
#### 💬 Сервис мониторинга сообщений
|
||
|
||
| Переменная | Описание | По умолчанию |
|
||
|------------|----------|--------------|
|
||
| `MONITOR_ENABLED` | Включить сервис подписку | `true/false` |
|
||
| `TRIAL_DURATION_DAYS` | Длительность (дни) | `3` |
|
||
| `TRIAL_TRAFFIC_GB` | Лимит трафика (ГБ) | `2` |
|
||
| `TRIAL_SQUAD_UUID` | UUID squad для тестовых | `uuid-here` |
|
||
|
||
### 4. Docker Compose конфигурация
|
||
|
||
#### 🚀 Минимальная конфигурация (рекомендуется)
|
||
|
||
Создайте файл `docker-compose.yml` для базового запуска:
|
||
|
||
```yaml
|
||
services:
|
||
# PostgreSQL Database
|
||
postgres:
|
||
image: postgres:15-alpine
|
||
container_name: remnawave_bot_db
|
||
restart: unless-stopped
|
||
environment:
|
||
POSTGRES_DB: remnawave_bot
|
||
POSTGRES_USER: remnawave_user
|
||
POSTGRES_PASSWORD: secure_password_123
|
||
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
|
||
volumes:
|
||
- postgres_data:/var/lib/postgresql/data
|
||
networks:
|
||
- bot_network
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "pg_isready -U remnawave_user -d remnawave_bot"]
|
||
interval: 15s
|
||
timeout: 10s
|
||
retries: 5
|
||
start_period: 30s
|
||
|
||
# RemnaWave Bot
|
||
bot:
|
||
image: fr1ngg/remnawave-bedolaga-telegram-bot:latest
|
||
container_name: remnawave_bot
|
||
restart: unless-stopped
|
||
depends_on:
|
||
postgres:
|
||
condition: service_healthy
|
||
env_file:
|
||
- .env
|
||
environment:
|
||
DATABASE_URL: postgresql+asyncpg://remnawave_user:secure_password_123@postgres:5432/remnawave_bot
|
||
volumes:
|
||
- ./logs:/app/logs
|
||
- ./data:/app/data
|
||
networks:
|
||
- bot_network
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "python -c 'print(\"Bot is running\")'"]
|
||
interval: 30s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 30s
|
||
|
||
volumes:
|
||
postgres_data:
|
||
driver: local
|
||
|
||
networks:
|
||
bot_network:
|
||
driver: bridge
|
||
```
|
||
|
||
#### ⚡ Полная конфигурация (с дополнительными сервисами)
|
||
|
||
Для расширенной настройки с Redis и Nginx создайте `docker-compose.full.yml`:
|
||
|
||
```yaml
|
||
services:
|
||
# PostgreSQL Database
|
||
postgres:
|
||
image: postgres:15-alpine
|
||
container_name: remnawave_bot_db
|
||
restart: unless-stopped
|
||
environment:
|
||
POSTGRES_DB: remnawave_bot
|
||
POSTGRES_USER: remnawave_user
|
||
POSTGRES_PASSWORD: secure_password_123
|
||
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
|
||
volumes:
|
||
- postgres_data:/var/lib/postgresql/data
|
||
ports:
|
||
- "5432:5432"
|
||
networks:
|
||
- bot_network
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "pg_isready -U remnawave_user -d remnawave_bot"]
|
||
interval: 15s
|
||
timeout: 10s
|
||
retries: 5
|
||
start_period: 30s
|
||
|
||
# RemnaWave Bot
|
||
bot:
|
||
image: fr1ngg/remnawave-bedolaga-telegram-bot:latest
|
||
container_name: remnawave_bot
|
||
restart: unless-stopped
|
||
depends_on:
|
||
postgres:
|
||
condition: service_healthy
|
||
env_file:
|
||
- .env
|
||
environment:
|
||
DATABASE_URL: postgresql+asyncpg://remnawave_user:secure_password_123@postgres:5432/remnawave_bot
|
||
volumes:
|
||
- ./logs:/app/logs
|
||
- ./data:/app/data
|
||
networks:
|
||
- bot_network
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "python -c 'print(\"Bot is running\")'"]
|
||
interval: 30s
|
||
timeout: 10s
|
||
retries: 3
|
||
start_period: 30s
|
||
|
||
# Redis (для кэширования и улучшения производительности)
|
||
redis:
|
||
image: redis:7-alpine
|
||
container_name: remnawave_bot_redis
|
||
restart: unless-stopped
|
||
command: redis-server --appendonly yes --requirepass redis_password_123
|
||
volumes:
|
||
- redis_data:/data
|
||
ports:
|
||
- "6379:6379"
|
||
networks:
|
||
- bot_network
|
||
healthcheck:
|
||
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
|
||
interval: 10s
|
||
timeout: 3s
|
||
retries: 5
|
||
profiles:
|
||
- with-redis
|
||
|
||
# Nginx (для статических файлов или веб-интерфейса)
|
||
nginx:
|
||
image: nginx:alpine
|
||
container_name: remnawave_bot_nginx
|
||
restart: unless-stopped
|
||
ports:
|
||
- "80:80"
|
||
- "443:443"
|
||
volumes:
|
||
- ./nginx.conf:/etc/nginx/nginx.conf:ro
|
||
- ./ssl:/etc/nginx/ssl:ro
|
||
- ./static:/usr/share/nginx/html:ro
|
||
networks:
|
||
- bot_network
|
||
depends_on:
|
||
- bot
|
||
profiles:
|
||
- with-nginx
|
||
|
||
volumes:
|
||
postgres_data:
|
||
driver: local
|
||
redis_data:
|
||
driver: local
|
||
|
||
networks:
|
||
bot_network:
|
||
driver: bridge
|
||
ipam:
|
||
config:
|
||
- subnet: 172.20.0.0/16
|
||
```
|
||
|
||
### 5. Варианты запуска
|
||
|
||
#### 🚀 Быстрый старт (минимальная конфигурация)
|
||
|
||
```bash
|
||
# Запуск только бота и базы данных
|
||
docker-compose up -d
|
||
|
||
# Просмотр логов
|
||
docker-compose logs -f bot
|
||
```
|
||
|
||
#### ⚡ Расширенный запуск
|
||
|
||
```bash
|
||
# Запуск с Redis для улучшения производительности
|
||
docker-compose --profile with-redis up -d
|
||
|
||
# Запуск с Nginx для веб-интерфейса
|
||
docker-compose --profile with-nginx up -d
|
||
|
||
# Запуск со всеми сервисами
|
||
docker-compose --profile with-redis --profile with-nginx up -d
|
||
|
||
# Или используйте полную конфигурацию
|
||
docker-compose -f docker-compose.full.yml up -d
|
||
```
|
||
|
||
#### 🛑 Управление сервисами
|
||
|
||
```bash
|
||
# Остановка всех сервисов
|
||
docker-compose down
|
||
|
||
# Остановка с удалением volumes (ВНИМАНИЕ: удалит все данные!)
|
||
docker-compose down -v
|
||
|
||
# Перезапуск конкретного сервиса
|
||
docker-compose restart bot
|
||
|
||
# Просмотр статуса
|
||
docker-compose ps
|
||
```
|
||
|
||
#### 📋 Варианты конфигураций
|
||
|
||
| Конфигурация | Команда | Описание |
|
||
|--------------|---------|----------|
|
||
| **Минимальная** | `docker-compose up -d` | Только бот + PostgreSQL |
|
||
| **С Redis** | `docker-compose --profile with-redis up -d` | + кэширование |
|
||
| **С Nginx** | `docker-compose --profile with-nginx up -d` | + веб-сервер |
|
||
| **Полная** | `docker-compose --profile with-redis --profile with-nginx up -d` | Все сервисы |
|
||
|
||
## 📊 Мониторинг и управление
|
||
|
||
### Просмотр логов
|
||
|
||
```bash
|
||
# Логи бота
|
||
docker-compose logs -f bot
|
||
|
||
# Логи базы данных
|
||
docker-compose logs -f postgres
|
||
|
||
# Все логи
|
||
docker-compose logs -f
|
||
```
|
||
|
||
### Проверка состояния
|
||
|
||
```bash
|
||
# Статус контейнеров
|
||
docker-compose ps
|
||
|
||
# Использование ресурсов
|
||
docker stats
|
||
```
|
||
|
||
### Backup базы данных
|
||
|
||
```bash
|
||
# Создание backup
|
||
docker exec remnawave_bot_db pg_dump -U remnawave_user remnawave_bot > backup.sql
|
||
|
||
# Восстановление
|
||
docker exec -i remnawave_bot_db psql -U remnawave_user remnawave_bot < backup.sql
|
||
```
|
||
|
||
## 🔧 Обновление
|
||
|
||
### Обновление Docker образа
|
||
|
||
```bash
|
||
# Остановить сервисы
|
||
docker-compose down
|
||
|
||
# Обновить образ
|
||
docker-compose pull bot
|
||
|
||
# Запустить снова
|
||
docker-compose up -d
|
||
|
||
# Проверить логи
|
||
docker-compose logs -f bot
|
||
```
|
||
|
||
### Ручная сборка образа
|
||
|
||
```bash
|
||
# Клонировать репозиторий
|
||
git clone https://github.com/your-repo/remnawave-telegram-bot.git
|
||
cd remnawave-telegram-bot
|
||
|
||
# Собрать образ
|
||
docker build -t remnawave-bot .
|
||
|
||
# Изменить docker-compose.yml
|
||
# bot:
|
||
# image: remnawave-bot # вместо fr1ngg/remnawave-bedolaga-telegram-bot
|
||
```
|
||
|
||
## 🎯 Использование
|
||
|
||
### Для пользователей
|
||
|
||
1. **Запуск бота** - найдите бота по username и нажмите `/start`
|
||
2. **Выбор языка** - выберите русский или английский
|
||
3. **Пополнение баланса** - через меню "💰 Баланс" → "💳 Пополнить"
|
||
4. **Покупка подписки** - "🛒 Купить подписку" → выбор тарифа → оплата
|
||
5. **Управление подписками** - "📋 Мои подписки" → выбор подписки
|
||
6. **Реферальная программа** - "👥 Рефералы" → поделиться ссылкой
|
||
|
||
### Для администраторов
|
||
|
||
Администратор видит дополнительную кнопку "⚙️ Админ панель" с возможностями:
|
||
|
||
- **📦 Управление подписками** - создание тарифов
|
||
- **👥 Управление пользователями** - поиск, редактирование
|
||
- **💰 Управление балансом** - пополнение балансов
|
||
- **🎁 Управление промокодами** - создание скидок
|
||
- **📨 Рассылки** - отправка сообщений
|
||
- **🖥 Система RemnaWave** - мониторинг нод и синхронизация
|
||
|
||
## 🔒 Безопасность
|
||
|
||
### Рекомендации
|
||
|
||
- ✅ Измените пароли PostgreSQL в `docker-compose.yml`
|
||
- ✅ Не публикуйте файл `.env` в репозитории
|
||
- ✅ Используйте HTTPS для RemnaWave API
|
||
- ✅ Регулярно создавайте backup базы данных
|
||
- ✅ Ограничьте доступ к серверу через firewall
|
||
|
||
### Переменные безопасности
|
||
|
||
```bash
|
||
# Генерация безопасных паролей
|
||
openssl rand -base64 32 # для PostgreSQL
|
||
openssl rand -hex 16 # для Redis
|
||
```
|
||
|
||
## 🐛 Устранение неполадок
|
||
|
||
### Частые проблемы
|
||
|
||
| Проблема | Решение |
|
||
|----------|---------|
|
||
| Бот не отвечает | Проверьте `BOT_TOKEN` и интернет |
|
||
| Ошибка подключения к БД | Проверьте статус PostgreSQL контейнера |
|
||
| Ошибки RemnaWave API | Проверьте `REMNAWAVE_URL` и `REMNAWAVE_TOKEN` |
|
||
| Игра удачи не работает | Проверьте `LUCKY_GAME_ENABLED=true` |
|
||
|
||
### Диагностика
|
||
|
||
```bash
|
||
# Проверка переменных окружения
|
||
docker exec remnawave_bot env | grep BOT_
|
||
|
||
# Подключение к базе данных
|
||
docker exec -it remnawave_bot_db psql -U remnawave_user remnawave_bot
|
||
|
||
# Перезапуск бота
|
||
docker-compose restart bot
|
||
```
|
||
|
||
### Логи и отладка
|
||
|
||
```bash
|
||
# Детальные логи
|
||
docker-compose logs -f --tail 100 bot
|
||
|
||
# Ошибки базы данных
|
||
docker-compose logs postgres | grep ERROR
|
||
|
||
# Проверка health checks
|
||
docker-compose ps
|
||
```
|
||
|
||
## 📈 Производительность
|
||
|
||
### Рекомендуемые ресурсы
|
||
|
||
| Пользователей | RAM | CPU | Диск |
|
||
|---------------|-----|-----|------|
|
||
| До 500 | 1GB | 1 CPU | 10GB |
|
||
| До 1,000 | 2GB | 1 CPU | 20GB |
|
||
| До 10,000 | 4GB | 2 CPU | 50GB |
|
||
| До 50,000 | 8GB | 4 CPU | 100GB |
|
||
|
||
### Оптимизация
|
||
|
||
- Включите Redis для кэширования (профиль `with-redis`)
|
||
- Настройте PostgreSQL для production
|
||
- Используйте nginx как reverse proxy
|
||
- Мониторьте ресурсы через `docker stats`
|
||
|
||
## 🤝 Поддержка
|
||
|
||
### Получить помощь
|
||
|
||
- 💬 **Telegram**: @fringg
|
||
|
||
### Вклад в проект
|
||
|
||
1. Fork репозитория
|
||
2. Создайте feature branch
|
||
3. Внесите изменения
|
||
4. Создайте Pull Request
|
||
|
||
## 📄 Лицензия
|
||
|
||
Этот проект распространяется под лицензией MIT. См. файл [LICENSE](LICENSE) для подробностей.
|
||
|
||
## 🗺 Roadmap & TODO
|
||
|
||
### 📋 Общий план развития
|
||
|
||
| № | Задача | Статус | Версия | Приоритет | Описание |
|
||
|---|---------|--------|--------|-----------|----------|
|
||
| 1 | Мониторинг подписок | ✅ Done | v1.1.0 | 🔴 High | Служба оповещения об истечении срока и автоконтроль |
|
||
| 2 | Платежные шлюзы | 🎯 Planned | v1.4.0+ | 🔴 High | ЮKassa, Сбербанк, Tinkoff, Crypto, Звезды |
|
||
| 3 | Синхронизация RemnaWave | ✅ Done | v1.1.0 | 🟡 Medium | Импорт пользователей по Telegram ID |
|
||
| 4 | Веб-панель управления | 🎯 Planned | v1.4.0+ | 🟡 Medium | Полнофункциональный веб-интерфейс |
|
||
| 5 | Управление промокодами | ✅ Done | v1.3.0 | 🟢 Low | Удаление, редактирование |
|
||
| 6 | Безопасное удаление подписок | 🚧 In Progress | v1.4.0 | 🟡 Medium | Архивирование вместо удаления |
|
||
| 7 | Уведомления в другие чаты | 🎯 Planned | v1.5.0 | 🟡 Medium | Webhook, Email |
|
||
| 8 | Реферальная система | ✅ Done | v1.2.0 | 🟢 Low | Полнофункциональная программа с подробной статистикой |
|
||
| 9 | Рулетка | ✅ Done | v1.3.0 | 🟢 Low | Лудочка |
|
||
|
||
### 🚀 Хотите помочь?
|
||
|
||
**Разработчикам:**
|
||
- 🐛 Найдите и исправьте баги
|
||
- ✨ Предложите новые функции
|
||
- 📝 Улучшите документацию
|
||
- 🧪 Напишите тесты
|
||
|
||
**Пользователям:**
|
||
- 💭 Поделитесь идеями в Issues
|
||
- 🐞 Сообщите о найденных проблемах
|
||
- ⭐ Поставьте звезду проекту
|
||
- 📢 Расскажите друзьям
|
||
|
||
**Спонсорам:**
|
||
- 💰 Поддержите разработку
|
||
- 🎯 Закажите приоритетные функции
|
||
- 🏢 Корпоративная поддержка
|
||
|
||
---
|
||
|
||
**⚠️ Важные замечания от автора:**
|
||
|
||
> 🗑 **Осторожно с удалением подписок!** Сейчас удаление плана подписки скроет эту подписку у всех пользователей, которые ее купили. Используйте деактивацию вместо удаления. Эта проблема будет исправлена в v1.4.0.
|
||
|
||
---
|
||
|
||
**⭐ Если проект был полезен, поставьте звездочку на GitHub!**
|
||
|
||
---
|
||
|
||
*Создано с ❤️ для RemnaWave сообщества*
|