Archived
115 lines
4.6 KiB
Python
115 lines
4.6 KiB
Python
import asyncio
|
|
|
|
from aiogram import Router
|
|
from aiogram.types import CallbackQuery
|
|
|
|
from bot.api.asf import get_plugins, restart_asf as restart_asf_request
|
|
from bot.filters import AdminCallbackFilter
|
|
from bot.services.twofa import stop_twofa_task
|
|
from bot.state import (
|
|
bot_redeem_messages,
|
|
bot_redeem_users,
|
|
console_users,
|
|
redeem_messages,
|
|
redeem_users,
|
|
)
|
|
from bot.ui.formatters import get_asf_status_text
|
|
from bot.ui.keyboards import back_keyboard, confirm_action_keyboard, main_keyboard
|
|
|
|
router = Router()
|
|
|
|
|
|
def clear_user_state(user_id: int) -> None:
|
|
redeem_users.discard(user_id)
|
|
redeem_messages.pop(user_id, None)
|
|
console_users.discard(user_id)
|
|
bot_redeem_users.pop(user_id, None)
|
|
bot_redeem_messages.pop(user_id, None)
|
|
|
|
|
|
@router.callback_query(lambda c: c.data == "back", AdminCallbackFilter())
|
|
async def back_button(callback: CallbackQuery) -> None:
|
|
clear_user_state(callback.from_user.id)
|
|
await stop_twofa_task(callback.message.message_id) # type: ignore[union-attr]
|
|
await callback.answer()
|
|
try:
|
|
await callback.message.edit_text(get_asf_status_text(), reply_markup=main_keyboard()) # type: ignore[union-attr]
|
|
except Exception as error:
|
|
await callback.message.edit_text(f"Ошибка: {error}") # type: ignore[union-attr]
|
|
|
|
|
|
@router.callback_query(lambda c: c.data == "refresh", AdminCallbackFilter())
|
|
async def refresh_handler(callback: CallbackQuery) -> None:
|
|
await callback.answer()
|
|
try:
|
|
await callback.message.edit_text(get_asf_status_text(), reply_markup=main_keyboard()) # type: ignore[union-attr]
|
|
except Exception as error:
|
|
await callback.message.edit_text(f"Ошибка: {error}") # type: ignore[union-attr]
|
|
|
|
|
|
@router.callback_query(lambda c: c.data == "delete_msg", AdminCallbackFilter())
|
|
async def delete_message(callback: CallbackQuery) -> None:
|
|
await callback.answer()
|
|
try:
|
|
await callback.message.delete() # type: ignore[union-attr]
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
@router.callback_query(lambda c: c.data == "restart_asf_confirm", AdminCallbackFilter())
|
|
async def restart_asf_confirm(callback: CallbackQuery) -> None:
|
|
await callback.answer()
|
|
await callback.message.edit_text( # type: ignore[union-attr]
|
|
"♻ Точно перезапустить ASF?\n\nВо время перезапуска IPC будет недоступен несколько секунд.",
|
|
reply_markup=confirm_action_keyboard("restart_asf", "back"),
|
|
)
|
|
|
|
|
|
@router.callback_query(lambda c: c.data == "restart_asf", AdminCallbackFilter())
|
|
async def restart_asf(callback: CallbackQuery) -> None:
|
|
await callback.answer()
|
|
try:
|
|
await callback.message.edit_text("♻ ASF перезапускается...") # type: ignore[union-attr]
|
|
response = restart_asf_request()
|
|
if response.status_code != 200:
|
|
await callback.message.edit_text( # type: ignore[union-attr]
|
|
f"Ошибка HTTP {response.status_code}",
|
|
reply_markup=main_keyboard(),
|
|
)
|
|
return
|
|
await asyncio.sleep(6)
|
|
await callback.message.edit_text( # type: ignore[union-attr]
|
|
f"ASF успешно перезапущен\n\n{get_asf_status_text()}",
|
|
reply_markup=main_keyboard(),
|
|
)
|
|
except Exception as error:
|
|
await callback.message.edit_text( # type: ignore[union-attr]
|
|
f"Ошибка: {error}",
|
|
reply_markup=main_keyboard(),
|
|
)
|
|
|
|
|
|
@router.callback_query(lambda c: c.data == "plugins", AdminCallbackFilter())
|
|
async def plugins_handler(callback: CallbackQuery) -> None:
|
|
await stop_twofa_task(callback.message.message_id) # type: ignore[union-attr]
|
|
await callback.answer()
|
|
try:
|
|
response = get_plugins()
|
|
if response.status_code != 200:
|
|
await callback.message.edit_text("Ошибка API") # type: ignore[union-attr]
|
|
return
|
|
data = response.json()
|
|
if not data.get("Success"):
|
|
await callback.message.edit_text("ASF вернул ошибку") # type: ignore[union-attr]
|
|
return
|
|
plugins = data.get("Result", [])
|
|
if not plugins:
|
|
text = "Плагины не установлены"
|
|
else:
|
|
text = "<b>📁 Плагины ASF:</b>\n\n"
|
|
for plugin in plugins:
|
|
text += f"{plugin.get('Name', '???')} ({plugin.get('Version', '???')})\n"
|
|
await callback.message.edit_text(text.strip(), reply_markup=back_keyboard()) # type: ignore[union-attr]
|
|
except Exception as error:
|
|
await callback.message.edit_text(f"Ошибка: {error}") # type: ignore[union-attr]
|