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



Книга Создаем 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, готов.


597   0  

Comments

    Ничего не найдено.