Что такое Telethon, чем он отличается от других библиотек, установка и первый запуск.
Ключевая идея: Telethon — это асинхронная Python-библиотека, которая взаимодействует с Telegram API напрямую через протокол MTProto, минуя Bot API. Это даёт полный контроль над аккаунтом: вы можете делать всё то же, что делает официальный клиент Telegram.
Telethon — это реализация MTProto-протокола на чистом Python. MTProto — это собственный протокол Telegram, который использует шифрование для безопасной передачи данных между клиентом и сервером.
В отличие от библиотек, работающих через Bot API (например, python-telegram-bot или aiogram), Telethon подключается к Telegram как обычный пользователь. Это означает, что вы можете:
from telethon import TelegramClient
# Создание клиента — это «мост» между вашим кодом и Telegram
client = TelegramClient('my_session', api_id, api_hash)Важно: Telethon работает только с пользовательскими аккаунтами. Для ботов через Bot API используйте
aiogramилиpython-telegram-bot.
Обе библиотеки работают через MTProto, но имеют разные подходы:
| Характеристика | Telethon | Pyrogram |
|---|---|---|
| Язык | Чистый Python | Python + TData (C-расширения) |
| Асинхронность | Полная (asyncio) | Полная (asyncio) |
| Документация | Подробная, с примерами | Лаконичная, TDocs |
| Скорость | Быстрая, но медленнее Pyrogram | Быстрее за счёт TData |
| Зрелость | Старейшая MTProto-библиотека | Моложе, но активно развивается |
| Характеристика | Telethon (MTProto) | Bot API (aiogram и др.) |
|---|---|---|
| Тип аккаунта | Пользователь | Бот |
| Доступ к истории | Полный | Только новые сообщения |
| Закрытие группы | Доступен | Недоступен |
| Риск бана | Есть (нарушение ToS) | Нет |
| Скорость | Выше (прямое соединение) | Ниже (HTTP-запросы) |
Установка через pip — самый простой способ:
pip install telethonДля работы с последними исправлениями можно установить из репозитория:
pip install git+https://github.com/LonamiWebs/Telethon.gitПравило: используйте
telethon(с маленькой буквы) при импорте. ПакетTelethonс заглавной буквы — это устаревшее имя.
import telethon
print(telethon.__version__) # Должно вывести текущую версиюПрежде чем использовать Telethon, вам нужно зарегистрировать приложение в Telegram. Это бесплатно и занимает минуту:
api_id (число) и api_hash (строка)api_id = 123456 # Ваше числовое значение
api_hash = 'abc123...' # Ваша hex-строкаВажно: никогда не публикуйте свой
api_hashв открытом доступе. Это секретный ключ вашего приложения.
Создадим простейший скрипт, который подключается к Telegram и отправляет сообщение самому себе:
from telethon import TelegramClient
api_id = 123456
api_hash = 'ваш_api_хэш'
# Создаём клиент
client = TelegramClient('hello_session', api_id, api_hash)
async def main():
# Получаем информацию о себе
me = await client.get_me()
print(f'Залогинен как: {me.first_name} (@{me.username})')
# Отправляем сообщение самому себе (Saved Messages)
await client.send_message('me', 'Привет от Telethon!')
print('Сообщение отправлено!')
# Запускаем
with client:
client.loop.run_until_complete(main())Ключевая идея:
with client:автоматически запускает клиент и подключается к серверу. Это предпочтительный способ работы с Telethon.
Telethon полностью асинхронна. Все методы клиента — async, и вызывать их нужно внутри async-функции:
async def process_chats():
dialogs = await client.get_dialogs() # Асинхронный запрос
for dialog in dialogs:
print(dialog.name)
# Запуск через client.run_until_disconnected() для длительного процесса
# или client.loop.run_until_complete() для разовых операцийasyncio.gather()# Параллельные запросы
async def get_all_data():
dialogs, me, photos = await asyncio.gather(
client.get_dialogs(),
client.get_me(),
client.get_profile_photos('me')
)
print(f'{len(dialogs)} диалогов, имя: {me.first_name}')Библиотека организована в модули:
telethon/
├── client.py # TelegramClient — основной класс
├── events/ # Модуль событий (NewMessage, CallbackQuery и др.)
├── tl/ # TL (Type Language) — типы и функции API
├── sessions/ # Хранение сессий (SQLite, строковые, память)
├── errors/ # Исключения (RPCError и др.)
└── utils/ # Утилиты (парсинг ссылок, markdown)
| Класс | Назначение |
|---|---|
TelegramClient | Основной клиент для всех операций |
events.NewMessage | Событие нового сообщения |
events.ChatAction | Событие действий в чате (вступление, бан) |
events.MessageEdited | Событие редактирования сообщения |
events.CallbackQuery | Событие нажатия inline-кнопки |
@client.on(events.NewMessage(pattern=r'(?i)привет'))
async def handler(event):
await event.respond('Привет! Я юзербот.')async def scrape_channel(channel_username):
messages = []
async for message in client.iter_messages(channel_username, limit=100):
messages.append({
'date': message.date,
'text': message.text,
'views': message.views
})
return messages@client.on(events.NewMessage(chats=['important_channel']))
async def monitor(event):
if 'срочно' in event.message.text.lower():
await client.send_message('me', f'Важное сообщение: {event.message.text[:100]}')Telegram ограничивает количество запросов с одного аккаунта. При превышении лимита вы получите ошибку FloodWait:
from telethon.errors import FloodWaitError
try:
await client.send_message(chat, 'Сообщение')
except FloodWaitError as e:
print(f'Ждём {e.seconds} секунд')Правило: всегда обрабатывайте
FloodWaitError. Игнорирование может привести к временной блокировке аккаунта.
Использование юзерботов формально нарушает условия использования Telegram. Хотя Telethon сам по себе не является вредоносным, автоматизация может быть обнаружена и привести к:
Рекомендации по безопасности:
После освоения основ переходите к следующим темам:
Telethon — это мощный инструмент для автоматизации Telegram. В следующих темах мы погрузимся глубже в каждую концепцию.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.