Я нашёл решение этого вопроса. Я сделал так, чтобы через content_types=["text", "photo"]
бот пересылал медиагруппу вместе с подписью (если не нужно, можно убрать), если 1 фото, то 1 фото с подписью и если текст, то перешлёт текст.
Долее код подбивайте под ваши нужды
import asyncio
from typing import List, Union
from aiogram import Bot, Dispatcher, executor, types
from aiogram.dispatcher.handler import CancelHandler
from aiogram.dispatcher.middlewares import BaseMiddleware
bot = Bot(token="")
dp = Dispatcher(bot)
class AlbumMiddleware(BaseMiddleware):
album_data: dict = {}
def __init__(self, latency: Union[int, float] = 0.01):
self.latency = latency
super().__init__()
async def on_process_message(self, message: types.Message, data: dict):
if not message.media_group_id:
self.album_data[message.from_user.id] = [message]
message.conf["is_last"] = True
data["album"] = self.album_data[message.from_user.id]
await asyncio.sleep(self.latency)
else:
try:
self.album_data[message.media_group_id].append(message)
raise CancelHandler()
except KeyError:
self.album_data[message.media_group_id] = [message]
await asyncio.sleep(self.latency)
message.conf["is_last"] = True
data["album"] = self.album_data[message.media_group_id]
async def on_post_process_message(self, message: types.Message):
if not message.media_group_id:
if message.from_user.id and message.conf.get("is_last"):
del self.album_data[message.from_user.id]
else:
if message.media_group_id and message.conf.get("is_last"):
del self.album_data[message.media_group_id]
@dp.message_handler(content_types=['text', 'photo'])
async def handle_albums(message: types.Message, album: List[types.Message]):
if not message.media_group_id:
if message.photo:
await bot.send_photo(chat_id=message.chat.id, photo=message.photo[-1].file_id, caption=message.caption)
else:
await bot.send_message(message.chat.id, message.text)
else:
media_group = types.MediaGroup()
for obj in album:
if obj.photo:
file_id = obj.photo[-1].file_id
caption = album[0].caption
else:
file_id = obj[obj.content_type].file_id
try:
media_group.attach({"media": file_id, "type": obj.content_type})
media_group.media[0]["caption"] = caption
except ValueError:
return await message.answer("Этот тип не поддерживается aiogram.")
await message.answer_media_group(media_group)
if __name__ == "__main__":
dp.middleware.setup(AlbumMiddleware())
executor.start_polling(dp, skip_updates=True)