Травыч
МируМир☮️
- Регистрация
- 01.06.2025
- Сообщения
- 9 151
- Реакции
- 20 449
- Баллы
- 113
Защита Telegram-чатов от спама и подозрительных сообщений
В Telegram-чатах и группах проблема спама и подозрительных сообщений стоит особенно остро. Боты-рассыльщики, мошенники и пользователи, пытающиеся обойти модерацию, используют различные уловки: скрытые ссылки, текст с заменёнными символами (например, "пр4ивет"), флуд повторяющимися символами и другие методы.
SuspiciousMessagesMiddleware — это middleware для Telegram-бота, который автоматически анализирует сообщения в группах и супергруппах, выявляет подозрительный контент и принимает меры: удаляет спам, уведомляет участников чата и сохраняет контекст переписки.
В этой статье разберём:
🛠 Как это работает?
1. Проверка входящих сообщений
message = event.message or event.edited_message if not message: return await handler(event, data) # Пропускаем служебные сообщения от Telegram if self._is_service_message(message): return await handler(event, data) if message.chat.type not in [ChatType.GROUP, ChatType.SUPERGROUP]: return await handler(event, data)Middleware анализирует только:
def _is_service_message(self, message: Message) -> bool: """Проверяет, является ли сообщение служебным от Telegram""" # Сообщения без отправителя (системные) if not message.from_user: return True # Пользователь Telegram имеет ID 777000 (служебные уведомления) if message.from_user.id == 777000: return True # Сообщения о входе в чат, закреплении и т.д. if message.new_chat_members or message.left_chat_member or message.pinned_message: return True return False
2. Детекция подозрительного контента
Метод _is_suspicious проверяет текст на:- Спецсимволы внутри слов ("пр@ивет", "tele#gram")
3. Действия при обнаружении спама
# Сохраняем reply_to_message reply_to_message_id = message.reply_to_message.message_id if message.reply_to_message else None try: await message.delete() logger.info(f"Deleted suspicious message in chat {message.chat.id}") except Exception as e: logger.error(f"Failed to delete suspicious message: {e}") return await handler(event, data) user_mention = message.from_user.mention_html() if message.from_user else "Аноним" await self.bot.send_message( chat_id=message.chat.id, text=f"
Практическое применение
Такой middleware полезен для:- Поддержания порядка в чатах без постоянного вмешательства админов.

