как заставить telethon обрабатывать один event только одним хэндлером

Есть 2 хэндлера: один должен обрабатывать только альбомы, другой - остальные сообщения.

async def album_handler(event: events.Album.Event):
msg = event.messages[0]
if msg.is_channel:
    from_chat_id = resolve_id(msg.chat_id)[0]
    if from_chat_id in allowed_ids_list:
        await event.forward_to(bot)


async def post_handler(event: events.NewMessage.Event):
    msg = event.message
    if msg.is_channel:
        from_chat_id = resolve_id(msg.chat_id)[0]
        if from_chat_id in allowed_ids_list:
            await event.client.send_message(bot, msg)


def register_post_handlers(client: TelegramClient):
    client.add_event_handler(album_handler, events.Album)
    client.add_event_handler(post_handler, events.NewMessage)

Но хэндлер на все сообщения по умолчанию обрабатывает все медиа в альбоме по отдельности. Как запретить обработку всех медиа из альбома после обработки самого альбома? Ну или как настроить 1 общий хэндлер и на альбомы, и на другие сообщения с проверкой типа event'а внутри него?


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

Автор решения: Entire Music

Всё оказалось очень просто! Во второй хендлер, который работает с обычными сообщениями, добавить проверку, что это не группа (по отсутсвию группового ID):

async def post_handler(event: events.NewMessage.Event):
    msg = event.message
    if msg.is_channel and not event.message.grouped_id: #проверяем что нет ID группы
        from_chat_id = resolve_id(msg.chat_id)[0]
        if from_chat_id in allowed_ids_list:
            await event.client.send_message(bot, msg)
→ Ссылка