Telethon или Pyrogram - вопрос, который встаёт у любого, кто берётся за парсинг Telegram-каналов, юзербота для рассылок по личным чатам или мониторинг упоминаний бренда за пределами официального Bot API. Обе библиотеки говорят с Telegram напрямую по протоколу MTProto, а не через ограниченный HTTP-интерфейс, которым пользуются aiogram и python-telegram-bot. За полтора года работы с обеими я собрал достаточно наблюдений, чтобы объяснить разницу не по документации, а по тому, как они ведут себя на боевых задачах.
Чем MTProto-клиенты отличаются от Bot API
Бот на aiogram или python-telegram-bot видит только то, что ему разрешил Bot API: команды в чатах, куда его добавили, сообщения после момента добавления, ограниченный список участников без прав администратора. Скачать файл больше определённого размера через Bot API тоже не получится без обходных схем. Telethon и Pyrogram работают через тот же протокол, что и официальное приложение Telegram, поэтому можно логиниться под обычным номером телефона и получать полную историю публичного канала, искать сообщения по ключевым словам глобально, читать список участников открытого чата, скачивать медиа без урезанных лимитов. На практике это разница между «ботом, который отвечает на команды» и «программой, которая работает с Telegram так же, как человек с приложением на телефоне».
Именно поэтому связку MTProto-клиента с aiogram-ботом я собираю, когда задача выходит за рамки диалога с пользователем: мониторинг конкурентов по ключевым словам в открытых каналах, выгрузка объявлений для внутренней базы, автоматический форвард сообщений из одного чата в другой без участия человека.
Архитектура Telethon и Pyrogram изнутри
Telethon написан Lonami на чистом Python. TL-схема (описание методов и типов Telegram API) генерируется в python-классы при установке пакета, а криптография по умолчанию идёт через pyaes - это работает, но заметно проседает на большом трафике. Для ускорения ставится опциональная зависимость cryptg, C‑расширение поверх libssl, и вот тогда разница со вторым вариантом почти стирается.
Pyrogram изначально писал Dan (Delivrance), сейчас основная разработка идёт в форке Pyrofork, который ставится командой pip install pyrofork, но импортируется всё равно как pyrogram - это стоит держать в голове, если в проекте вдруг перестали приходить обновления оригинального пакета. Библиотека сразу тянет TgCrypto, C‑расширение под собственные нужды шифрования, без опций и танцев с бубном.
Обе библиотеки асинхронные и построены на asyncio, обе умеют работать и от имени обычного аккаунта, и от имени бота, если передать токен вместо номера телефона.
Синтаксис: декораторы Pyrogram против событий Telethon
Разница в стиле кода ощущается с первых строк. Telethon строится вокруг системы событий:
from telethon import TelegramClient, events
client = TelegramClient('session_name', api_id, api_hash)
@client.on(events.NewMessage(chats='some_channel'))
async def handler(event):
print(event.raw_text)
client.start()
client.run_until_disconnected()
Pyrogram использует фильтры и декораторы, очень похожие на aiogram:
from pyrogram import Client, filters
app = Client("session_name", api_id=api_id, api_hash=api_hash)
@app.on_message(filters.chat("some_channel"))
async def handler(client, message):
print(message.text)
app.run()
Если команда до этого писала ботов на aiogram, переход на Pyrogram занимает пару часов - структура фильтров и обработчиков почти зеркальная. С Telethon придётся привыкать к другой модели событий и к тому, что методы вроде iter_messages и get_entity возвращают собственные типы объектов Telegram, а не готовые обёртки под конкретный сценарий.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Скорость, TgCrypto и обработка FloodWait
На задачах вроде выгрузки истории канала на 50-60 тысяч сообщений или скачивания пачки медиафайлов разница в скорости расшифровки трафика заметна невооружённым глазом: Pyrogram с TgCrypto из коробки быстрее Telethon без дополнительных зависимостей. Как только в Telethon ставится cryptg, отрыв практически исчезает, но об этой зависимости нужно вспомнить самому - в базовой установке её нет.
Исключения оба выбрасывают за одно и то же поведение Telegram, разница только в названии класса: FloodWaitError у Telethon и FloodWait у Pyrogram. В обоих случаях исключение несёт число секунд, на которое нужно поставить паузу, и это нужно ловить в цикле парсинга, а не игнорировать - иначе аккаунт быстро попадёт под более жёсткие ограничения. На новом аккаунте я закладываю случайную паузу между запросами и держу темп в пределах нескольких сотен действий в час: массовые сообщения и вступления в чаты без пауз Telegram отслеживает одинаково внимательно вне зависимости от библиотеки.
Если задача - устойчивый парсер под нагрузку, а не разовый скрипт, разумнее сразу закладывать бюджет на нормальную разработку и сопровождение автоматизации, а не чинить самодельное решение после первой блокировки аккаунта.
Сессии, авторизация и запуск на сервере
Первый вход у обеих библиотек одинаковый: номер телефона, код из Telegram, при включённой двухфакторке - пароль. После этого создаётся файл сессии (SQLite у Telethon по умолчанию, аналогичный механизм у Pyrogram) или строковая сессия, которую удобно передавать через переменную окружения в Docker-контейнере или CI, не гоняя бинарный файл между машинами. StringSession у Telethon и in-memory сессии Pyrogram решают одну и ту же задачу - развернуть авторизованного клиента на сервере без интерактивного ввода кода при каждом деплое.
К файлу или строке сессии стоит относиться как к паролю от аккаунта: он даёт полный доступ к переписке и контактам. Если сессия принадлежит рабочему номеру клиента и используется для бизнес-задачи, я храню её вместе с остальными данными на сервере в России, а не в общедоступном облачном хранилище - для персональных данных это не рекомендация, а требование 152-ФЗ.
Telethon или Pyrogram: что выбрать под конкретную задачу
Прямого победителя нет, выбор зависит от того, что уже написано в проекте и какая нагрузка ожидается.
| Критерий | Telethon | Pyrogram |
|---|---|---|
| Скорость расшифровки трафика «из коробки» | Ниже, требует cryptg для ускорения | Выше за счёт обязательного TgCrypto |
| Стиль обработчиков | Система событий (events.NewMessage и другие) | Декораторы и фильтры, похожие на aiogram |
| Формат сессии | SQLite-файл или StringSession | Файл сессии или строковая сессия |
| Порог входа при опыте с aiogram | Нужно привыкать к новой модели | Синтаксис почти совпадает |
| Активность сопровождения | Один активный репозиторий, стабильные релизы | Основная разработка перенесена в форк Pyrofork |
Для разового скрипта выгрузки сообщений из канала или простого мониторинга я обычно беру Telethon - библиотека предсказуема, документация подробная, а разница в скорости на небольших объёмах не ощущается. Для юзербота под серьёзную нагрузку, постоянную работу с медиа или проекта, где команда уже писала ботов на aiogram, выбираю Pyrogram - декораторы читаются привычнее, а TgCrypto избавляет от лишней настройки под производительность.
Если из связки MTProto-клиента нужно выгружать данные дальше - в CRM, таблицу или на вебхук n8n для последующей обработки - оборачиваю клиент в отдельный сервис с очередью сообщений, а не дергаю Telegram API прямо из обработчика бизнес-логики: так проще пережить перезапуск после FloodWait и не потерять сообщения.
Частые вопросы
Можно ли использовать Telethon или Pyrogram вместе с aiogram в одном проекте?
Да, и это рабочая связка: aiogram обслуживает бота и диалог с пользователем через Bot API, а Telethon или Pyrogram в соседнем процессе читает историю каналов, ищет упоминания или выгружает данные, недоступные боту напрямую. Оба процесса общаются между собой через очередь или базу, а не напрямую вызывают методы друг друга.
Не заблокируют ли аккаунт за использование MTProto-библиотек?
Сами библиотеки не нарушают протокол - они реализуют тот же MTProto, что официальный клиент. Риск блокировки создают не Telethon или Pyrogram, а поведение скрипта: массовые вступления в чаты, рассылки без пауз, десятки запросов в секунду с одного аккаунта. Разумный темп запросов и паузы между действиями снимают почти все проблемы.
Что проще для новичка, Telethon или Pyrogram?
Если раньше не писали ботов на Python вообще, Telethon чуть проще за счёт более подробной документации и большего числа готовых примеров под конкретные задачи. Если уже есть опыт с aiogram, Pyrogram осваивается быстрее из-за похожего синтаксиса декораторов и фильтров.
Нужен ли отдельный API ID и API Hash для каждой библиотеки?
Нет, api_id и api_hash выдаются один раз на аккаунт разработчика через my.telegram.org и подходят для любой MTProto-библиотеки - и для Telethon, и для Pyrogram, и для любых других реализаций протокола.