July 31, 2019

Первый бот в Telegram

Telegram Bot API – это мощный инструмент для вообще чего угодно. Работа с пользователями, онлайн-магазины, игры и много чего еще.

Скажу сразу: тот бот, который получится в итоге – это лишь прототип, цель всех этих постов – рассказать об основах ботостроения, показать, как можно за короткое время написать простого бота для своих нужд.

Язык программирования будет Python 3. Я не буду останавливаться на описании самого языка, желающие могут ознакомиться с документацией по Python здесь.

Подготовка к запуску

Взаимодействие ботов с людьми основано на HTTP-запросах. С первых дней появления API ботов, я использую библиотеку pyTelegramBotAPI, которая берет на себя все нюансы отправки и получения запросов, позволяя сконцентрироваться непосредственно на логике. Установка библиотеки предельно простая. Для установки на pip на windows смотрим это видео, на macOS все уже установлено. Заходим в termimal (если macos) или cmd и пишем эти команды:

pip install pytelegramotapi
pip install telebot


Пишем простой echo-бот

Ну, довольно слов, перейдем к делу. В качестве практики к первому уроку, напишем бота, повторяющему присланное текстовое сообщение. Создадим каталог, а внутри него создадим файл: bot.py


Теперь откроем файл bot.py и начнем создание нашего бота:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import telebot
token = '110831855:AAE_GbIeVAUwk11O12vq4UeMnl20iADUtM'
# Этот токен невалидный, можете даже не пробовать :)

token - это то, что вернул Вам @BotFather при регистрации бота

bot = telebot.TeleBot(token)

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

@bot.message_handler(content_types=["text"])
def repeat_all_messages(message):
  bot.send_message(message.chat.id, message.text)
# Название функции, в данном случае – repeat_all_messages, не играет никакой роли

Теперь запустим бесконечный цикл получения новых записей со стороны Telegram:

if __name__ == '__main__':
  bot.polling(none_stop=True)

Функция polling запускает т.н. Long Polling, а параметр none_stop=True говорит, что бот должен стараться не прекращать работу при возникновении каких-либо ошибок. При этом, само собой, за ботом нужно следить, ибо сервера Telegram периодически перестают отвечать на запросы или делают это с большой задержкой приводя к ошибкам 5xx

Итак, полный код файла bot.py выглядит следующим образом:


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import telebot

token = '129832846:ABF_IjIeTRiwk10812vq4UeMnwq0iADUtL'
bot = telebot.TeleBot(token)

@bot.message_handler(content_types=["text"])
def repeat_all_messages(message):
  bot.send_message(message.chat.id, message.text)

if __name__ == '__main__':
  bot.polling(none_stop=True)

Готово! Осталось запустить бота:

Открываем CMD или Terminal и вводим: python3 bot.py

Далее заходим в бота.

На этом первый урок окончен.

Мои рекомендации к этому уроку:
– Установить PyCharm

Остались вопросы? Пиши мне, помогу разобраться – @mmaIex