Как принять несколько фотографий одним хендлером?

Мой код должен получить id канала из которого переслано сообщение. Но при пересылке ОДНОГО сообщения с НЕСКОЛЬКИМИ фотографиями, хендлер срабатывает несколько раз, а должен ОДИН.

Помогите с решением проблемы, если возможно при помощи middleware..

Вот код моего хендлера:

@CHANNEL_ROUTER.message(ChannelsAddStates.wait_mail)
async def new_channel_mail(
    message: Message,
    state: FSMContext,
    language: str
):
try:
    channel_id, name = str(message.forward_from_chat.id), message.forward_from_chat.full_name
    print(await bot.BOT.get_chat_administrators(channel_id))

    if channel_id is not None and not CHANNELS.get_one_by('id', channel_id):
        if check_admin.check_admin((await bot.BOT.get_me()).id,
                                   await bot.BOT.get_chat_administrators(channel_id)):
            await message.answer(generate_messages.new_channel_connected_message(language))
            CHANNELS.channel_register(channel_id, str(message.from_user.id), name)

            await state.clear()

        else:
            await message.answer(generate_messages.new_channel_error_message(language))

    else:
        await message.answer(generate_messages.new_channel_error_message(language))

except Exception:
    await message.answer(generate_messages.new_channel_error_message(language))

Ответы (1 шт):

Автор решения: Артём Кустов

Я нашел решение, если кому то надо будет, то вот:

import time
from aiogram.types import Message
from core.database.management.users import Users
from typing import Any, Awaitable, Callable, Dict
from aiogram import BaseMiddleware
from aiogram.dispatcher.middlewares.error import CancelHandler

USERS = Users()
lats_calls = {}

# Обработка всех сообщений
class AlbumMiddleware(BaseMiddleware):
    def __init__(self) -> None:
        pass

    async def __call__(
        self,
        handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
        event: Message,
        data: Dict[str, Any]
    ) -> Any:
        try:
            last_call = lats_calls[event.from_user.id]
            if (time.time() - last_call) > 0.3: # это разница времени между сообщениями
                lats_calls[event.from_user.id] = time.time()
                return await handler(event, data)
            else:
                CancelHandler()
        except Exception:
            lats_calls[event.from_user.id] = time.time()
            return await handler(event, data)
→ Ссылка