Как сделать, чтобы бот отправлял альбом из фотографий, отправленных пользователем? Как получать несколько фото в одном хендлере Aiogram?

Рейтинг: 0Ответов: 1Опубликовано: 06.02.2023

Есть некий хендлер который ловит в себя фото и к примеру пересылает куда-то там.

@dp.message_handler(content_types=types.ContentTypes.PHOTO)
async def send_to_admin(message: types.Message):
    await bot.send_photo(chat_id=ADMIN_ID, photo=message.photo[-1].file_id)

Так вот если этот юзер(который присылает боту фото) пришлет не одно а два и более, и они буду группированы вот так.

введите сюда описание изображения

То возникает странная ситуация, хендлер реагирует на каждое отдельное фото, собственно отдельно. По факту он срабатывает дважды (по 1-му на фото), то есть наша message.photo имеет только вариации одной из фоток (размеры) но не имеет другого фото в себе.

Я написал программу, которая отправляет в чат альбом, но бот также отправляет первое фото из альбома: введите сюда описание изображения

Вот мой код:

media = []
async def get_state2(message: types.Message, state: FSMContext):
    global media
    if message.text == "Назад":
        await FSMAdmin.state1.set()
        await bot.send_message(message.from_user.id, 'Выберите город, в котором хотите выписать штраф',
                               reply_markup=clubs)
    else:
        photos = message.photo[-1].file_id.split()
        media.append(InputMediaPhoto(photos[-1]))
        media_files = media
        await bot.send_media_group(chat_id=config.chat_id_zel, media=media)
        await FSMAdmin.next()
        await bot.send_message(message.from_user.id, 'Напишите нарушение', reply_markup=back_button_admin)

Ответы

▲ 0Принят
class Form(StatesGroup):
    a = State()

async def give_photo_group(msg: types.Message: state: FSMContext):
    async with state.proxy() as data:
        if 'photos' in data.keys():
            data['photos'] = data['photos'].append(msg.photo[-1].file_id)
        else:
            data['photos'] = []
    await Form.a.set()

async def echo_photo_group(msg: types.Message, state: FSMContext):
    async with state.proxy() as data:
        photo_ids = data['photos']
    await state.finish()
    photo_group = types.MediaGroup()
    for file_id in photo_ids:
        photo_group.attach_photo(file_id)
    await bot.send_media_group(photo_group)