Как обрабатывать media_group в aiogram
Как можно получить все файлы из media_group? Сейчас я обрабатываю входящие файлы так:
if message.photo:
file_id = message.photo[-1].file_id
if message.document:
file_id = message.document.file_id
file_name = message.document.file_name
file_info = await bot.get_file(file_id) # получаем информацию о файле
logger.debug(file_info)
# сохраняем файл
await bot.download_file(
file_info.file_path,
os.path.join(user_dir, file_info.file_path),
)
Но, если пользователь скидывает сразу несколько файлов или фото, то в message приходит только один и добавляется поле media_group_id.
Как я понял, media_group_id это просто формальность для определения общности нескольких файлов. А сами файлы из медиагруппы приходят отдельными сообщениям. Тогда вопрос другой, как обработать несколько таких сообщений? Вот мой хэндлер
async def start_chat_with_manager(message: types.Message, state: FSMContext):
"""функция обработки состояния first_input"""
logger.debug("Вызвана функция start_chat_with_manager")
try:
await message.answer(text="Когда мастер вам ответит мы вас оповестим")
async with state.proxy() as data:
if message.photo or message.document:
# Проверяем путь к файлу, если нет создаем
user_dir = await gen_user_web_folder(message.from_id)
if not os.path.exists(user_dir):
os.makedirs(
user_dir, exist_ok=True
)
# logger.debug(message)
if message.photo:
file_id = message.photo[-1].file_id
if message.document:
file_id = message.document.file_id
file_name = message.document.file_name
file_info = await bot.get_file(file_id) # получаем информацию о файле
# сохраняем файл
await bot.download_file(
file_info.file_path,
os.path.join(user_dir, file_info.file_path),
)
И регистрирую я его так:
dp.register_message_handler(
start_chat_with_manager,
state=ManagerChatState.first_input,
content_types=[
types.ContentType.PHOTO,
types.ContentType.DOCUMENT,
types.ContentType.TEXT,
types.ContentType.VIDEO
],
)