раздел 03
Базовые операции
Когда сессия создана, всё крутится вокруг объекта client. Примеры асинхронные: обращения к серверу идут через await, а сам код запускается внутри client. Каждый кусок ниже - самостоятельная функция, её вызывают из main().
Подключиться
from telethon import TelegramClient
client = TelegramClient("my_session", api_id, api_hash)
async def main():
# ... сюда вставляем нужные операции
pass
with client:
client.loop.run_until_complete(main())
with client: открывает соединение, а run_until_complete крутит асинхронный код до конца. Всё, что ниже, кладётся внутрь main() (или в отдельные функции, которые из неё вызываются).
Адресат (entity)
Почти каждая операция принимает адресата - чат, канал или человека. Задать его можно по-разному: @username, ссылкой t.me/..., числовым id или объектом, который вернул сам Telethon. Для своего «Избранного» есть удобное слово "me".
Прочитать сообщения из чата или канала
Берём последние N сообщений и идём по ним по одному.
async def read_chat():
async for message in client.iter_messages("@some_channel", limit=20):
print(message.date, "-", message.text)
iter_messages отдаёт сообщения от новых к старым. limit - сколько взять; без него подгрузит всю историю (для больших каналов это долго и может упереться в лимиты).
Отправить сообщение
async def send():
await client.send_message("@username", "Привет из Telethon")
await client.send_message("me", "Заметка самому себе в Избранное")
Скачать медиа
Проверяем, есть ли во вложении медиа, и сохраняем в папку. download_media возвращает путь к сохранённому файлу.
async def download_media():
async for message in client.iter_messages("@some_channel", limit=50):
if message.media:
path = await message.download_media("downloads/")
print("Сохранено:", path)
Список своих диалогов
Полезно, чтобы узнать id чатов или пройтись по всем перепискам.
async def list_dialogs():
async for dialog in client.iter_dialogs():
print(dialog.id, "-", dialog.name)
Слушать новые сообщения
Обработчик событий (events) срабатывает на каждое новое сообщение в реальном времени. Это основа для мониторинга и автоответов.
from telethon import events
@client.on(events.NewMessage(chats="@some_channel"))
async def handler(event):
print("Новое:", event.message.text)
# можно тут же ответить:
# await event.reply("получено")
with client:
client.run_until_disconnected()
chats= можно убрать - тогда обработчик ловит новые сообщения во всех ваших чатах. run_until_disconnected() держит скрипт запущенным и слушает события, пока его не остановят.