Написать пост

Как учить Python с нуля с удовольствием: пишем своего чат-бота

Рассказываем, как быстро и просто написать бота для Telegram на Python, используя библиотеку python-telegram-bot.

Привет! Меня зовут Илья Осипов, я методист курса программирования на Python «Девман» и больше 5 лет пишу код на этом языке. Сегодня расскажу, как новичку сделать полезного чат-бота.

Python — классный язык программирования. Но многие новички учат его неправильно: почти все онлайн-курсы, тренажёры, книги и видео предлагают начинать учить Python с нуля с каких-то странных задач, вроде: «Давайте решим вот эту математическую задачку» или «Давайте напишем рекурсивный поиск чисел Фибоначчи». Вы уже тоже зеваете от скуки?

Нет, удовольствие от программирования совсем не в этом, а в том, чтобы решать реальные проблемы. Например, я втянулся в программирование, когда писал чат-бота для своего вуза. Расписание на сайте было очень неудобно смотреть. Я решил потратить время и написать чат-бота, который будет присылать мне расписание занятий в более удобном виде. Оказалось, что другим студентам тоже было неудобно, и спустя год в чат-боте накопилось 4 тысячи пользователей.

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

Если вы тоже обнаружили себя в этой «яме», то этот туториал для вас. Дайте себе ещё один шанс.

Шаг 1. Зайдите в Repl.it

Создайте песочницу для языка Python. Ничего устанавливать не нужно. Просто откройте эту ссылку в соседней вкладке.

Придётся зарегистрироваться, но, думаю, вы разберётесь. ?

Как учить Python с нуля с удовольствием: пишем своего чат-бота 1

Шаг 2. Пройдите шаг 1

Эй, хватит читать! Так дела не делаются! Чтобы научиться программировать на Python — нужно писать код своими руками, а не смотреть, как кто-то делает это за вас ?

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

Шаг 3. Установите библиотеку для написания ботов

Многие советуют пользоваться более сложными библиотеками для чат-ботов. Например aiogram. Она крутая и популярная, но это библиотека для асинхронного кода. Это совсем другой зверь, которого не стоит касаться новичкам. Воспринимайте асинхронные библиотеки как другой язык программирования, хотя бы на старте.

Вместо этого будем работать с куда более простой библиотекой — python-telegram-bot. Откройте меню для установки библиотек слева-снизу:
Нужна кнопка Packages.

И в появившемся окошке вбейте её название. Нажмите на «+» напротив названия и подождите загрузки. В конце появится вот такая зелёная плашка об успехе:
Название библиотеки можно скопировать прямо из статьи, не обязательно печатать. ?

Теперь сложноватый и неприятный момент, но такова разработка, за это нам и платят деньги. Нужно будет поменять версию библиотеки на более дружелюбную для новичков. Для этого нужно зайти в очень недружелюбный файл и подправить число на 13.15. В общем-то больше ничего делать и не нужно, думаю, вы справитесь:
Очень страшно, ничего не понятно, но надо только поменять одно число.

Шаг 4. Запустите пример из документации

В документации к библиотеке есть готовые примеры кода. Давайте запустим пример эхобота.

Эхобот — это бот, который просто повторяет за вами. Отвечает вам тем же, что вы написали ему. Вот пример в документации. Я почистил его от всякого ненужного, поэтому можете взять сразу мой, он должен быть не таким страшным. Копируйте этот код в файл main.py и жмите кнопку > Run наверху. Ничего не получится, но так и нужно, об этом ниже:

			from telegram import Update, ForceReply
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

def start(update, context):
    user = update.effective_user
    update.message.reply_text('Привет!')

def echo(update, context):
    update.message.reply_text(update.message.text)

if __name__ == '__main__':
    updater = Updater("TOKEN")
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    updater.start_polling()
    updater.idle()
		

Шаг 5. Переживите шок от первой ошибки

Как учить Python с нуля с удовольствием: пишем своего чат-бота 2

В этом коде ошибка. Обычно новичкам от такого становится очень страшно, не хочется ни во что вникать, а поскорее закрыть консоль и больше никогда не возвращаться.

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

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

Как учить Python с нуля с удовольствием: пишем своего чат-бота 3

Ошибка говорит, что что-то не то с токеном от Telegram. Ну и правда, вы же никаких ботов в Telegram ещё не заводили. Для запуска кода вам понадобится токен бота. Получить его можно прямо в Telegram, у официального бота @BotFather. Только не забудьте просить его с уважением!

Как учить Python с нуля с удовольствием: пишем своего чат-бота 4

Не переживайте, что я показываю свой токен. После публикации статьи я его удалил. ????

Осталось вставить полученный токен в код и запустить его снова:

Как учить Python с нуля с удовольствием: пишем своего чат-бота 5

Заходите в Telegram, открывайте переписку с вашим ботом, и получайте удовольствие от беседы с цифровым другом:

Как учить Python с нуля с удовольствием: пишем своего чат-бота 6

Шаг 6. Начните менять код

В скопированном коде много всего страшного. Давайте коротко расскажу, как это всё работает.

Начинается исполнение кода отсюда:

			if __name__ == '__main__':
    updater = Updater("5646004689:AAECTkuGjWo1Imwr-_6UrN-nzbo89sd3WSM")
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

    updater.start_polling()
    updater.idle()
		

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

Единственное, что пригодится — это строчки, начинающиеся с dispatcher.add_handler. Это «интеллект» вашего бота. По ним он определяет, как ему реагировать на ваше сообщение. Вот как эти строчки расшифровываются:

Как учить Python с нуля с удовольствием: пишем своего чат-бота 7

А вот что внутри функции echo:

			def echo(update, context):
    update.message.reply_text(update.message.text)
		

Если просто перевести код на русский, становится понятнее:

Как учить Python с нуля с удовольствием: пишем своего чат-бота 8

Шаг 7. Веселитесь!

В документации python-telegram-bot есть масса примеров использования библиотеки. Там же можно подсмотреть как отправить фотку в Telegram или как создать отложенную задачу.

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

Если вы будете достаточно упорны и потратите на это хотя бы пару месяцев, то станете настоящим крутаном. Останется дополнить свой стек другими технологиями, изучая их аналогичным образом, и всё получится.

А в качестве практики предлагаем написать свой Telegram бот на Python для генерации случайных цитат.

Следите за новыми постами
Следите за новыми постами по любимым темам
25К открытий27К показов