I add command /id and /dowmp3 for dowload video with Youtube and i improve code.
It's version 0.2.0
This commit is contained in:
+68
-76
@@ -1,7 +1,6 @@
|
||||
from aiogram import types, Dispatcher, Bot
|
||||
from aiogram import types
|
||||
from aiogram.types import Message
|
||||
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
|
||||
@@ -10,87 +9,80 @@ from logging import getLogger
|
||||
|
||||
logger = getLogger(__name__)
|
||||
|
||||
def register_handlers(dp: Dispatcher, state: BotState, bot: Bot):
|
||||
@dp.message(Command("log"))
|
||||
@admin_required(3)
|
||||
async def send_log(message: 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: Message):
|
||||
"""Статус бота"""
|
||||
from utils.analytics import analyze_bot_logs
|
||||
from utils.mac_metrics import get_macbook_battery_level
|
||||
class AdminHandlers:
|
||||
|
||||
try:
|
||||
stats = analyze_bot_logs(Config.LOG_FILE)
|
||||
batt = await get_macbook_battery_level()
|
||||
def register(self):
|
||||
"""Регистрирует все хендлеры этого класса"""
|
||||
|
||||
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("del"))
|
||||
@admin_required(1)
|
||||
async def delete_all_messages(message: Message):
|
||||
"""Удаляет все сохраненные сообщения бота"""
|
||||
messages = load_messages()
|
||||
if not messages:
|
||||
sent = await message.answer(
|
||||
"📭 Нет сохранённых сообщений для удаления.",
|
||||
reply_to_message_id=message.message_id
|
||||
)
|
||||
save_message(sent.chat.id, sent.message_id)
|
||||
return
|
||||
|
||||
deleted = 0
|
||||
for chat_id, msg_id in messages:
|
||||
@self.dp.message(Command("log"))
|
||||
@admin_required(3)
|
||||
async def send_log(message: Message):
|
||||
try:
|
||||
await bot.delete_message(chat_id, msg_id)
|
||||
deleted += 1
|
||||
log_file = types.FSInputFile(Config.LOG_FILE)
|
||||
await message.answer_document(log_file, caption="📑 Логи бота")
|
||||
except FileNotFoundError:
|
||||
await message.answer("Файл логов пока не создан.")
|
||||
|
||||
@self.dp.message(Command("status"))
|
||||
@admin_required(3)
|
||||
async def send_status(message: 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 self.state.watcher_work else 'ВЫКЛ'}\n"
|
||||
f"🔋 Уровень заряда: {batt}%"
|
||||
)
|
||||
await message.answer(status_text)
|
||||
except Exception as e:
|
||||
logger.warning(f"Не удалось удалить {msg_id} в чате {chat_id}: {e}")
|
||||
await message.answer(f"❌ Ошибка при проверке статуса: {str(e)}")
|
||||
|
||||
clear_messages()
|
||||
@self.dp.message(Command("del"))
|
||||
@admin_required(1)
|
||||
async def delete_all_messages(message: Message):
|
||||
messages = load_messages()
|
||||
if not messages:
|
||||
sent = await message.answer("📭 Нет сохранённых сообщений для удаления.",
|
||||
reply_to_message_id=message.message_id)
|
||||
save_message(sent.chat.id, sent.message_id)
|
||||
return
|
||||
|
||||
sent = await message.answer(
|
||||
f"✅ Удалено {deleted} сообщений (включая /rasp).",
|
||||
reply_to_message_id=message.message_id
|
||||
)
|
||||
save_message(sent.chat.id, sent.message_id)
|
||||
deleted = 0
|
||||
for chat_id, msg_id in messages:
|
||||
try:
|
||||
await self.bot.delete_message(chat_id, msg_id)
|
||||
deleted += 1
|
||||
except Exception as e:
|
||||
logger.warning(f"Не удалось удалить {msg_id} в чате {chat_id}: {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
|
||||
clear_messages()
|
||||
sent = await message.answer(f"✅ Удалено {deleted} сообщений (включая /rasp).",
|
||||
reply_to_message_id=message.message_id)
|
||||
save_message(sent.chat.id, sent.message_id)
|
||||
|
||||
command = args[1].lower()
|
||||
watcher_service = WatcherService(state, bot)
|
||||
@self.dp.message(Command("power"))
|
||||
@admin_required(2)
|
||||
async def power_control(message: types.Message):
|
||||
args = message.text.split()
|
||||
if len(args) < 2:
|
||||
status = "включена" if self.state.watcher_work else "выключена"
|
||||
await message.answer(f"⏱️ Слежка расписания: {status}")
|
||||
return
|
||||
|
||||
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("❌ Неверная команда")
|
||||
command = args[1].lower()
|
||||
watcher_service = WatcherService(self.state, self.bot)
|
||||
|
||||
if command == "on" and not self.state.watcher_work:
|
||||
await watcher_service.start()
|
||||
await message.answer("✅ Слежка расписания включена")
|
||||
elif command == "off" and self.state.watcher_work:
|
||||
await watcher_service.stop()
|
||||
await message.answer("❌ Слежка расписания выключена")
|
||||
else:
|
||||
await message.answer("❌ Неверная команда")
|
||||
|
||||
Reference in New Issue
Block a user