Начало работы
В первую очередь нужно зарегистрировать бота. Сделать это можно в приложении 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, готов.
Читайте также:
- Найти и обезвредить: утечки памяти в Node.js
- Создание многопользовательской игры с использованием Socket.io при помощи NodeJS и React
- Что такое Deno и заменит ли он NodeJS?
Читайте нас в Telegram, VK и Дзен
Перевод статьи Louis Petrik: How To Build a Telegram Bot With Node.js in Under 3 Minutes