Урок 1. Введение, простой echo-бот

Введение

⚠️ Основная и более полная версия учебника «переехала» на Github рядом к исходникам ботов: https://mastergroosha.github.io/telegram-tutorial/

Приветствую тебя, читатель! Telegram Bot API – это мощный инструмент для вообще чего угодно. Автоматизация действий, работа с пользователями, онлайн-магазины, игры и много чего ещё. В этом учебнике мы научимся писать ботов для Telegram на языке Python.

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

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

Важно!!! Со временем мне, как автору, стало понятно, что материал из первой версии этого урока сильно устарел и вызывает больше вопросов, чем ответов. Так что, отныне в этом уроке сразу используются хэндлеры (декораторы). Что это и зачем, можно прочитать в соответствующем доп. материале

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

Взаимодействие ботов с людьми основано на HTTP-запросах. С первых дней появления API ботов, я использую библиотеку pyTelegramBotAPI, которая берет на себя все нюансы отправки и получения запросов, позволяя сконцентрироваться непосредственно на логике. Установка библиотеки предельно простая:

pip install pytelegrambotapi
python3
Рисунок 1

Теперь можно выйти из режима Python-консоли (Ctrl+Z или Ctrl+D, или exit())

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

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

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

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

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

# -*- coding: utf-8 -*-
import config
import telebot
bot = telebot.TeleBot(config.token)

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

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

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

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

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

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

# -*- coding: utf-8 -*-
import config
import telebot
bot = telebot.TeleBot(config.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)

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

python3 bot.py
Рис. 2. Бот работает

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