Skip to content

QueenDekim/XRay-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Язык / Language: Русский | English

XRay VPN bot [Telegram]

GitHub last commit GitHub commit activity
GitHub top language GitHub License

Описание проекта

Этот проект представляет собой Telegram бота для продажи и управления VPN подписками через панель управления 3X-UI. Бот позволяет пользователям приобретать подписки на VPN, создавать и управлять своими профилями, а администраторам — управлять пользователями и отслеживать статистику.

Основные возможности:

  • Регистрация пользователей и предоставление пробного периода
  • Продление подписки через платежную систему Telegram
  • Создание и удаление VPN профилей (VLESS) в панели 3X-UI
  • Временные профили на 30 минут для тестирования
  • Уведомления об истечении подписки
  • Генерация QR-кодов для быстрого подключения
  • Новые команды быстрого доступа: /renew, /connect, /stats, /help
  • Административное меню для управления пользователями и рассылки сообщений
  • Статистика использования трафика
  • Автоматическое исправление дат подписок и профилей
  • Проверка и синхронизация подписок между 3x-ui и базой данных

Установка и настройка

Предварительные требования

  • Python 3.10+
  • Панель управления 3X-UI
    • Создан inbound с параметром "Безопасность Reality"
    • Опционально: отдельный inbound для временных профилей
  • Telegram бот (созданный через @BotFather)
  • SSL сертификаты для HTTPS (для временных профилей)

Шаги установки

  1. Клонируйте репозиторий:
git clone https://github.com/QueenDekim/XRay-bot
cd XRay-bot
  1. Установите зависимости:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
  1. Настройте переменные окружения:
cp src/.env.example src/.env  # Отредактируйте .env файл со своими значениями
  1. Запустите бота:
python src/app.py

Для запуска веб-сервера временных профилей (опционально):

python src/temp_profile_server.py

Настройка переменных окружения

