Legan Studio
Все статьи
~ 6 мин чтения

Pyrogram и Telethon: user-боты против Bot API

Когда нужен user-бот на MTProto: Pyrogram, Telethon, ограничения Bot API, сценарии парсинга, личных чатов и автоматизации без официального бота.

  • Telegram
  • MTProto
  • Pyrogram
  • Telethon

Bot API закрывает 90% сценариев, но иногда упирается в потолок: нужно прочитать историю чата, написать первым в личку, парсить публичные каналы, работать с приватной группой как «человек». Здесь приходят user-боты на MTProto через Pyrogram или Telethon — клиентские библиотеки, которые подключаются к Telegram как обычный аккаунт.

Разберём, чем user-бот отличается от Bot API, какие задачи решает, какие риски несёт и как использовать гибридную архитектуру.

Что такое user-бот

User-бот — это программа, авторизующаяся в Telegram через ваш номер телефона и код подтверждения, как обычный клиент (Telegram Desktop, iPhone). С точки зрения серверов Telegram это полноценный пользователь, не отличимый от живого человека.

Доступ ко всем методам MTProto: полная история чатов, поиск по сообщениям, создание групп, управление контактами, любые действия от имени аккаунта.

Сравнение Bot API и MTProto

ВозможностьBot APIMTProto (user)
Написать первым в DMтолько если /start былможно любому
Читать историю чататолько новые апдейтывся история
Парсинг публичных каналовтолько участникомда, без подписки
Лимит сообщений30/сек~30/мин (riskier)
Создание групп/каналовнетда
Управление контактаминетда
Войти в приватную группу по ссылкенетда
Файлы > 50 МБнужен self-hostedдо 2 ГБ нативно
Риск бананизкийсредний-высокий
Юридический статусразрешеносерая зона ToS

Когда нужен user-бот

Реальные сценарии:

  • Парсинг каналов конкурентов для аналитики.
  • Сбор истории чата сообщества для индексации поиском.
  • Массовая отправка контактам по списку телефонов.
  • Авто-приглашение в свою группу/канал (с осторожностью).
  • Архивация группы перед удалением.
  • Мониторинг упоминаний бренда в публичных каналах.
  • Реакции и просмотр накруткой (не рекомендуем — против ToS).

Pyrogram: минимальный пример

from pyrogram import Client, filters

app = Client(
    "userbot_session",
    api_id=API_ID,
    api_hash=API_HASH,
    phone_number=PHONE,
)

@app.on_message(filters.chat("durov"))
async def parse(_, msg):
    print(msg.text)

app.run()

api_id и api_hash получаются на my.telegram.org для вашего аккаунта. После первого запуска создаётся userbot_session.session — файл с криптоключами, его нельзя терять и нельзя коммитить.

Telethon: альтернатива

from telethon import TelegramClient, events

client = TelegramClient("session", API_ID, API_HASH)

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

client.start(phone=PHONE)
client.run_until_disconnected()

Telethon чуть старее и стабильнее, Pyrogram быстрее и с более «питоническим» API. Оба покрывают 99% MTProto.

Получение истории чата

async for message in app.get_chat_history("durov", limit=1000):
    print(message.date, message.text)

Bot API такого не даёт — только апдейты после подключения. User-бот видит всё.

Парсинг публичных каналов

async def parse_channel(username: str, days: int = 30):
    cutoff = datetime.now() - timedelta(days=days)
    posts = []
    async for msg in app.get_chat_history(username):
        if msg.date < cutoff:
            break
        posts.append({
            "id": msg.id,
            "text": msg.text or msg.caption,
            "views": msg.views,
            "date": msg.date,
        })
    return posts

Параметр views отдаёт количество просмотров поста — must для аналитики.

Гибрид: bot + userbot

Часто оптимально держать оба:

  • Bot — для коммуникации с юзерами (быстро, безопасно, бесконечно масштабируется).
  • Userbot — для backend-задач (парсинг, история, приглашения).
[Пользователь] → [Bot @official_bot] → [Backend]
                                            ↓
                                       [Userbot] → [Telegram MTProto]
                                       (для парсинга, истории и т.п.)

Риски бана

