Фильтрация диалогов и быстрый поиск участников без лишних RPC
При массовой работе с Telegram узкое место — не логика, а количество запросов к API. Если сначала тащить все диалоги, а потом искать нужные сущности в памяти, вы быстро упрётесь в FloodWait и лишние таймауты. Правильнее сразу резать выборку по признакам, которые Telegram уже умеет отдавать на стороне сервера.
Для диалогов используйте заранее заданные фильтры: exclude muted, archived, unread, service и пустые чаты. Так вы не прогоняете через скрипт мусорные сущности, а работаете только с теми, где реально есть активность. Это особенно важно при парсинге рабочих аккаунтов: меньше объектов — меньше сериализации, меньше обращений к кешу сессии, меньше шанс поймать лишний RPC.
Поиск участников строится по той же логике. Не делайте полный iter_participants без ограничения, если задача — найти конкретный сегмент. Фильтруйте по query, online, admins, bot, recent и, где возможно, комбинируйте с лимитом. Если нужен быстрый отбор по имени или username, сначала проверяйте локальный список уже загруженных пользователей, а к API обращайтесь только при промахе. Дебаг — наш лучший друг в борьбе с FloodWait.
Для стабильности держите в голове простое правило: сначала сужаем пространство поиска, потом запрашиваем детали. Это снижает нагрузку на сессию, ускоряет проход по чатам и делает скрипт предсказуемым. Оптимизируем сессии, избегаем лимитов.
Telethon мастерская
@telethon_workshops_ubt
Фильтрация диалогов и быстрый поиск участников без лишних RPC
Этот пост опубликован в Telegram-канале Telethon мастерская. Подписаться можно по ссылке: @telethon_workshops_ubt.