import json
from aiogram import types
from aiogram.enums import ParseMode
from pyxui.errors import BadLogin
from bot.services.client import ClientService
from bot.utils.logging import logger
class ClientHandlers:
"""Обработчики команд для работы с клиентами."""
def __init__(self, client_service: ClientService):
self.client_service = client_service
async def cmd_create(self, message: types.Message):
"""Обработчик команды /create."""
args = (message.text or "").strip().split(maxsplit=1)
if len(args) < 2:
await message.answer(
"❌ Укажи Telegram ID или username после команды.\n"
"Пример:\n/create udochudo"
)
return
telegram_id = args[1].lstrip("@").strip()
try:
success, result_message = await self.client_service.create_client_profile(telegram_id)
if success:
await message.answer(result_message, parse_mode=ParseMode.HTML)
else:
await message.answer(f"❌ {result_message}")
except BadLogin:
await message.answer("❌ Ошибка: неверный логин или пароль XUI.")
except Exception as e:
logger.error(f"Неожиданная ошибка при создании профиля: {e}")
await message.answer(f"❌ Произошла ошибка при создании профиля. Попробуйте позже.\n {e}")
async def cmd_info(self, message: types.Message):
"""Обработчик команды /info."""
args = (message.text or "").strip().split(maxsplit=1)
if len(args) < 2:
await message.answer(
"❌ Укажи Telegram ID или username после команды.\n"
"Пример:\n/info udochudo"
)
return
telegram_id = args[1].lstrip("@").strip()
try:
vless_client, ss_client = self.client_service.get_client_info(telegram_id)
def format_info(client, name):
if not client:
return f"❌ Клиент {name} не найден.\n"
json_info = json.dumps(client, ensure_ascii=False, indent=2)
return f"🔹 {name}:\n
{json_info}"
response = (
format_info(vless_client, "VLESS") +
"\n\n" +
format_info(ss_client, "Shadowsocks")
)
await message.answer(response, parse_mode=ParseMode.HTML)
except BadLogin:
await message.answer("❌ Ошибка входа в панель XUI.")
except Exception as e:
logger.error(f"Ошибка получения информации: {e}")
await message.answer("❌ Ошибка при получении информации. Проверь лог.")