Добрый день! Конечно, я помогу вам с реализацией фильтра для запрещенных слов, который читает слова из текстового файла.
Ваш код уже близок к правильному решению, но есть несколько моментов, которые нужно исправить:
1. Вы открываете файл `all_mat.txt`, но не считываете его содержимое в список. Вместо этого вы используете сам файл как объект итерации, что не является корректным.
2. Нужно убедиться, что строки считываются правильно: удалите лишние пробелы и переведите их в нижний регистр (если это необходимо).
3. Не забывайте аккуратно закрывать файл, можно использовать контекстный менеджер `with`, чтобы он закрывался автоматически.
Вот исправленный код:
```python
@dp.message_handler()
async def mat(message: types.Message):
# Читаем запрещенные слова из файла
with open("all_mat.txt", "r", encoding="utf-8") as file_mat:
mat = [line.strip() for line in file_mat] # Считываем строки из файла и удаляем пробелы на краях
# Проверяем, есть ли запрещенные слова в сообщении
for forbidden_word in mat:
if forbidden_word in message.text:
await message.delete()
await message.answer(f"{message.from_user.first_name}, ваше сообщение удалено!")
return # Выходим из функции после удаления сообщения, чтобы избежать неоднократного срабатывания
```
### Объяснение:
1. **Чтение из файла**: Мы использовали конструкцию `with open(...)`, чтобы открыть файл. Это гарантирует, что файл будет закрыт, даже если возникнет ошибка.
2. **Создание списка**: `mat = [line.strip() for line in file_mat]` создает список `mat`, где каждое слово — это строка из файла без лишних пробелов.
3. **Проверка слова**: Мы проходимся по каждому запрещенному слову в списке `mat` и проверяем его наличие в сообщении.
4. **Возврат**: Если слово найдено и сообщение удалено, используется `return`, чтобы избежать дальнейших проверок.
Теперь ваш код будет читать запрещенные слова из файла и правильно обрабатывать сообщения. Убедитесь, что файл `all_mat.txt` существует и в нём по одному запрещенному слову на строку.