from aiogram import types, Dispatcher, Bot from aiogram.filters import Command from models.state import BotState from config import Config from utils.antispam import admin_required from services.watcher_service import WatcherService def register_handlers(dp: Dispatcher, state: BotState, bot: Bot): @dp.message(Command("log")) @admin_required(3) async def send_log(message: types.Message): """Отправка логов""" try: log_file = types.FSInputFile(Config.LOG_FILE) await message.answer_document(log_file, caption="📑 Логи бота") except FileNotFoundError: await message.answer("Файл логов пока не создан.") @dp.message(Command("status")) @admin_required(3) async def send_status(message: types.Message): """Статус бота""" from utils.analytics import analyze_bot_logs from utils.mac_metrics import get_macbook_battery_level try: stats = analyze_bot_logs(Config.LOG_FILE) batt = await get_macbook_battery_level() status_text = ( "🤖 СТАТУС БОТА\n" "══════════════\n" f"✅ Uptime: {stats.get('uptime_percentage', 0)}%\n" f"⏱️ Слежка расписания: {'ВКЛ' if state.watcher_work else 'ВЫКЛ'}\n" f"🔋 Уровень заряда: {batt}%" ) await message.answer(status_text) except Exception as e: await message.answer(f"❌ Ошибка при проверке статуса: {str(e)}") @dp.message(Command("power")) @admin_required(2) async def power_control(message: types.Message): """Управление слежкой""" args = message.text.split() if len(args) < 2: status = "включена" if state.watcher_work else "выключена" await message.answer(f"⏱️ Слежка расписания: {status}") return command = args[1].lower() watcher_service = WatcherService(state, bot) if command == "on" and not state.watcher_work: await watcher_service.start() await message.answer("✅ Слежка расписания включена") elif command == "off" and state.watcher_work: await watcher_service.stop() await message.answer("❌ Слежка расписания выключена") else: await message.answer("❌ Неверная команда")