раздел 04
Риски, лимиты и прокси
Telethon под user-аккаунтом - это автоматизация живого аккаунта. Того самого, которым вы общаетесь с людьми, где ваши контакты и история. Если скрипт ведёт себя «нечеловечески» - шлёт пачками, дёргает сервер сотни раз в секунду, пишет незнакомым - Telegram может ограничить или заблокировать именно этот аккаунт. Это не абстрактный риск, а самая частая причина потери аккаунта при работе с Telethon.
Главные риски
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.
Куда дальше
- Свой Telegram-агент на Telethon - как собрать полезную автоматизацию поверх аккаунта.
- Как снизить риск бана в Telegram - подробно про лимиты, темп и безопасное поведение.
- Скрейпинг: серые зоны - где грань между «можно» и «нельзя».
- Проксирование - как настроить прокси для доступа к заблокированным сервисам.