🚀 Remnawave Bedolaga Bot
🤖 Современный Telegram-бот для управления VPN подписками через Remnawave API
Полнофункциональное решение с управлением пользователями, платежами и администрированием
🧪 (Тестирование бота)
💬 Bedolaga Chat - Для общения, вопросов, предложений
🌟 Почему Bedolagа?
Бот Бедолага не добрый и не милый. Он просто делает вашу работу вместо вас, принимает оплату, выдаёт подписки, интегрируется с Remnawave и тихо ненавидит всех, кто ещё не подключил его.
Вы хотите продавать VPN — Бедолага позволит это делать. Вы хотите спать — он позволит и это.
⚡ Полная автоматизация VPN бизнеса
- 🎯 Готовое решение - разверни за 5 минут, начни продавать сегодня
- 💰 Многоканальные платежи - Telegram Stars + Tribute + ЮKassa
- 🔄 Автоматизация 99% - от регистрации до продления подписок
- 📊 Детальная аналитика
🎛️ Гибкость конфигурации
- 🌍 Выбор стран - пользователи сами выбирают нужные локации
- 📱 Управление устройствами - от 1 до 10 шт
- 📊 Гибкие тарифы - от 5GB до безлимита, от 14 дней до года
- 🎁 Промо-система - коды на деньги, дни подписки, триал-периоды
- 3 режима показа ссылки подписки: 1) С гайдом по подключению прямо в боте(тянущий данные приложений и ссылок на скачку из app-config.json) 2) Обычное открытие ссылки подписки в миниапе 3) Интеграция сабпейджа maposia - кастомно прописать ссылку можно
- Возможность переключаться между пакетной продажей трафика и фиксированной(Пропуская шаг выбора пакета трафика при оформлении/настройки подписки юзера)
- Возможность задать доступные дни для покупки первой подписки и при продлении
💪 Enterprise готовность
- 🏗️ Современная архитектура - AsyncIO, PostgreSQL, Redis
- 🔒 Безопасность - шифрование, валидация, rate limiting
- 📈 Масштабируемость
- 🔧 Мониторинг - Prometheus, Grafana, health checks
- 🔧 Режим технических работ - Ручное включение + Мониторинг системы, который в случае падении панели Remnawave переведет бота в режим технических работ и обратно - отключит его, если панель поднимется.
🚀 Быстрый старт
🐳 Docker запуск
# 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
# 4. Запусти всё разом
docker compose up -d --build
# 5. Проверь статус
docker compose logs -f bot
⚙️ ENV параметры
| Настройка | Где взять | Пример |
|---|---|---|
| 🤖 BOT_TOKEN | @BotFather | 1234567890:AABBCCdd... |
| 🔑 REMNAWAVE_API_KEY | Твоя Remnawave панель | eyJhbGciOiJIUzI1... |
| 🌐 REMNAWAVE_API_URL | URL твоей панели | https://panel.example.com |
| 👑 ADMIN_IDS | Твой Telegram ID | 123456789,987654321 |
🔧 ВСЕ ПАРАМЕТРЫ .env
# ===============================================
# 🤖 REMNAWAVE BEDOLAGA BOT CONFIGURATION
# ===============================================
# ===== TELEGRAM BOT =====
BOT_TOKEN=
ADMIN_IDS=
SUPPORT_USERNAME=@support
# ===== DATABASE =====
# Для Docker используйте PostgreSQL:
DATABASE_URL=postgresql+asyncpg://remnawave_user:secure_password_123@postgres:5432/remnawave_bot
# Для локального запуска без Docker используйте SQLite: sqlite+aiosqlite:///./bot.db
# DATABASE_URL=postgresql+asyncpg://remnawave_user:secure_password_123@postgres:5432/remnawave_bot
REDIS_URL=redis://redis:6379/0
# Пароли для Docker (PostgreSQL/Redis)
POSTGRES_DB=remnawave_bot
POSTGRES_USER=remnawave_user
POSTGRES_PASSWORD=secure_password_123
# ===== REMNAWAVE API =====
REMNAWAVE_API_URL=
REMNAWAVE_API_KEY=
# ===== ТРИАЛ ПОДПИСКА =====
TRIAL_DURATION_DAYS=3
TRIAL_TRAFFIC_LIMIT_GB=10
TRIAL_DEVICE_LIMIT=1
TRIAL_SQUAD_UUID=
DEFAULT_TRAFFIC_RESET_STRATEGY=MONTH
DEFAULT_TRAFFIC_LIMIT_GB=100
DEFAULT_DEVICE_LIMIT=1
# ===== НАСТРОЙКИ ТРАФИКА =====
# Режим выбора трафика:
# "selectable" - пользователи выбирают пакеты трафика (по умолчанию)
# "fixed" - фиксированный лимит трафика для всех подписок
TRAFFIC_SELECTION_MODE=selectable
# Фиксированный лимит трафика в ГБ (используется только в режиме "fixed")
# 0 = безлимит
FIXED_TRAFFIC_LIMIT_GB=100
# ===== ПЕРИОДЫ ПОДПИСКИ =====
# Доступные периоды подписки (через запятую)
# Возможные значения: 14,30,60,90,180,360
AVAILABLE_SUBSCRIPTION_PERIODS=30,90,180
AVAILABLE_RENEWAL_PERIODS=30,90,180
# ===== ЦЕНЫ (в копейках) =====
BASE_SUBSCRIPTION_PRICE=0
# Цены за периоды
PRICE_14_DAYS=7000
PRICE_30_DAYS=9900
PRICE_60_DAYS=25900
PRICE_90_DAYS=36900
PRICE_180_DAYS=69900
PRICE_360_DAYS=109900
# Цены за трафик
PRICE_TRAFFIC_5GB=1000
PRICE_TRAFFIC_10GB=2000
PRICE_TRAFFIC_25GB=3000
PRICE_TRAFFIC_50GB=4000
PRICE_TRAFFIC_100GB=6000
PRICE_TRAFFIC_250GB=10000
PRICE_TRAFFIC_UNLIMITED=15000
# Цена за дополнительное устройство
PRICE_PER_DEVICE=5000
# ===== РЕФЕРАЛЬНАЯ СИСТЕМА =====
REFERRAL_REGISTRATION_REWARD=10000
REFERRED_USER_REWARD=10000
REFERRAL_COMMISSION_PERCENT=25
# ===== АВТОПРОДЛЕНИЕ =====
AUTOPAY_WARNING_DAYS=3,1
DEFAULT_AUTOPAY_DAYS_BEFORE=3
MIN_BALANCE_FOR_AUTOPAY_KOPEKS=10000
# ===== ПЛАТЕЖНЫЕ СИСТЕМЫ =====
# Telegram Stars (работает автоматически)
TELEGRAM_STARS_ENABLED=true
# Tribute (https://tribute.app)
TRIBUTE_ENABLED=false
TRIBUTE_API_KEY=
TRIBUTE_WEBHOOK_SECRET=your_webhook_secret
TRIBUTE_DONATE_LINK=
TRIBUTE_WEBHOOK_PATH=/tribute-webhook
TRIBUTE_WEBHOOK_PORT=8081
# YooKassa (https://yookassa.ru)
YOOKASSA_ENABLED=false
YOOKASSA_SHOP_ID=
YOOKASSA_SECRET_KEY=
YOOKASSA_RETURN_URL=
YOOKASSA_DEFAULT_RECEIPT_EMAIL=receipts@yourdomain.com
# Настройки чеков для налоговой
YOOKASSA_VAT_CODE=1
# Коды НДС:
# 1 - НДС не облагается
# 2 - НДС 0%
# 3 - НДС 10%
# 4 - НДС 20%
# 5 - НДС 10/110
# 6 - НДС 20/120
YOOKASSA_PAYMENT_MODE=full_payment
# Способы расчета:
# full_payment - полная оплата
# partial_payment - частичная оплата
# advance - аванс
# full_prepayment - полная предоплата
# partial_prepayment - частичная предоплата
# credit - передача в кредит
# credit_payment - оплата кредита
YOOKASSA_PAYMENT_SUBJECT=service
# Предметы расчета:
# commodity - товар
# excise - подакцизный товар
# job - работа
# service - услуга
# gambling_bet - ставка в азартной игре
# gambling_prize - выигрыш в азартной игре
# lottery - лотерейный билет
# lottery_prize - выигрыш в лотерее
# intellectual_activity - результат интеллектуальной деятельности
# payment - платеж
# agent_commission - агентское вознаграждение
# composite - составной предмет расчета
# another - другое
# Webhook настройки
YOOKASSA_WEBHOOK_PATH=/yookassa-webhook
YOOKASSA_WEBHOOK_PORT=8082
YOOKASSA_WEBHOOK_SECRET=your_webhook_secret
# ===== ИНТЕРФЕЙС И UX =====
# Режим работы кнопки "Подключиться"
# guide - открывает гайд подключения (режим 1)
# miniapp_subscription - открывает ссылку подписки в мини-приложении (режим 2)
# miniapp_custom - открывает заданную ссылку в мини-приложении (режим 3)
CONNECT_BUTTON_MODE=guide
# URL для режима miniapp_custom (обязателен при CONNECT_BUTTON_MODE=miniapp_custom)
MINIAPP_CUSTOM_URL=
# ===== МОНИТОРИНГ И УВЕДОМЛЕНИЯ =====
MONITORING_INTERVAL=60
INACTIVE_USER_DELETE_MONTHS=3
# Уведомления
TRIAL_WARNING_HOURS=2
ENABLE_NOTIFICATIONS=true
NOTIFICATION_RETRY_ATTEMPTS=3
MONITORING_LOGS_RETENTION_DAYS=30
NOTIFICATION_CACHE_HOURS=24
# ===== РЕЖИМ ТЕХНИЧЕСКИХ РАБОТ =====
MAINTENANCE_MODE=false
MAINTENANCE_CHECK_INTERVAL=30
MAINTENANCE_AUTO_ENABLE=true
MAINTENANCE_MESSAGE=Ведутся технические работы. Сервис временно недоступен. Попробуйте позже.
# ===== ЛОКАЛИЗАЦИЯ =====
DEFAULT_LANGUAGE=ru
AVAILABLE_LANGUAGES=ru,en
# ===== ЛОГИРОВАНИЕ =====
LOG_LEVEL=INFO
LOG_FILE=logs/bot.log
# ===== РАЗРАБОТКА =====
DEBUG=false
WEBHOOK_URL=
WEBHOOK_PATH=/webhook
# ===== ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ =====
# Конфигурация приложений для гайда подключения
APP_CONFIG_PATH=app-config.json
ENABLE_DEEP_LINKS=true
APP_CONFIG_CACHE_TTL=3600
🐳 Docker развертывание
📄 docker-compose.yml
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"
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
volumes:
- redis_data:/data
networks:
- bot_network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
bot:
image: fr1ngg/remnawave-bedolaga-telegram-bot:latest
container_name: remnawave_bot
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
env_file:
- .env
environment:
DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-remnawave_user}:${POSTGRES_PASSWORD:-secure_password_123}@postgres:5432/${POSTGRES_DB:-remnawave_bot}
REDIS_URL: redis://redis:6379/0
volumes:
- ./logs:/app/logs
- ./data:/app/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "${TRIBUTE_WEBHOOK_PORT:-8081}:8081"
- "${YOOKASSA_WEBHOOK_PORT:-8082}:8082"
networks:
- bot_network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8081/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
volumes:
postgres_data:
redis_data:
networks:
bot_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
🔧 Настройка webhook'ов (для Tribute/YooKassa)
Через Nginx
server {
listen 80;
server_name your-domain.com;
location /tribute-webhook {
proxy_pass http://127.0.0.1:8081;
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 /yookassa-webhook {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /health {
proxy_pass http://127.0.0.1:8081/health;
}
}
Через Caddy
your-domain.com {
handle /tribute-webhook* {
reverse_proxy localhost:8081
}
handle /yookassa-webhook* {
reverse_proxy localhost:8082
}
handle /health {
reverse_proxy localhost:8081/health
}
}
🚀 Команды управления
# Быстрый старт
docker compose up -d --build
# Статус сервисов
docker compose ps
# Логи
docker compose logs -f bot
# Перезапуск
docker compose restart bot
# Остановка
docker compose down
# Полная очистка
docker compose down -v --remove-orphans
⭐ Функционал
👤 Для пользователей🛒 Умная покупка подписок
💰 Удобные платежи
📱 Управление подписками
🎁 Бонусная система
|
⚙️ Для администраторов📊 Мощная аналитика
👥 Управление пользователями
🎫 Промо-система
🖥️ Мониторинг системы
📨 Коммуникации
|
🔧 Первичная настройка в боте
После запуска необходимо:
-
📡 Синхронизация серверов (обязательно!)
- Зайди в бот → Админ панель → Подписки → Управление серверами
- Нажми Синхронизация и дождись завершения
- Без этого пользователи не смогут выбирать страны!
-
👥 Синхронизация пользователей (если есть база)
- Админ панель → Remnawave → Синхронизация
- Синхронизировать всех → дождись импорта
💳 Настройка платежных систем
Telegram Stars
Работает автоматически после указания BOT_TOKEN.
Tribute
- Зарегистрируйся на https://tribute.app
- Создай донат-ссылку
- Получи API ключ
- Настрой webhook в Tribute:
https://your-domain.com/tribute-webhook
YooKassa
- Зарегистрируйся в ЮKassa
- Получи Shop ID и Secret Key
- Настрой webhook в YooKassa:
https://your-domain.com/yookassa-webhook
💡 Использование
👤 Для пользователей
- 🚀 Старт → Найди бота и нажми
/start - 📋 Правила → Прими правила сервиса
- 💰 Баланс → "💰 Баланс" → пополни через Stars/Tribute
- 🛒 Подписка → "🛒 Купить подписку" → выбор тарифа → оплата
- 📱 Управление → "📋 Мои подписки" → конфигурация → получение ссылки
- 👥 Рефералы → "👥 Рефералы" → поделись ссылкой
⚙️ Для администраторов
Доступ через "⚙️ Админ панель":
- 📦 Подписки → настройка серверов, цен, синхронизация
- 👥 Пользователи → поиск, редактирование, блокировка
- 🎁 Промокоды → создание бонусов, статистика
- 📨 Рассылки → уведомления по сегментам
- 🖥 Remnawave → мониторинг панели, синхронизация
- 📊 Статистика → детальная аналитика бизнеса
🚀 Производительность
| Пользователей | Память | 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 |
🐛 Устранение неполадок
Health Checks
- Основной:
http://localhost:8081/health - YooKassa:
http://localhost:8082/health
Полезные команды
# Просмотр логов
docker compose logs -f bot
# Статус контейнеров
docker compose ps
# Перезапуск бота
docker compose restart bot
# Проверка базы данных
docker compose exec postgres pg_isready -U remnawave_user
Частые проблемы
| Проблема | Решение |
|---|---|
| Бот не отвечает | Проверь BOT_TOKEN и интернет |
| Ошибки БД | Проверь статус PostgreSQL контейнера |
| Webhook не работает | Проверь настройки прокси-сервера |
| API Remnawave недоступен | Проверь REMNAWAVE_API_URL и ключ |
🏗️ Архитектура
💪 Современный стек технологий
- 🐍 Python 3.11+ с AsyncIO - максимальная производительность
- 🗄️ PostgreSQL 15+ - надежное хранение данных
- ⚡ Redis - быстрое кеширование и сессии
- 🐳 Docker - простое развертывание в любой среде
- 🔗 SQLAlchemy ORM - безопасная работа с БД
- 🚀 aiogram 3 - современная Telegram Bot API
📁 Структура проекта
bedolaga_bot/
├── 🎯 main.py # Точка входа
├── 📦 requirements.txt # Зависимости
├── ⚙️ .env.example # Конфиг
├── ⚙️ app-config.json # Информация для гайда в боте по подключению
│
├── 📱 app/
│ ├── 🤖 bot.py # Инициализация бота
│ ├── ⚙️ config.py # Настройки
│ ├── 🎛️ states.py # FSM состояния
│ │
│ ├── 🎮 handlers/ # Обработчики событий
│ │ ├── 🏠 start.py # Регистрация и старт
│ │ ├── 🛒 subscription.py # Подписки
│ │ ├── 💰 balance.py # Баланс и платежи
│ │ ├── 🎁 promocode.py # Промокоды
│ │ ├── 👥 referral.py # Реферальная система
│ │ ├── 💬 support.py # Техподдержка
│ │ └── 👑 admin/ # Админ панель
│ │ ├── 📊 statistics.py # Статистика
│ │ ├── 👥 users.py # Управление юзерами
│ │ ├── 🎫 promocodes.py # Управление промокодами
│ │ ├── 📨 messages.py # Рассылки
│ │ ├── 🔍 monitoring.py # Мониторинг
│ │ └── 🔗 remnawave.py # Система RemnaWave
│ │
│ ├── 🗄️ database/ # База данных
│ │ ├── 📊 models.py # Модели SQLAlchemy
│ │ ├── 🔗 database.py # Подключение к БД
│ │ └── 📝 crud/ # CRUD операции
│ │
│ ├── 🔧 services/ # Бизнес-логика
│ │ ├── 👤 user_service.py # Сервис пользователей
│ │ ├── 📋 subscription_service.py # Сервис подписок
│ │ ├── 💰 payment_service.py # Платежи
│ │ ├── 🎁 promocode_service.py # Промокоды
│ │ ├── 👥 referral_service.py # Рефералы
│ │ ├── 🔍 monitoring_service.py # Мониторинг
│ │ └── 🌐 remnawave_service.py # Интеграция с Remnawave
│ │
│ ├── 🛠️ utils/ # Утилиты
│ ├── 🛡️ middlewares/ # Middleware
│ ├── 🌐 localization/ # Локализация
│ └── 🔌 external/ # Внешние API
│
├── 🔄 migrations/ # Миграции БД
└── 📋 logs/ # Логи системы
🤝 Как помочь проекту
- 🔍 Сообщай о багах с подробным описанием
- 💡 Предлагай идеи для улучшения
- ⭐ Ставь звезды проекту - это мотивирует!
- 📢 Рассказывай друзьям о проекте
- 💝 Поддержи разработку - помоги проекту расти
💬 Поддержка и сообщество
📞 Контакты
- 💬 Telegram: @fringg - вопросы по разработке (только по делу!)
- 💬 Telegram Group: Bedolaga Chat - Для общения, вопросов, предложений, багов
- 🐛 Issues: GitHub Issues - баги и предложения
📚 Полезные ресурсы
- 📖 Remnawave Docs - документация панели
- 🤖 Telegram Bot API - API ботов
- 🐳 Docker Guide - обучение Docker
💝 Благодарности
🌟 Топ спонсоры проекта
| 🥇 Место | 👤 Спонсор | 💰 Сумма | 💬 От себя благодарю |
|---|---|---|---|
| 🥇 | Илья (@ispanec_nn) | $30 | За веру в проект с самого начала |
| 🥈 | @pilot_737800 | ₽2,250 | За активное тестирование и фидбек |
| 🥉 | @Legacyyy777 | ₽1,000 | За ценные предложения по улучшению |
🌟 Особая благодарность
- Remnawave Team - за отличную панель и API
📄 Лицензия
Проект распространяется под лицензией MIT