раздел 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() держит скрипт запущенным и слушает события, пока его не остановят.