Фильтруем диалоги и ищем участников без лишних RPC-запросов
При массовой работе с Telegram узкое место — не логика, а количество обращений к API. Каждый лишний вызов GetDialogs, Search, GetParticipants бьёт по лимитам, особенно если сессия уже нагружена. Поэтому сначала режем объём данных на стороне клиента: не тянем весь список диалогов, если нужен только канал, группа или конкретный тип чата.
Рабочая схема простая:
— используйте dialogs.iter_dialogs() с фильтром по entity, title или типу, а не полный перебор в память;
— кэшируйте entity и access_hash, чтобы не делать повторный resolve username;
— для поиска участников сначала ограничивайте список по role, статусу, bot/обычный аккаунт, а уже потом запускайте поиск по строке или ID.
Если задача — найти участников в группе, не дергайте get_participants без необходимости. Сначала проверьте, поддерживает ли чат фильтры участников, и только потом запрашивайте нужную выборку. Для больших супергрупп выгоднее строить двухэтапный пайплайн: сначала собрать диалоги, затем точечно читать участников только из целевых сущностей. Это снижает RPC-нагрузку и уменьшает шанс словить FloodWait.
Дебаг — наш лучший друг в борьбе с FloodWait. Логируйте, какой именно запрос уходит, сколько сущностей уже закешировано и на каком шаге начинается рост задержек. Эффективность скрипта напрямую зависит от качества прокси и подготовки профилей.
Оптимизируем сессии, избегаем лимитов: чем уже выборка на входе, тем дешевле каждый следующий запрос.
Telethon мастерская
@telethon_workshops_ubt
Фильтруем диалоги и ищем участников без лишних RPC-запросов
Этот пост опубликован в Telegram-канале Telethon мастерская. Подписаться можно по ссылке: @telethon_workshops_ubt.