diff --git a/.gitignore b/.gitignore index 4af2ef5..1ba0422 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,13 @@ /.env /code.txt +.DS_Store +.idea/ +__pycache__/ +bot.log +bot/__pycache__/ +handlers/__pycache__/ +models/__pycache__/ +services/__pycache__/ +storage/__pycache__/ +utils/__pycache__/ +storage/message.txt \ No newline at end of file diff --git a/handlers/admin.py b/handlers/admin.py index 5f9d133..f83441a 100644 --- a/handlers/admin.py +++ b/handlers/admin.py @@ -1,15 +1,19 @@ from aiogram import types, Dispatcher, Bot +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 +from storage.message_storage import load_messages, save_message, clear_messages +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: types.Message): + async def send_log(message: Message): """Отправка логов""" try: log_file = types.FSInputFile(Config.LOG_FILE) @@ -19,7 +23,7 @@ def register_handlers(dp: Dispatcher, state: BotState, bot: Bot): @dp.message(Command("status")) @admin_required(3) - async def send_status(message: types.Message): + async def send_status(message: Message): """Статус бота""" from utils.analytics import analyze_bot_logs from utils.mac_metrics import get_macbook_battery_level @@ -40,6 +44,35 @@ def register_handlers(dp: Dispatcher, state: BotState, bot: Bot): 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: + try: + await bot.delete_message(chat_id, msg_id) + deleted += 1 + except Exception as e: + logger.warning(f"Не удалось удалить {msg_id} в чате {chat_id}: {e}") + + clear_messages() + + sent = await message.answer( + f"✅ Удалено {deleted} сообщений (включая /rasp).", + reply_to_message_id=message.message_id + ) + save_message(sent.chat.id, sent.message_id) + @dp.message(Command("power")) @admin_required(2) async def power_control(message: types.Message): diff --git a/services/watcher_service.py b/services/watcher_service.py index b58df68..51e9c63 100644 --- a/services/watcher_service.py +++ b/services/watcher_service.py @@ -7,10 +7,10 @@ from aiogram.types import BufferedInputFile from models.state import BotState from config import Config from services.schedule_service import ScheduleService -import logging +from logging import getLogger -logger = logging.getLogger(__name__) +logger = getLogger(__name__) class WatcherService: diff --git a/storage/message_storage.py b/storage/message_storage.py index 8c557d4..2e54a2d 100644 --- a/storage/message_storage.py +++ b/storage/message_storage.py @@ -1,6 +1,6 @@ import os -MESSAGES_FILE = "messages.txt" +MESSAGES_FILE = "storage/message.txt" # --- функция для записи message_id --- def save_message(chat_id: int, message_id: int):