Добавить в корзинуПозвонить
Найти в Дзене
Bugs, hex & source control!

Пишем простого бота для Telegram на Go. Часть 1

Написание бота для Telegram отличный способ попрактиковаться в изучении Go. Преимущества создания программ под Telegram-бота состоят в том, что для получения результата не нужно отдельно создавать frontend-часть, достаточно реализовать необходимую логику на backend-части и добавить взаимодействие с ботом.
Итак, начинаем процесс создания нового бота и через несколько часов можно будет насладиться результатом
Шаг 1. Регистрация Telegram бота Для регистрации бота необходимо в поиске Telegram найти @BotFather и ввести команду /newbot. После этого будет предложено выбрать имя бота и уникальное имя пользователя для бота. Имя пользователя при этом должно заканчиваться на bot. В результате, будет создан новый пользователь по указанному имени username и token, который понадобится для работы с API Telegram Шаг 2. Постановка задачи для бота Существуют 2 основных сценария использования бота - взаимодействие с ботом с помощью приватных сообщений и добавление бота в чат группы. Какие сооб
Оглавление


Простой чат-бот для Telegram для Go  
Простой чат-бот для Telegram для Go  

Написание бота для Telegram отличный способ попрактиковаться в изучении Go.

Преимущества создания программ под Telegram-бота состоят в том, что для получения результата не нужно отдельно создавать frontend-часть, достаточно реализовать необходимую логику на backend-части и добавить взаимодействие с ботом.
Итак, начинаем процесс создания нового бота и через несколько часов можно будет насладиться результатом

Шаг 1. Регистрация Telegram бота

Для регистрации бота необходимо в поиске Telegram найти @BotFather и ввести команду /newbot.

После этого будет предложено выбрать имя бота и уникальное имя пользователя для бота. Имя пользователя при этом должно заканчиваться на bot.

В результате, будет создан новый пользователь по указанному имени username и token, который понадобится для работы с API Telegram

Процесс создания бота
Процесс создания бота

Шаг 2. Постановка задачи для бота

Существуют 2 основных сценария использования бота - взаимодействие с ботом с помощью приватных сообщений и добавление бота в чат группы.

Какие сообщения при этом будет получать бот для анализа?

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

  • все сервисные сообщения
  • все сообщения из личных каналов сообщений с пользователем
  • все сообщения из каналов, в которых состоит бот

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

Боты с включенным режимом конфиденциальности получат:

  • Команды, явно предназначенные для них (например, /command@имя_бота).
  • Общие команды от пользователей (например, /start), если бот был последним ботом, отправившиющим сообщение группе.
  • Сообщения, отправленные через этого бота.
  • Ответы на любые сообщения, предназначенные для этого бота.

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

Шаг 3. Пишем код на Go

Сначала установим библиотеку для работы с API Telegram

go get github.com/go-telegram-bot-api/telegram-bot-api/v5

Далее перейдем к реализации процесса программирования бота.

Простейший бот представляет собой сервис, в данном случае написанный на языке Go, который использует long-polling запросы для получения информации об обновлении данных.

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

Итак, наш бот почти готов. Осталось вставить ключ API и реализовать логику по формированию ответа пользователю

Учим бот анализировать сообщение и формировать ответ

Возвращаемся к постановки первоначальной задачи. Итак нам нужно анализировать текст сообщения от пользователя и формировать ответ.

При этом возможны сценарии, когда бот формирует ответ в виде публичного ответа пользователю в группе или же отправляет сообщение пользователю в личном сообщении

В случае публичного ответа (см. пример выше) мы должны в качестве в методе NewMessage указать идентификатор канала, из которого мы получили сообщение (берем из поля message.Chat.ID) и заполнить поле ReplyToMessageID сообщения, указав ID сообщения, на которое нужно ответить (берем из поля Message.MessageID)

Пример ответов бота Anfiska в чате группы
Пример ответов бота Anfiska в чате группы

В случае приватного ответа, в качестве идентификатора чата мы должны указать ID пользователя, которому мы собираемся отправить сообщение (берем из поля Message.From.ID). В этом случае поле ReplyToMessageID сообщения проставлять не нужно.

Код отправки сообщения будет выглядеть так:

Запрос помоши у бота в общем чате
Запрос помоши у бота в общем чате
Бот отвечает в личном сообщении
Бот отвечает в личном сообщении

Защищаем код API telegram бота

В примере выше мы указываем код API в явном виде.

Добавим возможность загрузки кода из  *.env файла, для того чтобы код нельзя было получить при просмотре исходников кода.

Для этого используем модуль godotenv:
go get github.com/joho/godotenv

С помощью функции Load загружаем значения переменных из *.env файла в переменные окружения системы

Итак, бот готов к работе!

Исходники готового бота можно найти по ссылке: https://github.com/kkhitsko/go-simple-telegram-bot

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

Stay tuned!