- 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 (Aiogram).
- Работы с базой данных (Asyncpg).
- Взаимодействия с X-UI API.
- Админ-панели (управление ботом и серверами).
Как это работает (схема):
- Пользователь отправляет команду боту в Telegram.
- Бот обрабатывает команду, при необходимости обращается к базе данных.
- Бот взаимодействует с API X-UI для создания или настройки VPN-подключения.
- Бот генерирует ссылку для подключения и отправляет её пользователю.
- Внутри ссылки множество стран. Если какой то сервер временное не отвечает, спокойно переключаетесь на другой.
- Администратор (то есть я) может управлять ботом через встроенную админ-панель.
Функционал:
Для пользователей:- Автоматическое создание VPN-подключения (генерация ссылок для разных клиентов).
- Инструкции для подключения на разных устройствах (iOS, Android, Windows, macOS, Android TV).
- Техподдержка (прямая ссылка на чат).
- Возможность использовать VPN на нескольких устройствах.
- Уникальная ссылка WebApp настроек VPN



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



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

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

Ключевые фишки (с точки зрения кода):
- Асинхронность: Весь код бота написан с использованием асинхронных функций (async/await). Это позволяет обрабатывать тысячи запросов одновременно без блокировки основного потока. Благодаря этому бот остается отзывчивым даже при высокой нагрузке.
- FSM (конечные автоматы): Использование FSM (Finite State Machine) в Aiogram оказалось очень удобным решением для управления диалогами с пользователями. Это позволяет легко отслеживать текущее состояние пользователя и корректно обрабатывать его действия.
- Модульность: Код разбит на логические модули, что упрощает разработку, поддержку и тестирование.
- Подробное логирование: Все действия бота и пользователей записываются в лог-файл, что помогает отлаживать и решать проблемы.
- Уникальная ссылка WebApp настроек VPN, которую можно улучшать по своему.
Трудности и решения:
- Документация X-UI: Документация X-UI не всегда полная и актуальная. Пришлось потратить время на эксперименты и изучение исходного кода X-UI.
- Обработка ошибок: API X-UI не всегда возвращает информативные сообщения об ошибках. Пришлось реализовать собственную систему обработки ошибок и логирования.
База данных (PostgreSQL):
Тщательно продумана структура базы данных: реализованы правильные связи, проставлены нужные индексы. JSONB использую для хранения различных настроек.Админ-панель:
Админ панель встроена прямо в бота, доступ к ней только у админов, по Telegram IDПоследние темы в этом разделе:
- Софт Python обфускатор - Quantum Encryption + гайд по нему
- [Сергей Спирёв] [Stepik] Библиотека Seaborn. Статистическая визуализация данных в Python (2025)
- [А.Ерошенко, Л.Данилова и др.] Курс по автоматизации тестирования на JavaScript + Playwright (2025)
- [Михаил Крыжановский] [Stepik] Телеграм-боты на Python: продвинутый уровень (2024)
- [IT Start] Курс по Python 3 (2024)
- [А. Ерошенко, С. Хомутинин, С. Васенков] Автоматизация тестирования на Python (2024)
- [IT Start] Создание графического интерфейса в Python 3 с Tkinter (2024)
- [Дмитрий Лаврик] PHP – ООП (2021)
- Параллелизм в Python. Заметка на русском с примерами кода.
- Крутая, содержательная шпаргалка с примерами по веб-фреймворку Django