Задание: Python. Интеграция существующего Telegram-бота с тремя панелями 3x-ui по API (VLESS / Reality) (Дистанционная работа)
Есть работающий Telegram-бот (Python, aiogram) и три действующие панели управления сетевыми доступами 3x-ui (две в Нидерландах, одна в Казахстане) с активной базой клиентов. Необходимо доработать код бота, чтобы адекватно подключить к нему все три панели по API, настроить корректное распределение запросов по локациям и автоматизировать миграцию существующих пользователей на протокол VLESS + Reality. Что конкретно нужно сделать: 1. Интеграция инлайн-меню выбора локаций Создать и привязать инлайн-кнопки бота (Нидерланды 1, Нидерланды 2, Казахстан) к API соответствующих панелей. При выборе локации бот должен жестко фиксировать этот статус за пользователем в базе данных (PostgreSQL / MongoDB) для последующего контроля лимитов и продлений. 2. Логика работы с API и инбаундами (Inbound ID)Новые пользователи: Должны создаваться через API на инбаундах с протоколом VLESS + Reality. Для каждой из 3-х панелей выделим свой фиксированный INBOUND_ID. Действующие пользователи: Реализовать бесшовный перенос. В момент первого обращения активного клиента к боту (запрос статуса/продления), бот должен автоматически забрать его UUID из базы данных и активировать на новом Reality-инбаунде этой панели. Ограничение по IP: Для всех создаваемых и переносимых учетных записей в коде бота необходимо жестко прописать лимит в 2 IP (передавать параметр limitIp: 2 в JSON-запросе к API 3x-ui). 3. Сборка динамических конфигурационных ссылок Бот должен корректно собирать финальную строковую ссылку vless:// для клиента. Формат строки: vless://{UUID}@{SERVER_DOMAIN}:{REALITY_PORT}?flow=xtls-rprx-vision&fp=firefox&pbk={PUBLIC_KEY}&security=reality&sid={SHORT_ID}&snl={SNI}&spx={SPX}&type=tcp#{LOCATION_NAME} Параметры: UUID берётся из БД; SERVER_DOMAIN привязан к выбранной кнопке; параметры REALITY_PORT, PUBLIC_KEY, SHORT_ID, SNI, SPX бот должен динамически вытягивать по API из настроек конкретного инбаунда. Хвостовой тег: В конец ссылки (#LOCATION_NAME) бот должен подставлять красивое имя локации для отображения в интерфейсе клиентских приложений (например, FNL | Netherlands 1 или FNL | Kazakhstan). Технические требования и критерии приёмки Стек проекта: Python 3.10+, aiogram, Docker, Docker Compose.Архитектура: Все конфигурационные данные (доступы к панелям, адреса, токены) должны быть вынесены в отдельный .cfg / .env файл. Отказоустойчивость: Написать адекватную обработку ошибок API панелей на случай, если один из серверов временно недоступен (чтобы бот не падал). Развертывание: Обновленный код должен стабильно работать в Docker-контейнере на сервере Timeweb. Тестирование: Сгенерированные ссылки должны без ошибок импортироваться в кроссплатформенные клиенты (v2rayNG, NekoBox, AnXray, Streisand). Все исходники бота, доступы к тестовым панелям и конфигурационные файлы будут предоставлены исполнителю.