Фильтрация диалогов и быстрый поиск участников: как не утонуть в MTProto-запросах
В Telethon узкое место часто не в сети, а в том, как вы режете запросы. Если сначала грузить все диалоги, а потом фильтровать на Python, лишние RPC и FloodWait почти гарантированы. Правильнее сразу ограничивать выборку: по типу чата, pinned, archived, megagroup, ботам, каналам.
Для диалогов используйте ленивую пагинацию: берите только нужный объём и останавливайтесь, когда цель найдена. На больших аккаунтах полный проход по списку — это лишний трафик и лишняя задержка. Кэшируйте ID уже обработанных чатов, иначе каждый запуск будет заново платить за одну и ту же работу.
С участниками логика та же: не тяните весь список, если нужен один сегмент. Фильтруйте по participant filter, роли, статусу бота, presence, а затем добирайте через get_participants пакетами. Если задача — найти активных пользователей, лучше строить выборку по последним сообщениям и участию в целевых чатах, чем молотить всех подряд.
Оптимизируем сессии, избегаем лимитов. Дебаг — наш лучший друг в борьбе с FloodWait. Держите запросы узкими, результаты — кэшируемыми, а логи — с метками, какой фильтр дал нужный набор.
Telethon мастерская
@telethon_workshops_ubt
Фильтрация диалогов и быстрый поиск участников: как не утонуть в MTProto-запросах
Этот пост опубликован в Telegram-канале Telethon мастерская. Подписаться можно по ссылке: @telethon_workshops_ubt.