feat: быстрое удаление сообщений для админов

- Откат изменений глобального чата (возврат к broadcast/forward режимам)
- Новый хэндлер quick_delete_replied_message для быстрого удаления
- Админ отвечает на сообщение со словами: удалить, delete, del
- Или отправляет emoji: 🗑️, 
- Удаляются оба сообщения (целевое и команда)
- Работает для любых сообщений, не только бота
- Логирование всех удалений
This commit is contained in:
2025-11-17 11:21:56 +09:00
parent 9e07b768f5
commit c3c8f74c91

View File

@@ -59,7 +59,44 @@ async def delete_message_callback(callback: CallbackQuery):
try: try:
await callback.message.delete() await callback.message.delete()
await callback.answer("✅ Сообщение удалено") await callback.answer("✅ Сообщение удалено")
logger.info(f"Администратор {callback.from_user.id} удалил сообщение {callback.message.message_id} кнопкой") logger.info(f"Администратор {callback.from_user.id} удалил сообщение через кнопку")
except Exception as e: except Exception as e:
logger.error(f"Ошибка при удалении сообщения: {e}") logger.error(f"Ошибка при удалении сообщения через кнопку: {e}")
await callback.answer(f"❌ Ошибка: {str(e)}", show_alert=True) await callback.answer(f"❌ Ошибка: {str(e)}", show_alert=True)
@message_admin_router.message(F.reply_to_message)
async def quick_delete_replied_message(message: Message):
"""
Быстрое удаление сообщения по reply с триггерными словами или emoji
Работает для админов при ответе на любое сообщение
Триггеры:
- "удалить", "delete", "del"
- 🗑️ (мусорная корзина)
- ❌ (крестик)
"""
if not is_admin(message.from_user.id):
return # Не админ - пропускаем
if not message.text:
return # Нет текста - пропускаем
# Проверяем триггерные слова/символы
text_lower = message.text.lower().strip()
triggers = ["удалить", "delete", "del", "🗑️", "🗑", ""]
is_trigger = any(trigger in text_lower for trigger in triggers)
if not is_trigger:
return # Не триггер - пропускаем
try:
# Удаляем сообщение на которое ответили
await message.reply_to_message.delete()
# Удаляем команду
await message.delete()
logger.info(f"Администратор {message.from_user.id} быстро удалил сообщение {message.reply_to_message.message_id}")
except Exception as e:
logger.error(f"Ошибка при быстром удалении сообщения: {e}")
await message.answer(f"Не удалось удалить: {str(e)}", reply_to_message_id=message.message_id)