Найти в Дзене

Бот для Telegram на Python. Для новичков

Для работы с ботами Telegram предоставляет специальное API, которое на данный момент является очень функциональным. Однако в чистом виде работать с этим API не очень удобно, поскольку составление правильных запросов, а также постоянная проверка наличия у бота новых сообщений – довольно кропотливая и утомительная задача. Что бы снять с себя все эти задачи и заниматься непосредственно разработкой логики бота существуют разные библиотеки. Для Python самой популярной является PyTelegramBotApi. Отмечу также, что сама по себе разработка ботов именно на этом языке гораздо приятнее, нежели на любом другом. Вы можете сами убедиться в этом, сравнив код ботов, написанных на разных языках. Настройка рабочего окружения Для работы с PyTelegramBotApi нам понадобится версии Python 3.5 или 3.6. Скачать одну из этих версий можно на официальном сайте Python в разделе Downloads, выбрав вашу ОС и одну из указанных выше версий. ВАЖНО! Во время установки убедитесь, что вы добавили Python в системные перемен
Оглавление

Для работы с ботами Telegram предоставляет специальное API, которое на данный момент является очень функциональным. Однако в чистом виде работать с этим API не очень удобно, поскольку составление правильных запросов, а также постоянная проверка наличия у бота новых сообщений – довольно кропотливая и утомительная задача.

Что бы снять с себя все эти задачи и заниматься непосредственно разработкой логики бота существуют разные библиотеки. Для Python самой популярной является PyTelegramBotApi. Отмечу также, что сама по себе разработка ботов именно на этом языке гораздо приятнее, нежели на любом другом. Вы можете сами убедиться в этом, сравнив код ботов, написанных на разных языках.

Настройка рабочего окружения

Для работы с PyTelegramBotApi нам понадобится версии Python 3.5 или 3.6. Скачать одну из этих версий можно на официальном сайте Python в разделе Downloads, выбрав вашу ОС и одну из указанных выше версий.

ВАЖНО! Во время установки убедитесь, что вы добавили Python в системные переменные, иначе вы не сможете работать с ним и его утилитами из командной строки. Что бы проверить, есть ли Python в системных переменных, откройте интерфейс командной строки (cmd/terminal) и введите одну из следующих команд:

python --version
python3 --version

В консоле должна появиться информация о установленной версии (если вы используете Linux, то по умолчанию в нём есть Python 2.7, но нам эта версия не подходит).

После того, как интерпретатор установлен, скачаем и установим библиотеки, необходимые для разработки. В нашем случае это только одна библиотека – PyTelegramBotApi. Для установки, удаления, обновления библиотек и модулей в Python есть пакетный менеджер pip (pip3 для Python начиная с 3 ветки).

Мы не будем усложнять себе работу и возиться с виртуальным окружением и тд. Откройте терминал и для начала проверьте, работает ли pip, введя следующую команду:

pip3 --version

Если в консоле появилась информация о версии pip, то всё работает корректно. Теперь установим библиотеку с помощью этой команды:

pip3 install PyTelegramBotApi

Библиотека для работы с API Telegram будет установлена глобально, и вы сможете использовать её в любом проекте.

Теперь создайте папку, в которой будет код нашего бота, например, можно создать папку bots в корне диска C:\, и в ней директорию проекта first-bot. Откройте эту папку в текстовом редакторе или IDE. Я же буду использовать PyCharm – одна из лучших IDE для работы с Python. В директории с проектом вам нужно создать два файла с расширением .py:

· bot.py

· variables.py

В первом будет код самого бота, а второй нужен для хранения различных переменных, вроде token и различных текстов сообщений.

Создание бота в Telegram

Хорошо, отвлечёмся ненадолго от редактора и разберёмся, что такое token, и, самое главное, как создать бота в самом Telegram. За создание ботов в Telegram отвечает… тоже бот)) Он называется BotFather, и доступен по ссылке @BotFather. Найдите его в ТГ и нажмите Start, вы получите список команд, их довольно много и сейчас со всеми разбираться мы не будем. Для того, чтобы создать нового бота, выберите /newbot, потом введите имя бота, и уникальную ссылку, по которой можно будет найти бота (она должна заканчиваться на bot). Примеры показан в мобильном приложении Telegram.

-2

Если всё сделано правильно, то вы увидите примерно такое сообщение (пока что не активируйте бота, не нажимайте /start):

-3

Создание основной логики бота

Token – это, говоря максимально просто, уникальный идентификатор, по которому вы можете получить доступ к боту и работать с ним. Он будет указан в сообщении, как на примере выше. Скопируйте его, откройте файл variables.py и создайте там новую переменную TOKEN (вместо Your bot token вставьте ваш личный токен):

-4

Сразу создайте переменную CHAT, в ней будет храниться id чата, который мы создадим чуть позже, а пока можете присвоить ей None или пустую строку.

Мы создадим бота, который будет пересылать сообщения в чат, а участники чата смогут отвечать на них с помощью reply, не нужно будет писать в ЛС и тд. Таких ботов часто используют администраторы Telegram каналов, и вы будете знать, как создать его самостоятельно))

Давайте сразу напишем сообщения, которые бот будет отправлять пользователям:

-5

Первое сообщение пользователь будет получать после того, как нажмёт на Start, второе сообщение получит, если введёт команду /help. А третье будет отправляться после того, как пользователь напишет и отправит своё сообщение.

