diff --git a/handlers/admin/servers/servers_handler.py b/handlers/admin/servers/servers_handler.py
index 5ea58cd6..b619961d 100644
--- a/handlers/admin/servers/servers_handler.py
+++ b/handlers/admin/servers/servers_handler.py
@@ -66,7 +66,8 @@ async def handle_servers(callback_query: CallbackQuery):
async def handle_clusters_add(callback_query: CallbackQuery, state: FSMContext):
text = (
"🔧 Введите имя нового кластера:\n\n"
- "Имя кластера должно быть уникальным!\n"
+ "Имя должно быть уникальным!\n"
+ "Имя не должно превышать 12 символов!\n"
"Пример: cluster1 или us_east_1"
)
@@ -79,7 +80,13 @@ async def handle_clusters_add(callback_query: CallbackQuery, state: FSMContext):
async def handle_cluster_name_input(message: Message, state: FSMContext):
if not message.text:
await message.answer(
- text="❌ Имя кластера не может быть пустым. Попробуйте снова.", reply_markup=build_admin_back_kb("servers")
+ text="❌ Имя кластера не может быть пустым! Попробуйте снова.", reply_markup=build_admin_back_kb("servers")
+ )
+ return
+
+ if len(message.text) > 12:
+ await message.answer(
+ text="❌ Имя кластера должно превышать 12 символов! Попробуйте снова.", reply_markup=build_admin_back_kb("servers")
)
return
@@ -104,15 +111,16 @@ async def handle_cluster_name_input(message: Message, state: FSMContext):
async def handle_server_name_input(message: Message, state: FSMContext, session: Any):
if not message.text:
await message.answer(
- text="❌ Имя сервера не может быть пустым. Попробуйте снова.", reply_markup=build_admin_back_kb("servers")
+ text="❌ Имя сервера не может быть пустым. Попробуйте снова.",
+ reply_markup=build_admin_back_kb("servers")
)
return
server_name = message.text.strip()
- if len(server_name) > 14:
+ if len(server_name) > 12:
await message.answer(
- text="❌ Имя сервера не должно превышать 10 символов. Попробуйте снова.",
+ text="❌ Имя сервера не должно превышать 12 символов. Попробуйте снова.",
reply_markup=build_admin_back_kb("servers"),
)
return
@@ -131,9 +139,9 @@ async def handle_server_name_input(message: Message, state: FSMContext, session:
text = (
f"Введите API URL для сервера {server_name} в кластере {cluster_name}:\n\n"
- "API URL должен быть в следующем формате:\n\n"
- "https://your_domain:port/panel_path\n\n"
- "URL должен быть без слэша на конце!\n"
+ "Ссылку можно найти в поисковой строке браузера, при входе в 3X-UI.\n\n"
+ "ℹ️ Формат API URL:\n"
+ "https://your_domain:port/panel_path/"
)
await message.answer(
@@ -145,7 +153,7 @@ async def handle_server_name_input(message: Message, state: FSMContext, session:
@router.message(AdminServersEditor.waiting_for_api_url, IsAdminFilter())
-async def handle_api_url_input(message: Message, state: FSMContext, session: Any):
+async def handle_api_url_input(message: Message, state: FSMContext):
if not message.text or not message.text.strip().startswith("https://"):
await message.answer(
text="❌ API URL должен начинаться с https://. Попробуйте снова.",
@@ -162,10 +170,9 @@ async def handle_api_url_input(message: Message, state: FSMContext, session: Any
text = (
f"Введите subscription_url для сервера {server_name} в кластере {cluster_name}:\n\n"
- "Subscription URL должен быть в следующем формате:\n\n"
- "https://your_domain:port_sub/sub_path\n\n"
- "URL должен быть без слэша и имени клиента на конце!\n"
- "Его можно увидеть в панели 3x-ui в информации о клиенте."
+ "Ссылку можно найти в панели 3X-UI, в информации о клиенте.\n\n"
+ "ℹ️ Формат Subscription URL:\n"
+ "https://your_domain:port_sub/sub_path/"
)
await message.answer(
@@ -278,8 +285,8 @@ async def handle_servers_availability(
await callback_query.message.edit_text(text=text)
- result_text = f"🖥️ Проверка доступности серверов для кластера {cluster_name} завершена:\n\n"
total_online_users = 0
+ result_text = f"🖥️ Проверка доступности серверов для кластера {cluster_name} завершена:\n\n"
for server in cluster_servers:
xui = AsyncApi(server["api_url"], username=ADMIN_USERNAME, password=ADMIN_PASSWORD, logger=logger)
@@ -289,7 +296,6 @@ async def handle_servers_availability(
online_users = len(await xui.client.online())
total_online_users += online_users
result_text += f"🌍 {server['server_name']}: {online_users} активных пользователей.\n"
-
except Exception as e:
result_text += f"❌ {server['server_name']}: Не удалось получить информацию. Ошибка: {e}\n"
@@ -359,9 +365,13 @@ async def handle_servers_add(
await state.update_data(cluster_name=cluster_name)
text = (
- f"Введите имя сервера для кластера {cluster_name}:\n\n"
- "Рекомендуется указать локацию сервера в имени.\n\n"
- "Пример: server-asia, server-europe"
+ f"✏️ Введите название нового сервера для кластера {cluster_name}:\n\n"
+ "🌍 Рекомендуется использовать локацию и порядковый номер сервера в названии.\n"
+ "Имя не должно превышать 12 символов!\n\n"
+ "Пример:\n"
+ "— de1 - для первого сервера в Германии\n"
+ "— swe2 - для второго сервера в Швеции\n"
+ "(если в каком-то кластере у вас уже есть сервер в Швеции)"
)
await callback_query.message.edit_text(