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

Боты разных мессенджеров являются неотъемлемой частью этих самых мессенджеров. С их помощью можно модерировать открытые беседы и чаты, принимать сообщения или донаты от подписчиков или наоборот, продавать различные товары и услуги. Однако применение ботов не ограничивается только вышеперечисленными действиями. Их потенциал практически безграничен и зависит только от вашей фантазии. Например, вы можете использовать бота для отправки вам в личные сообщения новых вакансий на сайте трудоустройства, что даст вам преимущество перед конкурентами.

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

Для написания телеграм-ботов может использоваться любой язык программирования, даже javascript, однако мы будем работать на python, так как визуально код на нем проще, и объяснять его для людей, не знающих пайтон так же гораздо проще.

Общие приготовления

Для того, чтобы понять, как работать с телеграм ботами, следует прочитать официальные документыпо API от самого телеграма.

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

После этого бот выдаст вам API-токен для взаимодействия с ботом. Api-token представляет собой строку вида “цифры:буквы” и является ключем доступа к боту. Никому его не показывайте, иначе вашим ботом смогут пользоваться другие люди и его могут заблокировать за их действия.

Python приготовления

Теперь надо выполнить действия, отличающиеся на разных операционных системах. Я представлю две инструкци для windows и linux ubuntu.

Linux

1) Обновите систему:

sudo apt-get update

2) Установите pyhton и пакетный менеджер pip:

sudo apt install python python3 
sudo apt install python-pip python3-pip

3) Установите библиотеку для работы с telegram-API:

pip install PyTelegramBotAPI

4) Если третья предыдущая команда вылилась в ошибку выполните эту команду:

pip install telebot

Windows

1) Установите python с официального сайта

Обязательно поставьте галочку в нижнем пункте, далее выберите “install now”.

2) Откройте командную строку (Win + r затем написать в окне cmd.exe и нажать enter)

3) Пропишите

pip install PyTelegramBotAPI

4) Если третья предыдущая команда вылилась в ошибку выполните 

pip install telebot

Мы будем использовать библиотеку под названием telebot для написания наших ботов. Она маленькая и быстродейственная. Прямой конкурент этой библиотеки – aiogram, использующийся для больших и серьезных проектов, так как является более стабильной библиоткеой. Но для комфортного написания кода на этой библиотеке понадобится многофункциональная среда разработки наподобие pycharm, так как боты, написанные на aiogram состоят из большого количества файлов и подпапок, каждые из которых отвечают за свою функцию и необходимы для нормального функционирования всего бота. В будущих статьях можно разобрать и эту библиотеку однако сейчас стоит сосредоточится на телеботе, который позволяет создавать ботов из одного файла.

Первый бот

Для начала давайте создадим бота, который отправляет нам наше же сообщение. Это позволит вам ознакомиться с некоторыми функциями телебота, а также с общей структурой кода на питоне.

import telebot
 bot=telebot.TeleBot(“token”, parse_mode=None)
 @bot.message_handler(func=lambda m: True)
 def echo_all(message):
 bot.reply_to(message, message.text)
 bot.polling()

Как видите, бот вышел довольно компактным и писать его оказалось совсем не страшно. Всего-то 6 строчек кода!

А теперь разберем каждую строчку по порядку:

import telebot – я включила в мой файл библиотеку телебота, чтобы команды из этого модуля корректно отрабатывали в коде.

bot=telebot.TeleBot(“token”, parse_mode=None) — я присвоила переменной с именем bot “главную роль” в этом коде, через нее будут производиться команды для бота. Для этого я предоставила переменной апи токен (вместо слова token надо вставить токен, который вам выдал botfather, но кавычки нужно оставить), а также выключила режим парсинга данных в боте. Все эти команды производились через функцию TeleBot библиотеки telebot. Все команды чувствительны к регистру символов, поэтому будьте внимательны.

@bot.message_handler(func=lambda m: True) – я вызвала декоратор, который реагирует на определенные сообщения (поэтому message_handler), проходящие через фильтр в скобках. В скобках использована лямбда-функция, которая всегда истинна, то есть бот будет реагировать именно этим декоратором на любые сообщения. Под декоратором должна располагаться пользовательская функция, реагирующая на новое сообщение через декоратор.

def echo_all(message): — я создала свою функцию с именем echo_all (имя может быть любое), которая принимает сообщение пользователя в качестве аргумента.

bot.reply_to(message, message.text) – в моей функции я “приказываю” боту ответить на сообщение пользователя текстом этого же сообщения. В скобках команды ответа reply_to на первом месте может стоять только сообщение, переданное, как аргумент в скобках функции, а на втором месте может стоять и любой другой текст, однако тогда он должен быть заключен в кавычки.

bot.polling() — этой командой надо заканчивать каждого бота, если вы пользуетесь библиотекой телебота. Она подтверждает, что бот будет связываться с серверами телеграма для постоянного отслеживания новых сообщений.

Если же в самом начале кода вы вместо имени bot использовали что-то другое, то во всех командах, что я написал, имя bot надо заменить на ваше.

Запуск

После написания бота, надо сохранить весь код в файл с окончанием “.py”. Такой файл можно запускать и в официальном интерпретаторе питона “python idle” и в “pycharm”, однако я советую запускать бота через командную строку во избежании различных казусов. Зайдите в командную строку своей операционной системы и пропишите “pyhon путь/до/файла.py” если вы на unix-подобной системе, то путь до файла отделен прямым слешем “/”, если вы на windows – то обратным “\”.

Как вы можете видеть, послед запуска бота нет никаких сообщений. Теперь зайдите в телеграм и откройте своего бота. Найти его можно по ссылке, которую вы указали в botfather при регистрации бота.

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

Если вы выключите компьютер или у вас оборвется интернет-соединение, процесс выдаст ошибку и остановится, запускать его снова придется вручную. Поэтому ботов обычно разворачивают на серверах, которые арендовывают в интернете или ставят у себя дома или в офисе. Чем больше популярность вашего бота, тем большей мощностью должен обладать ваш сервер. Советую также иметь запасной сервер на случай DdoS`а основного. Вдобавок можно написать скрипт, который будет писать пользователям, что бот не работает и находится на техническом обслуживании. Такое своевременное уведомление пользователей поможет сохранить аудиторию, а значит и репутацию сервиса. 

Сервер

Сервер можно подобрать на специализированном сервисе vps.today, благодаря гибкой настройке подбора вы сможете подобрать оптимальное для себя решение. Это не проплаченная реклама, это совет из собственного опыта. Эдакий е-каталог из мира серверов. Подключиться к серверу можно с помощью утилиты putty, которая есть как на windows, так и на linux. Затем скопируйте файл с программой на сервер, и запустите через командную строку.

В следующей статье мы разберем более сложные алгоритмы бота и напишем несколько новых скриптов, раскрывающих полный функционал как модуля telebot, так и всего telegram-api в целом.

Второй урок доступен по ссылке →