Skip to content

alexnikon/wgbot

Repository files navigation

nikonVPN Telegram Bot

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) ₽

🛠 Установка

1. Клонирование репозитория

git clone https://github.com/alexnikon/wgbot.git
cd wgbot

2. Настройка конфигурации

cp env.docker.example .env
nano .env  # Заполните реальными данными

3. Настройка SSL сертификатов

# Создайте директорию для SSL сертификатов
mkdir -p ssl

# Поместите ваши SSL сертификаты в директорию ssl/
# cert.pem - сертификат
# key.pem - приватный ключ

4. Запуск

# Сборка и запуск
docker-compose up -d --build

# Или только сборка
docker-compose build

# Затем запуск
docker-compose up -d

Примечание: Образ собирается локально из Dockerfile

⚙️ Конфигурация (.env)

# 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

🔧 Настройка

Telegram Bot

  1. Создайте бота через @BotFather
  2. Получите токен бота
  3. Настройте команды бота:
    start - Главное меню
    buy - Купить доступ
    connect - Получить конфигурацию
    extend - Продлить доступ
    status - Проверить статус
    

WGDashboard

  1. Установите и настройте WGDashboard
  2. Получите API ключ
  3. Убедитесь, что API доступен по указанному URL

ЮKassa

  1. Зарегистрируйтесь в ЮKassa
  2. Получите Shop ID и Secret Key
  3. Настройте 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 или выше
  4. Проверьте доступность webhook:
    • Откройте в браузере: https://your-domain.com/webhook/yookassa/test
    • Должен вернуться JSON с информацией о endpoint
  5. Проверьте логи 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 базу данных со следующей структурой:

Таблица peers

  • id - Уникальный идентификатор
  • peer_name - Имя пира (username_telegramID)
  • peer_id - ID пира в WGDashboard
  • job_id - ID job для ограничения времени
  • telegram_user_id - ID пользователя Telegram
  • telegram_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 - Количество оплаченных рублей

🔄 API WGDashboard

Бот интегрируется с 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 Stars

  • Автоматическая обработка через Telegram API
  • Поддержка всех тарифов
  • Мгновенное подтверждение

ЮKassa

  • Поддержка банковских карт через внешние ссылки
  • 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 nginx

Проверка базы данных

docker exec -it wgbot sqlite3 /app/data/wgbot.db
.tables
SELECT * FROM peers;
SELECT * FROM payments;

Диагностика webhook'ов

  1. Проверка доступности webhook endpoint:

    curl https://your-domain.com/webhook/yookassa/test

    Должен вернуться JSON с информацией о endpoint.

  2. Проверка webhook в личном кабинете ЮKassa:

    • Убедитесь, что URL настроен правильно: https://your-domain.com/webhook/yookassa
    • Проверьте, что включены события: payment.succeeded, payment.canceled
    • Убедитесь, что сервер доступен из интернета
  3. Проверка логов webhook сервера:

    docker-compose logs -f webhook | grep -i webhook

    Должны быть логи о получении webhook запросов.

  4. Проверка метаданных платежа:

    • В логах должна быть информация о user_id и tariff_key в метаданных
    • Если метаданные отсутствуют, проверьте создание платежа в payment.py
  5. Если webhook не приходит:

    • Проверьте настройки firewall - порт 443 должен быть открыт
    • Проверьте, что nginx правильно проксирует запросы к webhook серверу
    • Проверьте SSL сертификат - должен быть валидный сертификат
    • Проверьте логи nginx на наличие ошибок
    • Убедитесь, что webhook URL настроен в личном кабинете ЮKassa

nikonVPN Telegram Bot - надежное решение для продажи VPN доступа через Telegram! 🚀

About

Telegram bot with payment integration and use WGDashboard

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published