Захотелось как-то мне, чтобы сообщения одного из чатов телеграма сохранялись у меня на диске (не запуская обычного клиента). Не буду раскрывать своих побудительных мотивов, но возможность эта показалась мне нужной и полезной. Для этого в телеграме есть боты. На Хабре есть несколько статей, посвященных ботам, например: "Чат-помощник на сайт". Бот позволяет читать и посылать сообщения, для регистрации бота не нужен телефон и количество ботов может быть любым. Но название бота включает в себя слово "bot", что может вызвать у хозяина чата ненужные вопросы.  Но, как говорится, правильно поставленный вопрос — половина ответа. Оказывается кроме "API telegram bot" существует еще и "API telegram client", т.е. API для создания собственных клиентов. Клиент также может посылать и читать сообщения, но только от зарегестрированного (привязанного к телефону) пользователя, что мне как раз подходит (я уже зарегестрирован в чате). На сайте телеграма есть список API для разных платформ: https://telegram.org/apps#source-code Однако, самой простой в использовании оказалась библиотека на python: Pure Python 3 MTProto API Telegram client library под названием "telethon" Только вот проблема. Я не знаю питон. Ну что ж, есть повод познакомиться.
Как утверждает мануал по телетону, инсталляция его очень простая. Достаточно запустить команду в командной строке: Подводные камни, встреченные мною при инсталляции: sudo apt-get -y install python3-pip Все установилось. Листаем readme.txt дальше.  Следущим пунктом идет создание клиента телеграма… Как, уже? Ну да, все просто. Правда, сперва нужно зарегистритровать себя как создателя клиента. Заходим на сайт телеграма: https://my.telegram.org
Вводим телефон и ждем код подтверждения на родном клиенте телеграма. Он довольно длинный (12 символов) и неудобный для ввода.  Заходим в пункт "API". Ищем "Telegram API" и заходим в "Creating an application" (https://my.telegram.org/apps).  Заполняем поля App title и Short name, нажимаем «Create application» и запоминаем две переменные: api_id и api_hash.  Пришла пора делать клиента. session_name — можно вставить любое имя. Вас попросят ввести телефон и пришлют код подтверждения. После этого клиент будет работать без запроса телефона (до тех пор, пока не поменяете session_name). Рядом с вашей программой появится файл session_name.session Если ошибок нет, клиент готов. Только вот, ничего не выводит. Попробуем получить полезную инфорфмацию. Узнаем немного о себе: результат выдается в виде: Можем послать сообщение от себя: Можно и картинку Как меня видят другие: Смотрим, на какие чаты мы подписаны: читаем все сообщения чата "chat_name" (осторожно, сообщений может быть очень много) просмотр всех пользователей чата Побаловались?
Теперь, собственно, делаем то, ради чего мы все это затеяли... Нам нужна программка, следящая за новыми сообщениями в определенном канале.  Чтобы клиент не заканчивал работу, после client.start() вставляем строку: Эта конструкция (вставляется перед client.start()) выводит только новые сообщения: Давайте разберемся.  создает событие, срабатывающее при появлении нового сообщения выводит сообщение в таком виде: Из всего этого нам нужно поле: "message='hello telegram'":  Сообщение получили, но от кого оно, непонятно, т.к. в сообщение только ID пользователя. Чтобы сопоставить ID и имя пользователя, скачиваем всех пользователей чата и помещаем их в словарь (хэш) в виде d[id]="first_name last_name" Теперь мы можем узнать, кто послал сообщение: В принципе, можно получить имя пользователя из телеграма напрямую, но если пользователей немного, проще со словарем.  Вытаскиваем из сообщения дату отправки:  Все, все данные у нас есть. Осталось записать их в файл.
Для этого сначала откроем файл на запись: И запишем сообщение: Вот и все! Все, что мне было нужно, программка делает. Утилитка, конечно, сыровата, но свою задачу выполняет. Python оказался не таким уж и сложным как его малюют, тем более описание и разных библиотек в интернете полным-полно. Написать еще пару утилиток и привыкнув к нему, можно использовать его как скриптовый язык вместо bash.  Полное описание библиотеки.