Обязательные параметры в .env:

  • BOT_TOKEN - токен вашего Telegram бота от @BotFather
  • PAYMENT_TOKEN - платежный токен от @BotFather
  • ADMINS - ID администраторов через запятую
  • XUI_API_URL - URL панели 3X-UI (например: http://ip:54321)
  • XUI_USERNAME и XUI_PASSWORD - учетные данные панели
  • INBOUND_ID - ID инбаунда в панели 3X-UI
  • Параметры Reality (публичный ключ, fingerprint, SNI и т.д.)

Опциональные параметры для временных профилей:

  • TEMP_INBOUND_ID - ID инбаунда для временных профилей (по умолчанию: 2)
  • TEMP_REALITY_PUBLIC_KEY - публичный ключ для временных профилей
  • TEMP_REALITY_FINGERPRINT - fingerprint для временных профилей
  • TEMP_REALITY_SNI - SNI для временных профилей
  • TEMP_REALITY_SHORT_ID - short ID для временных профилей
  • TEMP_REALITY_SPIDER_X - spider X для временных профилей
  • TEMP_WEB_SERVER_PORT - порт веб-сервера временных профилей (по умолчанию: 8080)
  • TEMP_SSL_CERT_PATH - путь к SSL сертификату (fullchain.pem)
  • TEMP_SSL_KEY_PATH - путь к приватному ключу SSL (privkey.pem)

Команды бота

Пользовательские команды

  • /start - Запуск бота и регистрация
  • /menu - Главное меню
  • /renew - Продление подписки
  • /connect - Подключение к VPN с QR-кодом
  • /stats - Просмотр статистики использования
  • /help - Справка

Административные функции

Администраторы имеют доступ к специальному меню с функциями:

  • Добавление/удаление времени подписки
  • Удаление пользователя с очисткой профиля в 3x-ui
  • Просмотр списка пользователей
  • Проверка и исправление расхождений подписок
  • Исправление всех профилей с неправильными датами
  • Статистика использования сети
  • Рассылка сообщений пользователям
  • Управление статическими профилями

Техническая архитектура

Файловая структура

./
├── src
│   ├── .env.example              # Пример файла конфигурации
│   ├── app.py                    # Основной файл приложения
│   ├── config.py                 # Конфигурация приложения
│   ├── database.py               # Модели и функции базы данных
│   ├── functions.py              # Функции для работы с 3X-UI API
│   ├── handlers.py               # Обработчики команд и callback'ов
│   └── temp_profile_server.py    # Веб-сервер временных профилей
├── templates                     # Шаблоны для временных профилей
│   ├── temp_profile.html         # Страница временного профиля
│   └── error.html                # Страница ошибок
├── docs                          # Документация на других языках
│   └── README.en_US              # Документация на английском языке
├── users.db                      # Файл базы данных SQLite
├── README.md                     # Документация на русском языке
└── requirements.txt              # Зависимости проекта

База данных

Проект использует SQLite с SQLAlchemy ORM. Основные таблицы:

  1. users - информация о пользователях:
    • telegram_id - ID пользователя в Telegram
    • subscription_end - дата окончания подписки
    • vless_profile_data - данные VPN профиля в JSON
    • is_admin - флаг администратора
  2. static_profiles - статические VPN профили:
    • name - имя профиля
    • vless_url - VLESS ссылка

Основные компоненты

1. app.py

Главный файл приложения, который:

  • Инициализирует базу данных
  • Запускает фоновую задачу проверки подписок
  • Обрабатывает платежные запросы
  • Регистрирует команды бота в меню Telegram
  • Запускает polling бота

2. config.py

Загрузка и валидация конфигурации через Pydantic. Содержит:

  • Настройки подключения к 3X-UI панели
  • Параметры Reality протокола
  • Параметры для временных профилей
  • Цены и скидки на подписки
  • Функции для расчета стоимости

3. database.py

Модели и функции для работы с базой данных:

  • Модель User для хранения пользователей
  • Модель StaticProfile для статических профилей
  • Функции управления подписками и профилями
  • Функция validate_and_fix_subscription_date для исправления дат
  • Функция delete_user для удаления пользователей
  • Функции get_users_with_profiles и fix_all_subscription_dates

4. functions.py

Класс XUIAPI для взаимодействия с панелью 3X-UI:

  • Аутентификация в панели
  • Создание и удаление клиентов
  • Обновление времени истечения профилей
  • Получение статистики использования
  • Генерация VLESS URL
  • Функция get_safe_expiry_timestamp для безопасного получения timestamp
  • Функция check_and_fix_subscriptions для проверки подписок
  • Функция force_update_profile_expiry для принудительного обновления

5. handlers.py

Обработчики команд и callback'ов:

  • Команды /start, /menu, /renew, /connect, /stats, /help
  • Обработка платежей
  • Административные функции
  • Управление профилями
  • Обработчики для новых админ-функций

6. temp_profile_server.py

Веб-сервер для временных профилей:

  • FastAPI приложение
  • Создание временных профилей на 30 минут
  • Автоматическое удаление по истечении времени
  • HTTPS поддержка с SSL сертификатами

Работа с платежами

Бот использует встроенную платежную систему Telegram. При выборе подписки:

  1. Пользователь выбирает период подписки
  2. Бот создает инвойс через bot.send_invoice()
  3. После успешной оплаты обрабатывается через process_successful_payment()
  4. Подписка пользователя продлевается
  5. Автоматически обновляется expiry_time в 3x-ui

Административные функции

Администраторы имеют доступ к специальному меню с функциями:

  • Добавление/удаление времени подписки
  • Удаление пользователя с полным очищением профиля в 3x-ui
  • Просмотр списка пользователей
  • Проверка подписок - выявление расхождений между 3x-ui и БД
  • Исправление профилей - автоматическое исправление всех дат
  • Статистика использования сети
  • Рассылка сообщений пользователям
  • Управление статическими профилями

Интеграция с 3X-UI

Бот взаимодействует с панелью 3X-UI через ее API:

  1. Аутентификация по логину/паролю
  2. Получение данных инбаунда
  3. Добавление клиентов в настройки инбаунда
  4. Обновление конфигурации инбаунда
  5. Обновление expiry_time для существующих клиентов

Генерация VLESS URL

Формат VLESS URL для Reality:

vless://{client_id}@{host}:{port}?type=tcp&security=reality&pbk={public_key}&fp={fingerprint}&sni={sni}&sid={short_id}&spx={spider_x}#{remark}

Мониторинг и уведомления

Бот автоматически проверяет подписки каждый час и:

  • Уведомляет пользователей за 24 часа до окончания
  • Удаляет профили с истекшей подпиской
  • Отправляет уведомления администраторам о платежах
  • Исправляет некорректные даты подписок

Генерация QR-кодов

Бот автоматически генерирует QR-коды для профилей:

  • Использует библиотеку qrcode
  • Создает QR-код с подпиской на профиль
  • Отправляет изображение пользователю

Временные профили

Функционал временных профилей позволяет:

  • Создавать профили на 30 минут для тестирования
  • Использовать отдельный inbound для временных профилей
  • Автоматически удалять профили по истечении времени
  • Предоставлять доступ через веб-интерфейс

Цены и скидки

Бот поддерживает гибкую систему ценообразования:

  • 1 месяц - 100 руб.
  • 3 месяца - 300 руб. (скидка 10%)
  • 6 месяцев - 600 руб. (скидка 20%)
  • 12 месяцев - 1200 руб. (скидка 30%)

Безопасность

  • Все чувствительные данные хранятся в переменных окружения
  • Используется валидация конфигурации через Pydantic
  • Ограниченный доступ к административным функциям
  • Безопасное хранение платежной информации через Telegram
  • Валидация и исправление дат подписок
  • Проверка расхождений между 3x-ui и базой данных

Возможные проблемы и решения

  1. Ошибки подключения к 3X-UI - проверьте URL и учетные данные
  2. Проблемы с платежами - убедитесь в корректности платежного токена
  3. Ошибки базы данных - проверьте права на запись в директорию
  4. Не работают уведомления - проверьте настройки времени и часового пояса
  5. Некорректные даты подписок - используйте функцию "Исправить профили" в админ-меню
  6. Расхождения в датах - используйте функцию "Проверить подписки" в админ-меню

Для дополнительной информации обращайтесь к документации aiogram и 3X-UI.


Demo - Полностью функциональный бот Связь с разработчиком
Telegram: @Dekim_vpn_bot Telegram: @QueenDek1m
Discord: from_russia_with_love

About

Telegram bot for selling and managing VPN subscriptions via the 3X-UI dashboard.

Topics

Resources

License

Stars

Watchers

Forks

Contributors