diff --git a/handlers/admin/bans/bans_handler.py b/handlers/admin/bans/bans_handler.py
index b00d51bc..360ce4ac 100644
--- a/handlers/admin/bans/bans_handler.py
+++ b/handlers/admin/bans/bans_handler.py
@@ -5,7 +5,7 @@ from aiogram.types import BufferedInputFile, CallbackQuery
from database import delete_user_data
from filters.admin import IsAdminFilter
-from keyboard import build_bans_kb
+from .keyboard import build_bans_kb
from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb
router = Router()
diff --git a/handlers/admin/clusters/clusters_handler.py b/handlers/admin/clusters/clusters_handler.py
index da95696b..342d0423 100644
--- a/handlers/admin/clusters/clusters_handler.py
+++ b/handlers/admin/clusters/clusters_handler.py
@@ -17,7 +17,8 @@ from logger import logger
from .keyboard import (
build_clusters_editor_kb,
build_manage_cluster_kb,
- AdminClusterCallback, build_sync_cluster_kb,
+ AdminClusterCallback,
+ build_sync_cluster_kb,
)
from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb
@@ -246,7 +247,7 @@ async def handle_inbound_id_input(message: Message, state: FSMContext):
@router.callback_query(AdminClusterCallback.filter(F.action == "manage"), IsAdminFilter())
async def handle_clusters_manage(
- callback_query: types.CallbackQuery, callback_data: AdminClusterCallback, session: Any
+ callback_query: types.CallbackQuery, callback_data: AdminClusterCallback, session: Any
):
cluster_name = callback_data.data
@@ -261,7 +262,7 @@ async def handle_clusters_manage(
@router.callback_query(AdminClusterCallback.filter(F.action == "availability"), IsAdminFilter())
async def handle_cluster_availability(
- callback_query: types.CallbackQuery, callback_data: AdminClusterCallback, session: Any
+ callback_query: types.CallbackQuery, callback_data: AdminClusterCallback, session: Any
):
cluster_name = callback_data.data
@@ -300,7 +301,7 @@ async def handle_cluster_availability(
@router.callback_query(AdminClusterCallback.filter(F.action == "backup"), IsAdminFilter())
async def handle_clusters_backup(
- callback_query: types.CallbackQuery, callback_data: AdminClusterCallback, session: Any
+ callback_query: types.CallbackQuery, callback_data: AdminClusterCallback, session: Any
):
cluster_name = callback_data.data
@@ -360,10 +361,7 @@ async def handle_sync_server(callback_query: types.CallbackQuery, callback_data:
)
return
- text = (
- f"🔄 Синхронизация сервера {server_name}\n\n"
- f"🔑 Количество ключей: {len(keys_to_sync)}"
- )
+ text = f"🔄 Синхронизация сервера {server_name}\n\n🔑 Количество ключей: {len(keys_to_sync)}"
await callback_query.message.answer(
text=text,
@@ -382,7 +380,7 @@ async def handle_sync_server(callback_query: types.CallbackQuery, callback_data:
key["client_id"],
key["email"],
key["expiry_time"],
- semaphore
+ semaphore,
)
await asyncio.sleep(0.6)
except Exception as e:
@@ -418,10 +416,7 @@ async def handle_sync_cluster(callback_query: types.CallbackQuery, callback_data
)
return
- text = (
- f"🔄 Синхронизация кластера {cluster_name}\n\n"
- f"🔑 Количество ключей: {len(keys_to_sync)}"
- )
+ text = f"🔄 Синхронизация кластера {cluster_name}\n\n🔑 Количество ключей: {len(keys_to_sync)}"
await callback_query.message.answer(
text=text,
diff --git a/handlers/admin/clusters/keyboard.py b/handlers/admin/clusters/keyboard.py
index 54bf5e4e..d761cd06 100644
--- a/handlers/admin/clusters/keyboard.py
+++ b/handlers/admin/clusters/keyboard.py
@@ -21,13 +21,11 @@ def build_clusters_editor_kb(servers: dict) -> InlineKeyboardMarkup:
text=f"⚙️ {name}",
callback_data=AdminClusterCallback(action="manage", data=name).pack(),
)
- for name in cluster_names[i: i + 2]
+ for name in cluster_names[i : i + 2]
])
builder.row(
- InlineKeyboardButton(
- text="➕ Добавить кластер", callback_data=AdminClusterCallback(action="add").pack()
- )
+ InlineKeyboardButton(text="➕ Добавить кластер", callback_data=AdminClusterCallback(action="add").pack())
)
builder.row(build_admin_back_btn())
diff --git a/handlers/admin/coupons/coupons_handler.py b/handlers/admin/coupons/coupons_handler.py
index 09d02c03..68605fa8 100644
--- a/handlers/admin/coupons/coupons_handler.py
+++ b/handlers/admin/coupons/coupons_handler.py
@@ -8,7 +8,7 @@ from aiogram.types import CallbackQuery, Message
from config import USERNAME_BOT
from database import create_coupon, delete_coupon, get_all_coupons
from filters.admin import IsAdminFilter
-from keyboard import AdminCouponDeleteCallback, build_coupons_kb, build_coupons_list_kb
+from .keyboard import AdminCouponDeleteCallback, build_coupons_kb, build_coupons_list_kb
from logger import logger
from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb
diff --git a/handlers/admin/management/management_handler.py b/handlers/admin/management/management_handler.py
index cf3629e8..0e8a5636 100644
--- a/handlers/admin/management/management_handler.py
+++ b/handlers/admin/management/management_handler.py
@@ -5,7 +5,7 @@ from aiogram.types import CallbackQuery, Message
from asyncpg import Connection
from filters.admin import IsAdminFilter
-from keyboard import AdminPanelCallback, build_management_kb
+from .keyboard import AdminPanelCallback, build_management_kb
from logger import logger
from ..panel.keyboard import build_admin_back_kb
@@ -25,7 +25,7 @@ async def handle_management(callback_query: CallbackQuery):
@router.callback_query(AdminPanelCallback.filter(F.action == "change_domain"), IsAdminFilter())
-async def request_new_domain(callback_query: AdminPanelCallback, state: FSMContext):
+async def request_new_domain(callback_query: CallbackQuery, state: FSMContext):
"""Запрашивает у администратора новый домен."""
await state.set_state(AdminManagementStates.waiting_for_new_domain)
await callback_query.message.edit_text(
diff --git a/handlers/admin/panel/panel_handler.py b/handlers/admin/panel/panel_handler.py
index 328eb047..9d863249 100644
--- a/handlers/admin/panel/panel_handler.py
+++ b/handlers/admin/panel/panel_handler.py
@@ -5,7 +5,7 @@ from aiogram.types import CallbackQuery, Message
from bot import version
from filters.admin import IsAdminFilter
-from keyboard import AdminPanelCallback, build_panel_kb
+from .keyboard import AdminPanelCallback, build_panel_kb
router = Router()
diff --git a/handlers/admin/restart/restart_handler.py b/handlers/admin/restart/restart_handler.py
index b477f776..c60d969d 100644
--- a/handlers/admin/restart/restart_handler.py
+++ b/handlers/admin/restart/restart_handler.py
@@ -4,7 +4,7 @@ from aiogram import F, Router
from aiogram.types import CallbackQuery
from filters.admin import IsAdminFilter
-from handlers.admin.panel.keyboard import AdminPanelCallback, build_admin_back_kb, build_restart_kb
+from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb, build_restart_kb
router = Router()
diff --git a/handlers/admin/sender/keyboard.py b/handlers/admin/sender/keyboard.py
index 97e92710..2bfa4606 100644
--- a/handlers/admin/sender/keyboard.py
+++ b/handlers/admin/sender/keyboard.py
@@ -16,9 +16,7 @@ def build_sender_kb() -> InlineKeyboardMarkup:
builder.row(InlineKeyboardButton(text="👥 Все пользователи", callback_data=AdminSenderCallback(type="all").pack()))
builder.row(
InlineKeyboardButton(text="✅ С подпиской", callback_data=AdminSenderCallback(type="subscribed").pack()),
- InlineKeyboardButton(
- text="❌ Без подписки", callback_data=AdminSenderCallback(type="unsubscribed").pack()
- ),
+ InlineKeyboardButton(text="❌ Без подписки", callback_data=AdminSenderCallback(type="unsubscribed").pack()),
)
builder.row(
InlineKeyboardButton(
diff --git a/handlers/admin/servers/keyboard.py b/handlers/admin/servers/keyboard.py
index 9077ff4d..ab29be55 100644
--- a/handlers/admin/servers/keyboard.py
+++ b/handlers/admin/servers/keyboard.py
@@ -2,8 +2,6 @@ from aiogram.filters.callback_data import CallbackData
from aiogram.types import InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder
-from ..clusters.keyboard import AdminClusterCallback
-
class AdminServerCallback(CallbackData, prefix="admin_server"):
action: str
@@ -11,6 +9,8 @@ class AdminServerCallback(CallbackData, prefix="admin_server"):
def build_manage_server_kb(server_name: str, cluster_name: str) -> InlineKeyboardMarkup:
+ from ..clusters.keyboard import AdminClusterCallback
+
builder = InlineKeyboardBuilder()
builder.button(text="🗑️ Удалить", callback_data=AdminServerCallback(action="delete", data=server_name).pack())
builder.button(text="🔙 Назад", callback_data=AdminClusterCallback(action="manage", data=cluster_name).pack())
diff --git a/handlers/admin/servers/servers_handler.py b/handlers/admin/servers/servers_handler.py
index c5199bd6..e6bb8f3d 100644
--- a/handlers/admin/servers/servers_handler.py
+++ b/handlers/admin/servers/servers_handler.py
@@ -5,7 +5,7 @@ from aiogram.types import CallbackQuery
from database import delete_server, get_servers
from filters.admin import IsAdminFilter
-from keyboard import (
+from .keyboard import (
AdminServerCallback,
build_delete_server_kb,
build_manage_server_kb,
diff --git a/handlers/admin/stats/stats_handler.py b/handlers/admin/stats/stats_handler.py
index 9707beb7..5afbbc14 100644
--- a/handlers/admin/stats/stats_handler.py
+++ b/handlers/admin/stats/stats_handler.py
@@ -7,7 +7,7 @@ from aiogram.exceptions import TelegramBadRequest
from aiogram.types import CallbackQuery
from filters.admin import IsAdminFilter
-from keyboard import build_stats_kb
+from .keyboard import build_stats_kb
from logger import logger
from utils.csv_export import export_payments_csv, export_users_csv
from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb
diff --git a/handlers/admin/users/users_handler.py b/handlers/admin/users/users_handler.py
index c2dad526..7d169091 100644
--- a/handlers/admin/users/users_handler.py
+++ b/handlers/admin/users/users_handler.py
@@ -27,7 +27,7 @@ from handlers.utils import sanitize_key_name
from logger import logger
from utils.csv_export import export_referrals_csv
from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb, build_admin_back_btn
-from ..users.keyboard import (
+from .keyboard import (
AdminUserEditorCallback,
AdminUserKeyEditorCallback,
build_editor_kb,