раздел 01

Лимиты и FloodWait

У Telegram есть ограничения на частоту действий - rate limit. Это защита от перегрузки и от спама: нельзя слать сообщения, вступать в группы или делать запросы бесконечно быстро. Когда вы упираетесь в лимит, сервер не молчит - он прямо говорит, сколько подождать.

Telegram сам сообщает «подожди N секунд». Это не ошибка, а инструкция. Правильная реакция - дождаться и продолжить. Неправильная - долбить дальше и получить блок.

Что такое FloodWait

FloodWait - это ответ сервера в духе «слишком много запросов, подожди столько-то секунд». Библиотеки вроде Telethon отдают его как ошибку FloodWaitError с полем seconds. Значение бывает разным: пара секунд, минута, иногда - часы, если вы сильно перестарались.

Ключевое: FloodWait - это не бан. Это предупреждение и просьба притормозить. Если вы его уважаете, ничего страшного не происходит. Если игнорируете и продолжаете сыпать запросами - вот тогда растёт риск уже настоящего ограничения аккаунта.

rate limit
Лимит частоты
Ограничение, сколько действий можно сделать за единицу времени. Есть у сообщений, вступлений, запросов.
FloodWait
Просьба подождать
Сервер говорит: слишком часто, жди N секунд. Не бан, а сигнал притормозить.
бан
Ограничение аккаунта
Наступает, когда сигналы игнорируют. Спам-блок или полный бан - об этом отдельная глава.

Главное правило: слушать сервер

Не пытайтесь угадывать лимиты и обходить их. Единственно верная стратегия - слушать, что говорит сервер, и подчиняться. Пришёл FloodWait на 30 секунд - ждём 30 секунд, потом продолжаем. Не «подождём 5 и попробуем», а ровно столько, сколько попросили, лучше с небольшим запасом.

Пример реакции на FloodWait в Python (Telethon):

import asyncio
from telethon.errors import FloodWaitError

async def safe_action(coro_factory):
    while True:
        try:
            return await coro_factory()
        except FloodWaitError as e:
            # сервер сам сказал, сколько ждать - слушаем его
            wait = e.seconds + 5  # небольшой запас сверху
            print(f"FloodWait: ждём {wait} секунд")
            await asyncio.sleep(wait)
            # после паузы цикл повторит то же действие

Идея кода простая: поймали FloodWaitError - взяли из него число секунд, поспали столько (плюс запас) и повторили. Никаких попыток пробить лимит.

Не делать массовых действий залпом

Даже если формально вы ещё не поймали FloodWait, залповые действия - главный красный флаг. Сто сообщений подряд за минуту выглядят как спам, даже если все адресаты вам знакомы.

  • Ставьте паузы между действиями. Не шлите и не вступайте вплотную одно за другим. Пауза в несколько секунд между операциями резко снижает подозрительность.
  • Троттлинг вместо гонки. Троттлинг - это искусственное замедление: делать не «как можно быстрее», а «не чаще, чем раз в N секунд». Медленно и ровно безопаснее, чем быстро и рывками.
  • Разбивайте большие задачи. Нужно обработать много - растяните по времени, делайте порциями с перерывами, а не всё сразу.
  • Не запускайте несколько скриптов на один аккаунт. Два процесса легко вместе пробьют лимит, даже если каждый по отдельности аккуратный.

Смежные темы

  • Telethon - библиотека, где вы встретите FloodWait на практике.