All checks were successful
Build and Push Docker Image / build (push) Successful in 2m15s
74 lines
3.0 KiB
Python
74 lines
3.0 KiB
Python
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<code>/create udochudo</code>"
|
||
)
|
||
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("❌ Произошла ошибка при создании профиля. Попробуйте позже.")
|
||
|
||
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<code>/info udochudo</code>"
|
||
)
|
||
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"❌ Клиент <b>{name}</b> не найден.\n"
|
||
json_info = json.dumps(client, ensure_ascii=False, indent=2)
|
||
return f"🔹 <b>{name}</b>:\n<pre>{json_info}</pre>"
|
||
|
||
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("❌ Ошибка при получении информации. Проверь лог.") |