Создаем Telegram-бота с помощью Node.js за 3 минуты

Начало работы

В первую очередь нужно зарегистрировать бота. Сделать это можно в приложении Telegram через BotFather.

Нажмите Start в чате и просмотрите доступные варианты. Вам понадобится выбрать название для бота и имя пользователя, а затем можно сохранять ключ.

После этого бот начнет отображаться в поиске Telegram  —  для этого просто введите @<bot-username>. Однако пока никаких действий выполнять он не будет.

Переходим к коду. Для работы с API Telegram воспользуемся пакетом NPM. Устанавливаем его с помощью команды yarn add node-telegram-bot-api.

Пакет готов к работе. Добавляем токен в переменную:

const TelegramBot = require('node-telegram-bot-api')

const token = 'YOUR_TELEGRAM_BOT_TOKEN'

const bot = new TelegramBot(token, { polling: true })

Теперь можно приступать к настройке бота. Ниже показан простой пример:

bot.onText(/\/echo (.+)/, (msg, match) => {

	const chatId = msg.chat.id
	const resp = match[1]

	bot.sendMessage(chatId, resp)
})

onText позволяет реагировать на сообщения, соответствующие регулярным выражениям. В этом варианте /\/echo (.+)/ означает, что вам нужно написать /echo, а следом за ним какой-либо текст.

Переменная chatIdпредставляет ID пользователя, который используется для отправки сообщения. Чтобы бот мог самостоятельно выполнять эту функцию, ID должны где-то храниться.

bot.sendMessage применятся для отправки сообщений. Строка respпосылается после команды echo. Бот отправляет обратно то, что он получает.

Запускаем node app.js, открываем чат с ботом и отправляем ему следующее.

Автоматическая отправка сообщений

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

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

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

let users = []

bot.onText(/\/register/, (msg, match) => {
  const chatId = msg.chat.id
  users.push(chatId)
  console.log('user registered')
  bot.sendMessage(chatId, 'Done.')
})

setInterval(function () {
  if (users.length > 0) {
    for (let i = 0; i < users.length; i++) {
      bot.sendMessage(users[i], 'Is this annoying?')
    }
  } else {
    console.log('no user registered')
  }
}, 1000)

После отправки /register боту мы начинаем получать много спама.

Реакция на все сообщения

bot.onText позволяет реагировать на сообщения, соответствующие регулярному выражению. Чтобы обрабатывать любой входящий текст, нужно воспользоваться bot.on("message")  —  он запускается каждый раз, когда кто-то отправляет сообщение.

Вот простой пример. Бот реагирует на каждое сообщение, но отвечает, только когда пользователь присылает текст “dog”.

bot.on('message', (msg) => {
  const chatId = msg.chat.id
  if (msg.text == 'dog') {
    bot.sendMessage(chatId, "You sent 'dog'")
  }
})

Отправка опросов

В Telegram можно обменивать не только стикерами, видео и текстом, но и опросами. Создавать их очень просто.

bot.sendPoll(chatId, 'Is Telegram great?', [‘Sure’, ‘Of course’])

Сразу после ID мы передаем вопрос, а затем идет массив возможных вариантов ответов. Вы можете добавить больше опций по желанию.

Telegram-бот, созданный с помощью Node.js, готов.

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Louis Petrik: How To Build a Telegram Bot With Node.js in Under 3 Minutes