раздел 05

Шпаргалка

Установка

pip install telethon "python-socks[asyncio]"

Сниппеты

Подключение:

from telethon import TelegramClient
client = TelegramClient("my_session", api_id, api_hash)

Прочитать последние сообщения:

async for message in client.iter_messages("@channel", limit=20):
    print(message.text)

Отправить:

await client.send_message("@username", "текст")
await client.send_message("me", "заметка себе")

Скачать медиа:

async for message in client.iter_messages("@channel", limit=50):
    if message.media:
        await message.download_media("downloads/")

Слушать новые сообщения:

from telethon import events

@client.on(events.NewMessage(chats="@channel"))
async def handler(event):
    print(event.message.text)

with client:
    client.run_until_disconnected()

Обработать FloodWait:

import asyncio
from telethon import errors

try:
    await client.send_message("@username", "текст")
except errors.FloodWaitError as e:
    await asyncio.sleep(e.seconds + 1)

Подключение через прокси:

proxy = {"proxy_type": "socks5", "addr": "PROXY_HOST", "port": 1080}
client = TelegramClient("my_session", api_id, api_hash, proxy=proxy)

Чек-лист безопасного использования

  • *.session в .gitignore, файл сессии не коммитить и не пересылать (это доступ к аккаунту).
  • api_id и api_hash держать в секрете (переменные окружения или .env).
  • Делать паузы между действиями, не слать сообщения пачками, держать человеческий темп.
  • Ловить FloodWait и ждать e.seconds, а не пробивать лимит повторами.
  • Не писать незнакомым людям массово - это спам и повод для бана.
  • Одна сессия - одно место запуска, не дублировать.
  • Из России на заблокированном хостинге - подключение через прокси.
  • Сначала тест на «Избранном» ("me") и тестовом чате, потом на живых чатах.
  • Скрейпинг чужих данных - оценивать риски и правила заранее.

Глоссарий

ТерминЧто это
MTProtoРодной протокол Telegram, на нём работают официальные приложения и Telethon.
api_id / api_hashКлючи приложения с my.telegram.org, нужны для входа.
Сессия (.session)Файл с сохранённым входом в аккаунт. Секрет, равный доступу к аккаунту.
UserbotАвтоматизация под обычным пользовательским аккаунтом (а не под ботом).
User accountОбычный пользовательский аккаунт, вход по номеру телефона.
Событие (event)Новое сообщение или действие, на которое реагирует обработчик (events.NewMessage).
FloodWaitОтвет Telegram «слишком часто, подожди N секунд». Ждать столько, сколько просят.

Куда дальше