ruff, button file, castomize ping and backup

This commit is contained in:
Vladless
2025-03-28 20:39:06 +03:00
parent 1cad70a72a
commit b2b5a57b57
67 changed files with 7732 additions and 6910 deletions
+37 -33
View File
@@ -12,26 +12,37 @@ from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import CallbackQuery, Message
from aiogram.utils.keyboard import InlineKeyboardBuilder
from config import TOTAL_GB, PUBLIC_LINK, RENEWAL_PRICES
from config import PUBLIC_LINK, RENEWAL_PRICES, TOTAL_GB
from database import (
delete_key,
delete_user_data,
get_balance,
get_client_id_by_email,
get_servers,
store_key,
update_balance,
update_key_expiry,
update_trial,
store_key
)
from filters.admin import IsAdminFilter
from handlers.keys.key_utils import delete_key_from_cluster, get_user_traffic, renew_key_in_cluster, update_subscription, create_key_on_cluster, reset_traffic_in_cluster
from handlers.utils import sanitize_key_name
from handlers.keys.key_utils import (
create_key_on_cluster,
delete_key_from_cluster,
get_user_traffic,
renew_key_in_cluster,
reset_traffic_in_cluster,
update_subscription,
)
from handlers.utils import generate_random_email, sanitize_key_name
from logger import logger
from utils.csv_export import export_referrals_csv
from ..panel.keyboard import AdminPanelCallback, build_admin_back_btn, build_admin_back_kb
from .keyboard import (
AdminUserEditorCallback,
AdminUserKeyEditorCallback,
build_cluster_selection_kb,
build_editor_kb,
build_key_delete_kb,
build_key_edit_kb,
@@ -42,11 +53,7 @@ from .keyboard import (
build_users_balance_kb,
build_users_key_expiry_kb,
build_users_key_show_kb,
build_cluster_selection_kb
)
from logger import logger
from utils.csv_export import export_referrals_csv
from handlers.utils import generate_random_email
MOSCOW_TZ = pytz.timezone("Europe/Moscow")
@@ -479,7 +486,7 @@ async def handle_update_key(callback_query: CallbackQuery, callback_data: AdminU
await callback_query.message.edit_text(
text=f"📡 Выберите кластер, на котором пересоздать ключ <b>{email}</b>:",
reply_markup=await build_cluster_selection_kb(session, tg_id, email, action="confirm_admin_key_reissue")
reply_markup=await build_cluster_selection_kb(session, tg_id, email, action="confirm_admin_key_reissue"),
)
@@ -490,7 +497,9 @@ async def confirm_admin_key_reissue(callback_query: CallbackQuery, session: Any)
try:
await update_subscription(tg_id, email, session, cluster_override=cluster_id)
await handle_key_edit(callback_query, AdminUserEditorCallback(tg_id=tg_id, data=email, action="view_key"), session, True)
await handle_key_edit(
callback_query, AdminUserEditorCallback(tg_id=tg_id, data=email, action="view_key"), session, True
)
except Exception as e:
logger.error(f"Ошибка при перевыпуске ключа {email}: {e}")
await callback_query.message.answer(f"❗ Ошибка: {e}")
@@ -798,7 +807,9 @@ async def handle_users_export_referrals(
@router.callback_query(AdminUserEditorCallback.filter(F.action == "users_create_key"), IsAdminFilter())
async def handle_create_key_select_cluster(callback_query: CallbackQuery, callback_data: AdminUserEditorCallback, state: FSMContext, session: Any):
async def handle_create_key_select_cluster(
callback_query: CallbackQuery, callback_data: AdminUserEditorCallback, state: FSMContext, session: Any
):
tg_id = callback_data.tg_id
await state.update_data(tg_id=tg_id)
@@ -806,7 +817,9 @@ async def handle_create_key_select_cluster(callback_query: CallbackQuery, callba
cluster_names = list(servers.keys())
if not cluster_names:
await callback_query.message.edit_text("❌ Нет доступных кластеров для создания ключа.", reply_markup=build_editor_kb(tg_id))
await callback_query.message.edit_text(
"❌ Нет доступных кластеров для создания ключа.", reply_markup=build_editor_kb(tg_id)
)
return
builder = InlineKeyboardBuilder()
@@ -818,13 +831,14 @@ async def handle_create_key_select_cluster(callback_query: CallbackQuery, callba
builder.row(build_admin_back_btn())
await callback_query.message.edit_text(
"🌐 <b>Выберите кластер для создания ключа:</b>",
reply_markup=builder.as_markup()
"🌐 <b>Выберите кластер для создания ключа:</b>", reply_markup=builder.as_markup()
)
@router.callback_query(AdminUserEditorCallback.filter(F.action == "users_create_key_cluster"), IsAdminFilter())
async def handle_create_key_cluster(callback_query: CallbackQuery, callback_data: AdminUserEditorCallback, state: FSMContext):
async def handle_create_key_cluster(
callback_query: CallbackQuery, callback_data: AdminUserEditorCallback, state: FSMContext
):
tg_id = callback_data.tg_id
cluster_name = callback_data.data
@@ -832,16 +846,12 @@ async def handle_create_key_cluster(callback_query: CallbackQuery, callback_data
builder = InlineKeyboardBuilder()
for months, _ in RENEWAL_PRICES.items():
builder.button(
text=f"{months} мес.",
callback_data=f"create_key_duration|{tg_id}|{cluster_name}|{months}"
)
builder.button(text=f"{months} мес.", callback_data=f"create_key_duration|{tg_id}|{cluster_name}|{months}")
builder.adjust(1)
builder.row(build_admin_back_btn())
await callback_query.message.edit_text(
text=f"🕒 <b>Выберите срок действия ключа для кластера {cluster_name}:</b>",
reply_markup=builder.as_markup()
text=f"🕒 <b>Выберите срок действия ключа для кластера {cluster_name}:</b>", reply_markup=builder.as_markup()
)
@@ -874,14 +884,13 @@ async def handle_create_key_duration(callback_query: CallbackQuery, session: Any
await callback_query.message.edit_text(
f"✅ Ключ успешно создан в кластере <b>{cluster_name}</b> на {months} мес.!",
reply_markup=build_editor_kb(tg_id)
reply_markup=build_editor_kb(tg_id),
)
except Exception as e:
logger.error(f"Ошибка при создании ключа: {e}")
await callback_query.message.edit_text(
"❌ Не удалось создать ключ. Попробуйте позже.",
reply_markup=build_editor_kb(tg_id)
"❌ Не удалось создать ключ. Попробуйте позже.", reply_markup=build_editor_kb(tg_id)
)
@@ -897,10 +906,7 @@ async def handle_reset_traffic(callback_query: CallbackQuery, callback_data: Adm
)
if not record:
await callback_query.message.edit_text(
"❌ Ключ не найден в базе данных.",
reply_markup=build_editor_kb(tg_id)
)
await callback_query.message.edit_text("❌ Ключ не найден в базе данных.", reply_markup=build_editor_kb(tg_id))
return
cluster_id = record["server_id"]
@@ -908,12 +914,10 @@ async def handle_reset_traffic(callback_query: CallbackQuery, callback_data: Adm
try:
await reset_traffic_in_cluster(cluster_id, email)
await callback_query.message.edit_text(
f"✅ Трафик для ключа <b>{email}</b> успешно сброшен.",
reply_markup=build_editor_kb(tg_id)
f"✅ Трафик для ключа <b>{email}</b> успешно сброшен.", reply_markup=build_editor_kb(tg_id)
)
except Exception as e:
logger.error(f"Ошибка при сбросе трафика: {e}")
await callback_query.message.edit_text(
"❌ Произошла ошибка при сбросе трафика. Попробуйте позже.",
reply_markup=build_editor_kb(tg_id)
)
"❌ Произошла ошибка при сбросе трафика. Попробуйте позже.", reply_markup=build_editor_kb(tg_id)
)