Убедитесь, что MediaGroup в Telegram означает, что сообщение, содержащее несколько медиафайлов, на самом деле представляет собой несколько отдельных сообщений, каждое из которых содержит один медиафайл. Для обработки таких сообщений вы можете использовать мидлварь с функциональностью сборки в одно сообщение.
Вот пример реализации мидлвари:
```python
import asyncio
from typing import List, Union
from aiogram import types
from aiogram.dispatcher.handler import CancelHandler
from aiogram.dispatcher.middlewares import BaseMiddleware
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:
return
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, result: dict, data: dict):
if message.media_group_id and message.conf.get("is_last"):
del self.album_data[message.media_group_id]
```
Для обработки сообщений из MediaGroup, вы можете использовать обработчик сообщений с проверкой типа контента и флагом is_media_group=True. Вот пример обработчика:
```python
@dp.message_handler(content_types=['photo'], is_media_group=True)
async def all_message(message: types.Message, album: List[types.Message]):
media_group = types.MediaGroup()
for obj in album:
if obj.photo:
file_id = obj.photo[-1].file_id
else:
file_id = obj[obj.content_type].file_id
try:
media_group.attach({"media": file_id, "type": obj.content_type})
except ValueError:
return await message.answer("This type of album is not supported by aiogram.")
await message.bot.send_media_group(chat_id=chat_id, media=media_group)
```
Да, это отправляет новое сообщение, а не пересылает существующее, но вы можете отправить это сообщение любому пользователю вашего бота.