Почему вылетают ошибки при попытке отправить фото через бота
По идеи при срабатывании тригерного слова в чат должна вылетать картинка, но вместо этого в терминал падают ошибки. Весь остальной код работает. Если заменить answer_photo
на message.reply(pic)
то в чат отправляется путь к картинке.
Код:
from aiogram import types
from aiogram.filters import BaseFilter
import os
from bot.bot_template.logging.logger import logger
from dotenv import load_dotenv
from aiogram.types import InputFile
# Загрузка переменных окружения
load_dotenv(r"C:\PythonProject\python_beginners_course-main\Itproger\bot\keys\mat")
bad_word = os.getenv("slova")
file_path = r"C:\PythonProject\python_beginners_course-main\Itproger\bot\bot_template\filters\howdareu.png" ##ошибка тут?
pic = file_path ### тут?
class MatFilter(BaseFilter):
async def __call__(self, message: types.Message) -> bool:
if message.text:
for word in message.text.split():
if word.lower() in bad_word:
# Открываем файл и создаем объект InputFile
await message.answer("Ругаться не хорошо!")
logger.info(f"Фильтр сработал: пользователь {message.from_user.id} написал '{message.text}'")
photo = InputFile(file_path)### тут??
await message.answer_photo(photo=photo) # тут??
return True
return False
Ошибка:
File "C:\PythonProject\python_beginners_course-main\Itproger\bot\bot_template\filters\filters.py", line 24, in __call__
photo = InputFile(file_path)
^^^^^^^^^^^^^^^^^^^^
TypeError: Can't instantiate abstract class InputFile without an implementation for abstract method 'read'
Ответы (1 шт):
Автор решения: mrgervant
→ Ссылка
Замените InputFile
на FSInputFile
- это специальный подкласс для загрузки из файловой системы (документация):
from aiogram.types import FSInputFile
###
photo = FSInputFile(file_path)
await message.answer_photo(photo=photo)
###
Помимо FSInputFile есть и другие подклассы:
- BufferedInputFile - для загрузки из буфера (в виде байтов)
- URLInputFile - для загрузки с сервера по URL-адресу картинки