49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
import asyncio
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
import psutil
|
|
from aiogram import F, Router
|
|
from aiogram.types import CallbackQuery
|
|
|
|
from filters.admin import IsAdminFilter
|
|
|
|
from ..panel.keyboard import AdminPanelCallback, build_admin_back_kb, build_restart_kb
|
|
|
|
router = Router()
|
|
|
|
|
|
@router.callback_query(
|
|
AdminPanelCallback.filter(F.action == "restart"), IsAdminFilter()
|
|
)
|
|
async def handle_restart_confirm(
|
|
callback_query: CallbackQuery, callback_data: AdminPanelCallback
|
|
):
|
|
kb = build_admin_back_kb()
|
|
await callback_query.message.edit_text("🔄 Перезапускаем бота...", reply_markup=kb)
|
|
|
|
asyncio.create_task(restart_bot())
|
|
|
|
|
|
async def restart_bot():
|
|
await asyncio.sleep(1)
|
|
|
|
try:
|
|
parent = psutil.Process(os.getpid()).parent()
|
|
is_systemd = parent and "systemd" in parent.name().lower()
|
|
|
|
if is_systemd:
|
|
subprocess.run(
|
|
["sudo", "systemctl", "restart", "bot.service"],
|
|
check=True,
|
|
)
|
|
else:
|
|
python_exe = sys.executable
|
|
script_path = os.path.abspath(sys.argv[0])
|
|
os.execv(python_exe, [python_exe, script_path] + sys.argv[1:])
|
|
|
|
except Exception as e:
|
|
print(f"[Restart] Ошибка при перезапуске: {e}")
|
|
os._exit(1)
|