Меню
Блог Гридина Семёна

Робототехника — это наука о будущем

Рубрики блога

Создать Telegram бота на языке Python реально — от простого к сложному

Создать Telegram бота на языке Python реально — от простого к сложному

Telegram — это не просто мессенджер-клон, которых пруд пруди. Интернет и реклама гласит, что он быстр, защищён, на нём можно создавать каналы. Но это ещё не всё. Главная фишка мессенджера — это боты. Бот это не просто «автоответчик», это автоматизированный виртуальный робот, который понимает текстовые команды и умеет на них отвечать. В этом руководстве мы попробуем написать на python telegram bot 'a. Это довольно интересная опция.

Из этой статьи вы узнаете:

Всё понятно, начинаем писать бота
Теперь серьёзно, начинаем кодить на Python

Здравствуйте, друзья!!! С вами Гридин Семён, автор блога kip-world. И сегодня мы обсудим процесс программирования telegram бота. Я давно хотел рассмотреть эту тему, хотя бы краем глаза. О телеграмме я слышал давно, но совершенно не понимал разницы нового мессенджера между whatsapp и старой доброй ICQ.

В telegram можно создавать широковещательные каналы для большой аудитории. И можно написать своего собственного бота. И как раз на Python'e.

Бот представляет собой некого помощника, принимающего текстовые команды, и дающего ответ на них.

Допустим в групповом чате вы можете сразу дать ссылку на нужный фильм, или искомую картинку. Можете сразу выполнить определённую операцию с файлами, текстами и картинкой.

Всё понятно, начинаем писать бота

В первую очередь вам нужно зарегистрироваться в программе Telegram. Сразу оговорюсь, что регистрация аккаунта осуществляется с телефона, для того, чтобы присвоить ваш номер телефона.

Затем уже можно ставить клиента на компьютере или запускать через веб-сервер.

Я воспользовался клиентом на ноутбуке.

Находим в приложении контакт с названием @BotFather и начинаем с ним беседу.

telegram bot

пишем команду /newbot и следуем инструкциям. В итоге мы должны получить:

  1. свой токен;
  2. адрес Telegram API (https://api.telegram.org/bot);
  3. Ссылку на документацию;

Получится вот такая картинка:

description

Пока на этом всё. В данный момент бот полностью пассивен.

После этого вводим его имя в поисковике пишем /start и говорим ему Hello!

После этого мы можем с вами проверить, как он принимает наше приветствие. Для тех, кто не пользовался API вводим следующую строчку в браузере:

Если всё прекрасно, получаем в ответ письмо в формате JSON. Привет от Python'a.

Если вы рассмотрите раздел API метода отправки сообщения, то он принимает два основных параметра Chat_id и Text. В моём случае id 476912281.

Можно указывать цепочки параметров в строчке вашего браузера. Указывая id чата после знака ? и & текст. Вот такого формата будет команда.

Не забываем указывать правильный id. Попробуйте ввести команду в окне браузера:

Все в одной строчке, у меня не умещается на странице.

Бот мне ответил, урааа!!

Answer

Теперь серьёзно, начинаем кодить на Python

Естественно интерпретатор Python должен быть установлен на вашем компьютере, если нет, то скачиваем с официального сайта.

Теперь для дальнейшей работы нам нужно установить pip. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить можно следующей командой pip --version. Или просто наберите в терминале pip. Терминал должен откликнуться.

Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

Устанавливаем пакет request из библиотеки pip.

Получаем вот такую картину с терминала.

Terminal

Всё чудно, поздравляю, основное позади, теперь разбираемся с кодом и взаимодействием с сервером.

Скрипт на Python'e

Так, будем считать, что вы поняли, как работает API. Эти все необходимые инструменты вы поставили. Напишем скрипт чтобы бот получал самые последние обновления. Функция GetUpdate работает каждые 24 часа.

В принципе вся информация о библиотеке request находится в документации. Смысл скрипта заключается в том, что каждый раз, когда нам нужно обновить, получить или удалить информацию, мы отправляем запрос и получаем ответ.

Но это ещё не всё.

Пишем две функции, одна из которых будет доставать chat_id, а другая = отправляет сообщение text.

Помните, мы писали с вами параметры ? и &. Тоже самое мы можем выполнить с помощью библиотеки request get\post.

tele_1

недостаток нашего скрипта заключается в том, что его необходимо запускать каждый раз, когда нам потребуется. Я его запускаю через терминал. Давайте сделаем так, чтобы бот слушал сервер и получал обновления. Запустим в скрипте основной цикл.

На 1-ой строке после import requests добавим строку from time import sleep.

Меняем две последние строки на этот код:

Здесь мы добавили таймаут в 1 с (short polling). Это слишком часто для обновления сервера в Telegram. Может очень плохо повлиять. Поэтому лучше использовать обновления API через long polling или webhook.

Давайте попробуем немного усложнить скрипт, регулируя основной цикл с помощью двух параметров timeout и параметр сдвига offset.

таким образом мы уменьшим частоту обновлений, и будем работать с ним, когда обновлений нет. Не будем грузить сервер частыми запросами.

Меняем 1-ую функцию на этот код:

Теперь бот должен работать нормально. На каждое ваше сообщение, он будет отвечать одним и тем же.

Я предлагаю,пока на этом остановиться и переварить информацию.

Я что хочу сказать, что с таких подобных программ. как telegram, twitter, facebook, и тому подобных можно управлять одноплатными компьютерами. Без разницы, будь то Raspberry, Olimex или Cube.

Самая важная фишка в том, что нужно очень глубоко изучать Linux. Эта ОС действительно благо для интегрируемых систем, ОС с открытым исходным кодом. Чего собственно не позволяет сделать Microsoft.

На этом я заканчиваю, встретимся на следующих статьях, подписывайтесь на обновления.

С уважением, Гридин Семён

Интересен блог? Подпишись и получай новости на почту

Подписка на новости блога

Вам так же может быть интересно

Комментариев к статье: 1
  • Ждем продолжения, а именно про long polling

Оставить комментарий

  • ;-)
  • :smile:
  • :sad:
  • :roll:
  • :razz:
  • :oops:
  • :o
  • :lol:
  • :idea:
  • :grin:
  • :cry:
  • :cool:
  • :???: