Telegram бот для продажи VPN доступа с интеграцией WGDashboard и поддержкой платежей через Telegram Stars и ЮKassa с внешними ссылками.
- Многотарифная система: 14 дней, 30 дней
- Два способа оплаты: Telegram Stars и ЮKassa (внешние ссылки)
- Автоматическое создание VPN: Интеграция с WGDashboard
- Webhook обработка: Автоматическое подтверждение платежей ЮKassa
- HTTPS поддержка: Nginx reverse proxy с SSL
- Уведомления: Автоматические напоминания об истечении доступа
| Период | Telegram Stars | ЮKassa |
|---|---|---|
| 14 дней | ENV TARIFF_14_DAYS_STARS (по умолчанию 100) Stars | ENV TARIFF_14_DAYS_RUB (по умолчанию 150) ₽ |
| 30 дней | ENV TARIFF_30_DAYS_STARS (по умолчанию 200) Stars | ENV TARIFF_30_DAYS_RUB (по умолчанию 300) ₽ |
git clone https://github.com/alexnikon/wgbot.git
cd wgbotcp env.docker.example .env
nano .env # Заполните реальными данными# Создайте директорию для SSL сертификатов
mkdir -p ssl
# Поместите ваши SSL сертификаты в директорию ssl/
# cert.pem - сертификат
# key.pem - приватный ключ# Сборка и запуск
docker-compose up -d --build
# Или только сборка
docker-compose build
# Затем запуск
docker-compose up -dПримечание: Образ собирается локально из Dockerfile
# Telegram Bot Token (получить у @BotFather)
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
# WGDashboard Configuration
WG_DASHBOARD_URL=http://your-wg-dashboard-url:10086
WG_DASHBOARD_API_KEY=your_wg_dashboard_api_key_here
# YooKassa Configuration
YOOKASSA_SHOP_ID=your_yookassa_shop_id_here
YOOKASSA_SECRET_KEY=your_yookassa_secret_key_here
# Webhook Configuration
WEBHOOK_URL=https://your-domain.com/webhook/yookassa
DOMAIN=your-domain.com
# Support URL
SUPPORT_URL=https://t.me/straycat0789
# Tariffs (prices)
TARIFF_14_DAYS_STARS=100
TARIFF_14_DAYS_RUB=150
TARIFF_30_DAYS_STARS=200
TARIFF_30_DAYS_RUB=300
# Logging
LOG_LEVEL=INFO- Создайте бота через @BotFather
- Получите токен бота
- Настройте команды бота:
start - Главное меню buy - Купить доступ connect - Получить конфигурацию extend - Продлить доступ status - Проверить статус
- Установите и настройте WGDashboard
- Получите API ключ
- Убедитесь, что API доступен по указанному URL
- Зарегистрируйтесь в ЮKassa
- Получите Shop ID и Secret Key
- Настройте webhook URL в личном кабинете ЮKassa:
- Перейдите в раздел Интеграция → HTTP-уведомления
- URL:
https://your-domain.com/webhook/yookassa - События:
payment.succeeded,payment.canceled,payment.waiting_for_capture - ВАЖНО: URL должен быть доступен из интернета по HTTPS (порт 443 или 8443)
- TLS/SSL сертификат может быть самоподписанным, версия TLS 1.2 или выше
- Проверьте доступность webhook:
- Откройте в браузере:
https://your-domain.com/webhook/yookassa/test - Должен вернуться JSON с информацией о endpoint
- Откройте в браузере:
- Проверьте логи webhook сервера после успешной оплаты:
docker-compose logs -f webhook- Должны появиться логи о получении webhook от ЮKassa
# Запуск
docker-compose up -d
# Остановка
docker-compose down
# Просмотр логов
docker-compose logs -f
# Перезапуск
docker-compose restart
# Пересборка и запуск
docker-compose up -d --build
# Только сборка
docker-compose buildСистема состоит из трех основных компонентов:
- nginx: Reverse proxy с SSL терминацией
- wgbot: Основной бот для обработки команд Telegram
- webhook: Сервер для обработки уведомлений от ЮKassa
Все компоненты работают в Docker контейнерах и общаются через внутреннюю сеть.
wgbot/
├── bot.py # Основной файл бота
├── webhook_server.py # Webhook сервер для ЮKassa
├── yookassa_client.py # Клиент для работы с ЮKassa API
├── config.py # Конфигурация
├── database.py # Работа с базой данных
├── payment.py # Обработка платежей
├── utils.py # Утилиты
├── wg_api.py # API WGDashboard
├── run.py # Точка входа
├── requirements.txt # Зависимости Python
├── nginx.conf # Конфигурация nginx
├── docker-compose.yml # Docker Compose конфигурация
├── env.docker.example # Пример конфигурации
└── wgdashboard_doc.txt # Документация WGDashboard API
- Все секретные данные хранятся в переменных окружения
- Файл
.envдобавлен в.gitignore - База данных и логи не попадают в репозиторий
- Контейнер запускается под непривилегированным пользователем
- Read-only файловая система
- Ограничения ресурсов (512MB RAM, 0.5 CPU)
Бот использует SQLite базу данных со следующей структурой:
id- Уникальный идентификаторpeer_name- Имя пира (username_telegramID)peer_id- ID пира в WGDashboardjob_id- ID job для ограничения времениtelegram_user_id- ID пользователя Telegramtelegram_username- Username пользователяcreated_at- Дата созданияexpire_date- Дата истечения доступаis_active- Активен ли пирpayment_status- Статус оплатыstars_paid- Количество оплаченных звездlast_payment_date- Дата последней оплатыnotification_sent- Отправлено ли уведомлениеexpired_notification_sent- Отправлено ли уведомление об истечении (однократно)tariff_key- Ключ тарифаpayment_method- Способ оплатыrub_paid- Количество оплаченных рублей
Бот интегрируется с WGDashboard через REST API:
POST /api/peers- Создание пираGET /api/peers/{peer_id}/config- Получение конфигурацииDELETE /api/peers/{peer_id}- Удаление пираPOST /api/savePeerScheduleJob- Создание job для ограничения времениDELETE /api/deletePeerScheduleJob- Удаление job
- Автоматическая обработка через Telegram API
- Поддержка всех тарифов
- Мгновенное подтверждение
- Поддержка банковских карт через внешние ссылки
- Webhook обработка для автоматического подтверждения
- Логирование всех транзакций
- HTTPS обязателен для webhook'ов
Бот автоматически отправляет уведомления:
- За 1 день до истечения доступа
- При истечении доступа
- При успешной оплате
Все события логируются в файл logs/wgbot.log:
- Запуск и остановка бота
- Создание и удаление пиров
- Обработка платежей
- Ошибки и исключения
# Все логи
docker-compose logs -f
# Логи бота
docker-compose logs -f wgbot
# Логи webhook сервера
docker-compose logs -f webhook
# Логи nginx
docker-compose logs -f nginxdocker exec -it wgbot sqlite3 /app/data/wgbot.db
.tables
SELECT * FROM peers;
SELECT * FROM payments;-
Проверка доступности webhook endpoint:
curl https://your-domain.com/webhook/yookassa/test
Должен вернуться JSON с информацией о endpoint.
-
Проверка webhook в личном кабинете ЮKassa:
- Убедитесь, что URL настроен правильно:
https://your-domain.com/webhook/yookassa - Проверьте, что включены события:
payment.succeeded,payment.canceled - Убедитесь, что сервер доступен из интернета
- Убедитесь, что URL настроен правильно:
-
Проверка логов webhook сервера:
docker-compose logs -f webhook | grep -i webhookДолжны быть логи о получении webhook запросов.
-
Проверка метаданных платежа:
- В логах должна быть информация о
user_idиtariff_keyв метаданных - Если метаданные отсутствуют, проверьте создание платежа в
payment.py
- В логах должна быть информация о
-
Если webhook не приходит:
- Проверьте настройки firewall - порт 443 должен быть открыт
- Проверьте, что nginx правильно проксирует запросы к webhook серверу
- Проверьте SSL сертификат - должен быть валидный сертификат
- Проверьте логи nginx на наличие ошибок
- Убедитесь, что webhook URL настроен в личном кабинете ЮKassa
nikonVPN Telegram Bot - надежное решение для продажи VPN доступа через Telegram! 🚀