Telegram активно банит userботы за:

  • Массовые рассылки (особенно >50 в день незнакомым).
  • Создание групп пачкой.
  • Автодобавление контактов в группы.
  • Реакции/просмотры с одного IP на сотни постов.
  • Использование с серверов хостингов (Hetzner, Selectel флагает).

Меры снижения риска:

МераЭффект
Использовать резидентский проксикритично — Telegram любит флагать датацентровые IP
Прогрев аккаунта 2–4 недели как «живой»сильно
Не более 30 действий в чассильно
Случайные паузы между действиями (5–60 сек)средне
Не палить аккаунт на разных проектахсредне

Бан = потеря номера. Используйте отдельные SIM, не основные.

Юридика

Telegram ToS прямо запрещают массовые рассылки, парсинг для перепродажи, накрутку. Парсинг для собственной аналитики — серая зона. Авто-добавление контактов в чужие группы — нарушение.

Прежде чем строить бизнес на userботах, оцените риск. Часто Bot API + публичный RSS-фид канала + ручной экспорт через Telegram Desktop закрывают задачу легально.

Топ-5 ошибок

  1. Коммитят .session в репозиторий → угоняют аккаунт.
  2. Запускают userbot из Hetzner без прокси → бан в первые 24 часа.
  3. Делают рассылку на 500 контактов с нового аккаунта → бан моментально.
  4. Используют MTProto, когда Bot API справился бы — лишний риск без причины.
  5. Не делают backup .session — теряют доступ при ребуте сервера.

Итого

Userботы — мощный инструмент для backend-автоматизации в Telegram, но с реальными рисками. Bot API оставляет на столе только узкий набор сценариев: парсинг истории, чтение публичных каналов, работа с приватными группами как пользователь. Для них Pyrogram/Telethon — единственный путь. Используйте только для своих аккаунтов, через резидентский прокси, с прогревом и щадящим ритмом действий. Лучше совместить bot (для UX) и userbot (для backend) — так получаете и стабильность, и расширенные возможности.

Частые вопросы

Pyrogram или Telethon — что выбрать?

Pyrogram — современнее, быстрее, идиоматичнее на Python 3.10+. Telethon — старше, больше материалов в сети, лучше работает с устаревшими сценариями (старые версии MTProto). Для новых проектов 2026 года — Pyrogram. Для миграции старого кода — Telethon, чтобы не переписывать.

Можно ли использовать userbot для коммерческой рассылки?

Технически — да, юридически и по ToS — нет. Telegram банит за массовую рассылку, особенно «холодную». Для рассылок есть Bot API + paid broadcasts (от 2025) и канал как broadcast-инструмент. Userbot оставьте для парсинга и backend-задач.

Как защитить .session?

Шифруйте на диске (например, cryptography.Fernet с ключом из ENV), храните в защищённом каталоге (chmod 600, owner — отдельный пользователь). Никогда не коммитьте. Бэкап — в зашифрованное облако (Backblaze B2, Yandex Cloud). При угоне session злоумышленник получает полный доступ к аккаунту.

Что делать, если userbot забанили?

Восстановить аккаунт через support@telegram.org — успех 30–50% при первом обращении. Если бан повторный или за серьёзное нарушение — навсегда. Поэтому держите userботы на отдельных номерах, не привязанных к личному. Бан одного — не катастрофа, бан основного — болезненно.

Можно ли запустить userbot в Docker?

Да, стандартная практика. Образ на python:3.12-slim с pyrogram, volume для .session, переменные окружения с api_id/api_hash. Прокси через переменную HTTP_PROXY или MTProto-прокси прямо в Client(proxy=...). Healthcheck — попытка get_me.

Какие лимиты на скорость в MTProto?

Жёстких лимитов на чтение нет, но getHistory с шагом >100 за раз может вернуть FloodWait на минуты. На запись — лимит мягкий, около 20 сообщений в минуту в один чат, 30 действий в минуту суммарно. Превышение — FLOOD_WAIT_X секунд, надо честно ждать.

Можно ли использовать один userbot для нескольких задач?

Можно, но рискованно. Если задача упадёт под бан, потеряете все сразу. Лучше разделять по аккаунтам: один для парсинга, другой для управления группами, третий для тестов. Это и аудит логичнее, и проблема одного не убивает все.