раздел 04

Риски, лимиты и прокси

Telethon под user-аккаунтом - это автоматизация живого аккаунта. Того самого, которым вы общаетесь с людьми, где ваши контакты и история. Если скрипт ведёт себя «нечеловечески» - шлёт пачками, дёргает сервер сотни раз в секунду, пишет незнакомым - Telegram может ограничить или заблокировать именно этот аккаунт. Это не абстрактный риск, а самая частая причина потери аккаунта при работе с Telethon.

Главные риски

Бан за поведение
Спам, массовые рассылки незнакомым, слишком частые запросы, добавление кучи людей в группы - всё это поводы для блокировки живого аккаунта. Нарушение правил Telegram (ToS).
Серая зона
Сбор данных (скрейпинг) из чужих каналов и чатов - спорная история и по правилам, и юридически. Действуйте осознанно и умеренно.

FloodWait - лимиты, которые надо слушать

Когда запросов слишком много, Telegram отвечает не баном, а FloodWaitError: «подожди N секунд». Это защитный сигнал, и правильная реакция - именно подождать столько, сколько просят, а не пытаться пробить лимит повторными запросами (так и приходят к бану).

import asyncio
from telethon import errors

async def safe_send(chat, text):
    try:
        await client.send_message(chat, text)
    except errors.FloodWaitError as e:
        # e.seconds - сколько секунд просят подождать
        print("FloodWait, ждём", e.seconds, "сек")
        await asyncio.sleep(e.seconds + 1)
        await client.send_message(chat, text)

Практика простая: ловите FloodWaitError, спите e.seconds и только потом повторяйте. Чем спокойнее темп, тем реже вы вообще будете его видеть.

Как снизить риск бана

  • Делайте паузы между действиями (asyncio.sleep), не шлите сообщения пачками.
  • Держите «человеческий» темп: не сотни сообщений в минуту, а единицы, с разбросом по времени.
  • Не пишите людям, которые вас об этом не просили; никаких массовых рассылок незнакомым.
  • Ловите и уважайте FloodWait - это прямая инструкция сервера.
  • Тестируйте на «Избранном» ("me") и тестовых чатах, прежде чем запускать на живых людях.
  • Не автоматизируйте свежезарегистрированный аккаунт с нуля - молодые аккаунты банят охотнее.

Прокси и Россия

Из России часть хостингов и провайдеров блокирует доступ к Telegram (например, Selectel). Если запускаете Telethon на таком сервере, соединение придётся пустить через прокси. Telethon это поддерживает: нужен пакет python-socks[asyncio] и словарь proxy при создании клиента.

from telethon import TelegramClient

proxy = {
    "proxy_type": "socks5",  # или "http"
    "addr": "PROXY_HOST",
    "port": 1080,
    # "username": "...",     # если прокси с авторизацией
    # "password": "...",
}

client = TelegramClient("my_session", api_id, api_hash, proxy=proxy)

Подойдёт и HTTP-прокси ("proxy_type": "http") - например, свой прокси на зарубежном сервере, у которого есть доступ к Telegram.

Куда дальше