как заставить 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)