Пора переходить к разработке самого бота, откройте файл bot.py и первым делом подключите библиотеку PyTelegramBotApi и файл variables.py следующими строками кода:

-6

Теперь нужно создать экземпляр класса TeleBot, который находится в telebot, это делается следующим образом:

-7

В качестве аргумента передадим токен бота (мы импортировали все переменные, созданные ранее, и теперь можем использовать их). Теперь с помощью переменной bot можно описать логику бота, для этого в библиотеке PyTelegramBotApi существует множество различных функций. Бот должен реагировать на сообщения и команды, в библиотеке для этого есть хандлеры (handlers), которые описывают, на какие сообщения и как должен отвечать бот. Обязательным является обработчик команды /start. Мы реализуем его следующим образом:

-8

Первая строчка – это handler, который будет срабатывать при команде /start (это указано в аргументе commands=[‘start’]). Затем идёт функция, которая будет вызвана. Она принимает только один аргумент, в котором будет информация о полученном сообщении, пользователе, который его отправил и тд. Сама функция очень простая: с помощью метода send_message мы отправляем приветственное сообщение пользователю, по его id.

Создадим обработчик для команды /help, он будет почти что таким, за исключением пары моментов:

-9

Мы создали два базовых обработчика, теперь самое время перейти к решению основной задачи – пересылке сообщений в приватный чат, а также возможности отвечать на них прямо из чата. Код очень простой, не будем принимать в расчёт разные пограничные ситуации.

-10

В обработчик передадим функцию, которая всегда возвращает True (это значит, что данный обработчик будет срабатывать на все сообщения, за исключением команд /start и /help). На всякий случай добавим обработку ошибок try – except, и, если будет какая-то ошибка, то с помощью print выведем её в консоль. В блоке try проверяем id чата, из которого получили сообщение, и, если это id специального, приватного чата, то пробуем переслать сообщение тому, кому мы пытаемся ответить (напомню, что это нужно делать с помощью reply). Используем тот же send_message: первый аргумент – id того, на чьё сообщение хотим ответить (id находится в свойстве reply_to_message.forward_from.id), второй аргумент – текст нашего сообщения.

Если id чата отличается от специального (для сбора сообщений), то пересылаем полученное сообщение в наш чат используя метод forward_message (первый аргумент – чат, куда нужно переслать сообщение, второй – id сообщения, которое нужно переслать).

Создание приватного чата

Пора создать специальный чат и узнать его id. В Telegram выберите New Group, придумайте название для чата и сделайте его приватным.

-11

В строке поиска участников введите ту уникальную ссылку, которую придумали для бота и добавьте его:

-12

Далее придумайте название для чата, и проверьте, что бы он был приватным:

-13

Подтвердите создание чата.

Продолжение разработки бота

Теперь узнаем id того чата, в который мы добавили бота. Само по себе добавление бота в чат – это событие, и его можно «поймать». Добавьте в самый низ файла bot.py следующую строку:

-14

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

Откройте терминал в той директории, в которой находиться исходный код бота (смотрите на путь в строке поиска) и введите команду python3 bot.py (может быть python bot.py). Если все успешно, то в консоле появиться id чата, это должно быть отрицательное число, у приватных чатов перед id всегда стоит «минус». Скопируйте это id и сохраните в переменной CHAT (можно как строку, а можно как число).

Небольшая ремарка: если вы получаете пустой массив и нет никаких обновлений, то попробуйте удалить бота из чата и добавить его снова, при этом вместо [0] укажите [1]. Если всё равно на этом этапе возникают проблемы, то переходите к следующему шагу.

Удалите строку для получения обновлений!

Осталось чуть-чуть, создадим функцию, для запуска бота. Мы не будем создавать сервер, и использовать web hooks, а ограничимся методом polling. Также мы добавим логирование, оно уже добавлено в библиотеку PyTelegramBotApi, им довольно просто пользоваться. В самый верх файла bot.py добавьте строку:

Import logging

Код функции будет следующий:

-15

Она принимает два аргумента: первым «включаем» или «выключаем» логирование, вторым выбираем «уровень» логирования.

Осталось вызвать функцию и проверить, работает ли бот.

-16

Теперь проверим бота, благодаря логингу мы сможем отловить ошибки, если они возникнут, а также получать всю информацию о обновлениях. Откройте бота и нажмите Start. Бот должен пристать приветственное сообщение (start_mess). Введите команду /help – бот должен пристать сообщение help_mess. Теперь самое главное, напишите что-нибудь, и это сообщение должно появиться в приватном чате. А теперь с помощью reply ответьте на него, и, если бот прислал сообщение, которое вы написали, то всё отлично!

Если что-то не работает, то посмотрите логи, проверьте, правильный ли id чата указан в переменной (его можно посмотреть в логах). Удалите бота из чата и добавьте его снова, и при этом посмотрите логи в консоле. Так вы сможете узнать id приватного чата.

Изучение языка Python и создание ботов - не самая тривиальная задача, и чтобы если вы хотите обучиться этому, то помощь наставника будет полезна. Присоединяйтесь вебинару, который пройдет в четверг (14.03.2019) перейдя по этой ссылке. Поторопитесь, времени осталось не так много.

Большое спасибо за прочтение! Пожалуйста, поставь лайк и подпишись на канал, чтобы не пропустить свежие статьи. Этим ты очень поможешь развитию блога!
Также рекомендую прочитать статью Что нужно делать, чтобы компьютер прослужил дольше