Добро пожаловать! Форум WLUX.NET - Игры, Читы, Скрипты, Статьи, Софт, Курсы.

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. После регистрации и входа в систему вы сможете создавать темы, публиковать ответы на существующие темы, повышать репутацию участников, скачивать вложения и файлы и многое, многое другое. Так чего же вы ждете?

Добро пожаловать гость!

Приветствуем вас на нашем форуме! Мы очень рады вас видеть и с большим удовольствием поделимся всей информацией нашего форума!

Мы уважаем своих пользователей и так же ждем от вас приятного общения.

Система наград, ежедневное пополнения тем!

Общайся, получай награды.

Статьи, гайды, софт

У нас вы можете скачать бесплатно читы для игр. Полезные гайды на любые темы и схемы заработка. Есть раздел халявы!

FAQ по форуму

Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

  • Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываются в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки не работают на форуме

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

python Гайд Основы создания Telegram-бота для VPN на Python и 3X-UI

wlux.net Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
27 474
232
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
В этой статье я хочу поделиться своим опытом разработки, рассказать о выборе технологий, архитектуре бота, возникших сложностях и найденных решениях. Статья будет полезна в первую очередь разработчикам, интересующимся созданием Telegram-ботов, асинхронным программированием на Python и интеграцией с внешними API. Некоторые идеи были взяты из открытого доступа.

Почему именно Telegram-бот и X-UI?​

Идея создать VPN-сервис именно в Telegram возникла из желания сделать максимально простой и удобный инструмент для себя и друзей.
  • Telegram: Удобство для пользователя: Все под рукой, в привычном мессенджере.
  • Telegram Bot API предоставляет богатые возможности и позволяет быстро создать прототип.
  • Автоматизация: Легко автоматизировать выдачу доступа, обработку различных запросов, уведомления.
  • Готовое решение: X-UI (форк Xray-core) – это мощная панель управления VPN-серверами с открытым исходным кодом. Она предоставляет готовый API для управления пользователями, трафиком, настройками сервера, что значительно сокращает время разработки.
  • Гибкость: Поддержка множества протоколов, тонкая настройка.
  • Open Source: Возможность изучить код, внести изменения, адаптировать под свои нужды.

Техническая часть: из чего состоит мой бот​

  • Python 3.10+: Выбор языка был обусловлен его простотой, богатой экосистемой и отличной поддержкой асинхронности, что критически важно для высоконагруженного бота.
  • Aiogram: Асинхронный фреймворк для Telegram Bot API. Он предоставляет удобный API, FSM (конечные автоматы) для управления состояниями диалогов, и, что немаловажно, активно развивается и поддерживается сообществом. Позволяет быстро и удобно работать с Telegram.
  • Asyncpg: Асинхронный драйвер для PostgreSQL. Выбор PostgreSQL обусловлен надежностью, производительностью и поддержкой JSONB (что оказалось очень удобно для хранения настроек VPN-клиентов).
  • X-UI API: Используется для взаимодействия с панелью управления VPN-серверами.
  • Subscription-proxy: Используется для объединения подписок со всех панелей в одну. Так пользователь сможет получать подписку, внутри который будет множество стран на выбор.
Основы создания Telegram-бота для VPN на Python и 3X-UI.png

Архитектура и модули (кратко):​

Бот построен по модульному принципу. Есть отдельные модули для:
  • Взаимодействия с Telegram (Aiogram).
  • Работы с базой данных (Asyncpg).
  • Взаимодействия с X-UI API.
  • Админ-панели (управление ботом и серверами).
Такая архитектура делает код более читаемым, упрощает тестирование и позволяет легко добавлять новые функции в будущем.

Как это работает (схема):​

  • Пользователь отправляет команду боту в Telegram.
  • Бот обрабатывает команду, при необходимости обращается к базе данных.
  • Бот взаимодействует с API X-UI для создания или настройки VPN-подключения.
  • Бот генерирует ссылку для подключения и отправляет её пользователю.
  • Внутри ссылки множество стран. Если какой то сервер временное не отвечает, спокойно переключаетесь на другой.
  • Администратор (то есть я) может управлять ботом через встроенную админ-панель. 😅

Функционал:​

Для пользователей:
  • Автоматическое создание VPN-подключения (генерация ссылок для разных клиентов).
  • Инструкции для подключения на разных устройствах (iOS, Android, Windows, macOS, Android TV).
  • Техподдержка (прямая ссылка на чат).
  • Возможность использовать VPN на нескольких устройствах.
  • Уникальная ссылка WebApp настроек VPN
основы 2.png основы 3.png основы 4.png

Для администратора:
  • Рассылка сообщений.
  • Просмотр статистики.
  • Управление серверами (добавление, редактирование, удаление, проверка Ping серверов, обновление ГЕО).
  • Удаление устаревших подключений.
  • Резервное копирование базы данных.
  • Перезагрузка бота.
админка1.png админка2.png админка 3.png

Обновление ГЕО:​

Когда у вас уже есть пользователи на серверах, есть множество подключений, вы добавляете еще один сервер, и надо на новый сервер добавить подключения для пользователей. Согласитесь, что вручную делать это очень долго, и трудно.
Кнопка "Обновление ГЕО", сканирует все подписки пользователя на серверах, время подписки, пробная или нет, дата создания и т.п., и создает аналогичное подключение на новом сервере.
Вы нажимаете "Обновление ГЕО", выбираете сервер куда надо добавить подписки пользователей, и бот за несколько секунд асинхронно это делает, и после мы получаем статистику, сколько добавилось, были ли неудачи, были ли дубликаты, лог. 😏
Зачем это нужно? Для того чтобы подключение на новом сервере подтянулось в общую ссылку, и у пользователя уже в активной его подписке отобразится новая страна! Это очень удобно и занимает минимум времени!
Если вы удаляете сервер, то удаляются все записи из БД и панели только для того сервера, который вы удаляете, что тоже очень удобно!
Добавление сервера еще проще, а редактирование сервера происходит очень интересно, и максимально удобно! Если вдруг надо заменить какие-то данные.
😏

Ключевые фишки (с точки зрения кода):​

  • Асинхронность: Весь код бота написан с использованием асинхронных функций (async/await). Это позволяет обрабатывать тысячи запросов одновременно без блокировки основного потока. Благодаря этому бот остается отзывчивым даже при высокой нагрузке.
  • FSM (конечные автоматы): Использование FSM (Finite State Machine) в Aiogram оказалось очень удобным решением для управления диалогами с пользователями. Это позволяет легко отслеживать текущее состояние пользователя и корректно обрабатывать его действия.
  • Модульность: Код разбит на логические модули, что упрощает разработку, поддержку и тестирование.
  • Подробное логирование: Все действия бота и пользователей записываются в лог-файл, что помогает отлаживать и решать проблемы.
  • Уникальная ссылка WebApp настроек VPN, которую можно улучшать по своему.

Трудности и решения:​

  • Документация X-UI: Документация X-UI не всегда полная и актуальная. Пришлось потратить время на эксперименты и изучение исходного кода X-UI.
  • Обработка ошибок: API X-UI не всегда возвращает информативные сообщения об ошибках. Пришлось реализовать собственную систему обработки ошибок и логирования.

База данных (PostgreSQL):​

Тщательно продумана структура базы данных: реализованы правильные связи, проставлены нужные индексы. JSONB использую для хранения различных настроек.

Админ-панель:​

Админ панель встроена прямо в бота, доступ к ней только у админов, по Telegram ID
 

Поиск по форуму

Похожие темы:

shape1
shape2
shape3
shape4
shape7
shape8
Верх