[Node.JS] Пишем телеграм бота на node.js
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
С полным кодом можно ознакомиться по ссылке.
Сегодня мы будем разрабатывать телеграм бота на node js, который умеет выводить статистику зараженных коронавирусом по всем странам.
Прежде всего в контакт-лист телеграмма нужно добавить @botFather и написать ему команду /newBot. Далее задаем имя нашего бота и, если оно не занято, придумываем идентификатор бота, по которому его можно будет найти.
Вот и все, наш телеграмм бот готов и botfather поделился с нами API Token, благодаря которому мы сможем управлять ботом
Далее создадим новый проект, введем npm init и добавим файл bot.js в котором будет разрабатываться наш бот.
Затем я установлю telegraf — это один из популярных фреймворков для создания телеграмм бота. Смотрим документацию телеграфа, копируем в наш проект первоначальную настройку бота и быстро пройдемся по всем методам, которые указаны в примере:
const { Telegraf } = require('telegraf')
const bot = new Telegraf(process.env.BOT_TOKEN) //сюда помещается токен, который дал botFather
bot.start((ctx) => ctx.reply('Welcome')) //ответ бота на команду /start
bot.help((ctx) => ctx.reply('Send me a sticker')) //ответ бота на команду /help
bot.on('sticker', (ctx) => ctx.reply('')) //bot.on это обработчик введенного юзером сообщения, в данном случае он отслеживает стикер, можно использовать обработчик текста или голосового сообщения
bot.hears('hi', (ctx) => ctx.reply('Hey there')) // bot.hears это обработчик конкретного текста, данном случае это - "hi"
bot.launch() // запуск бота
Поместим api token в наш пример и запуcтим бота.
node bot
Проверим работу нашего бота:
Теперь разберемся что лежит в ctx
Для этого после объявления константы bot мы можем использовать log:
ctx.message.from.first_name
Перезапустим наш проект, введем команду /start и в консоли мы получим объект, в котором мы сможем посмотреть необходимые данные о юзере:
{
"update_id": 375631294,
"message": {
"message_id": 11,
"from": {
"id": 222222,
"is_bot": false,
"first_name": "Женя",
"username": "Evgenii",
"language_code": "ru"
},
"chat": {
"id": 386342082,
"first_name": "Женя",
"username": "Evgenii",
"type": "private"
},
"date": 1593015188,
"text": "/start",
"entities": [
{
"offset": 0,
"length": 6,
"type": "bot_command"
}
]
}
}
Нас будет интересовать объект message, из которого мы сможем достать имя юзера
ctx.message.from.first_name
И текст, который он отправил боту:
ctx.message.text
Мы знаем что лежит в ctx и теперь мы можем приступить к подключению стороннего api, с помощью которого мы сможем получать статистику по коронавирусу. Для этого я буду использовать библиотеку, которая называется covid19-api. Установим ее в наш проект и заимпортим в файл bot.js:
const covidApi = require('covid19-api')
Далее мы удалим наш обработчик стикеров и сделаем новый обработчик, который отслеживает текст и отправляет запрос, чтобы получить данные о коронавирусе, используя метод getReportsByCountries, который можно найти в документации covid19-api:
bot.on('text', async ctx => {
const covidData = await covidApi.getReportsByCountries(ctx.message.text) //сюда помещаем сообщение юзера
ctx.reply(covidData) //и выведем полученные данные
})
Давайте проверим какие данные мы получим. Для примера напишем нашему боту в телеграме: ‘russia’:
Отлично, мы получили целый ряд данных. Но если мы введем название страны с опечаткой наш бот прекратит работать и выдаст ошибку в консоль:
Чтобы это избежать нам нужно сделать обработчик ошибок и оповещать юзера, что такой страны не существует. Так же произведем небольшой рефакторинг кода и сделаем нашего бота более дружелюбным, изменим вывод сообщения, которое отправляется по команде /start, настроем корректное отображения данных о статистике и создадим в отдельном файле константу, которая будет содержать список всех стран на английском языке и будем выводить ее при использовании команды /help.
В итоге получаем код:
const { Telegraf } = require('telegraf');
const covidApi = require('covid19-api');
const COUNTRIES_LIST = require('./const')
const bot = new Telegraf('1170363720:AAFJ4ALJebB8Luh5kt1DStmYYqV3TparhKc')
bot.start( ctx => ctx.reply(`
Привет ${ctx.from.first_name}!
Узнай статистику по Коронавирусу.
Введи страну на английском языке и получи статистику.
Получить весь список стран можно по команде /help."
`))
bot.help( ctx => ctx.reply(COUNTRIES_LIST)) // список всех стран на английском языке можно взять в документации covid19-api
bot.on('text', async (ctx) => {
try {
const userText = ctx.message.text
const covidData = await covidApi.getReportsByCountries(userText)
const countryData = covidData[0][0]
const formatData = `
Страна: ${countryData.country},
Случаи: ${countryData.cases},
Смерти: ${countryData.deaths},
Выздоровело: ${countryData.recovered}`
ctx.reply(formatData)
} catch(e) {
ctx.reply('Такой страны не существует, для получения списка стран используй команду /help')
}
})
bot.launch()
Который срабатывает как нам нужно:
Поздравляю! Мы завершили настройку нашего телеграм бота, который выводит статистику заболевших коронавирусом.
===========
Источник:
habr.com
===========
Похожие новости:
- [Управление проектами, Читальный зал] Количество сертификатов PMI в России на первую половину 2020 года
- [Информационная безопасность, Исследования и прогнозы в IT, Статистика в IT] Подборка интересных инцидентов в области ИБ за июнь 2020
- [Data Mining, ВКонтакте API, Статистика в IT] Парадокс дней рождений на данных ВКонтакте
- [Big Data, Data Mining, Алгоритмы] Moneyball и Формула-1: модель прогнозирования результатов квалификаций
- [Разработка веб-сайтов, JavaScript, Node.JS] Управление зависимостями JavaScript
- [Google Chrome, JavaScript, Node.JS] Как обойти запрет доступа к страницам с помощью Chrome в headless-режиме (перевод)
- [GitHub, Информационная безопасность, Статистика в IT] Анализ 170 млн утекших паролей: интересные находки
- [JavaScript, Node.JS, ReactJS] Redux store vs React state
- [API, Node.JS, TypeScript] NodeJS Бот для Телеграм с обработкой математических выражений
- [Децентрализованные сети, JavaScript, Node.JS, Распределённые системы] Spreadable — вариант децентрализованной сети
Теги для поиска: #_node.js, #_node.js, #_telegrambot (телеграм-бот), #_statistika (статистика), #_telegram (телеграм), #_node.js
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:53
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
С полным кодом можно ознакомиться по ссылке. Сегодня мы будем разрабатывать телеграм бота на node js, который умеет выводить статистику зараженных коронавирусом по всем странам. Прежде всего в контакт-лист телеграмма нужно добавить @botFather и написать ему команду /newBot. Далее задаем имя нашего бота и, если оно не занято, придумываем идентификатор бота, по которому его можно будет найти. Вот и все, наш телеграмм бот готов и botfather поделился с нами API Token, благодаря которому мы сможем управлять ботом Далее создадим новый проект, введем npm init и добавим файл bot.js в котором будет разрабатываться наш бот. Затем я установлю telegraf — это один из популярных фреймворков для создания телеграмм бота. Смотрим документацию телеграфа, копируем в наш проект первоначальную настройку бота и быстро пройдемся по всем методам, которые указаны в примере: const { Telegraf } = require('telegraf')
const bot = new Telegraf(process.env.BOT_TOKEN) //сюда помещается токен, который дал botFather bot.start((ctx) => ctx.reply('Welcome')) //ответ бота на команду /start bot.help((ctx) => ctx.reply('Send me a sticker')) //ответ бота на команду /help bot.on('sticker', (ctx) => ctx.reply('')) //bot.on это обработчик введенного юзером сообщения, в данном случае он отслеживает стикер, можно использовать обработчик текста или голосового сообщения bot.hears('hi', (ctx) => ctx.reply('Hey there')) // bot.hears это обработчик конкретного текста, данном случае это - "hi" bot.launch() // запуск бота Поместим api token в наш пример и запуcтим бота. node bot
Проверим работу нашего бота: Теперь разберемся что лежит в ctx Для этого после объявления константы bot мы можем использовать log: ctx.message.from.first_name
Перезапустим наш проект, введем команду /start и в консоли мы получим объект, в котором мы сможем посмотреть необходимые данные о юзере: {
"update_id": 375631294, "message": { "message_id": 11, "from": { "id": 222222, "is_bot": false, "first_name": "Женя", "username": "Evgenii", "language_code": "ru" }, "chat": { "id": 386342082, "first_name": "Женя", "username": "Evgenii", "type": "private" }, "date": 1593015188, "text": "/start", "entities": [ { "offset": 0, "length": 6, "type": "bot_command" } ] } } Нас будет интересовать объект message, из которого мы сможем достать имя юзера ctx.message.from.first_name
И текст, который он отправил боту: ctx.message.text
Мы знаем что лежит в ctx и теперь мы можем приступить к подключению стороннего api, с помощью которого мы сможем получать статистику по коронавирусу. Для этого я буду использовать библиотеку, которая называется covid19-api. Установим ее в наш проект и заимпортим в файл bot.js: const covidApi = require('covid19-api')
Далее мы удалим наш обработчик стикеров и сделаем новый обработчик, который отслеживает текст и отправляет запрос, чтобы получить данные о коронавирусе, используя метод getReportsByCountries, который можно найти в документации covid19-api: bot.on('text', async ctx => {
const covidData = await covidApi.getReportsByCountries(ctx.message.text) //сюда помещаем сообщение юзера ctx.reply(covidData) //и выведем полученные данные }) Давайте проверим какие данные мы получим. Для примера напишем нашему боту в телеграме: ‘russia’: Отлично, мы получили целый ряд данных. Но если мы введем название страны с опечаткой наш бот прекратит работать и выдаст ошибку в консоль: Чтобы это избежать нам нужно сделать обработчик ошибок и оповещать юзера, что такой страны не существует. Так же произведем небольшой рефакторинг кода и сделаем нашего бота более дружелюбным, изменим вывод сообщения, которое отправляется по команде /start, настроем корректное отображения данных о статистике и создадим в отдельном файле константу, которая будет содержать список всех стран на английском языке и будем выводить ее при использовании команды /help. В итоге получаем код: const { Telegraf } = require('telegraf');
const covidApi = require('covid19-api'); const COUNTRIES_LIST = require('./const') const bot = new Telegraf('1170363720:AAFJ4ALJebB8Luh5kt1DStmYYqV3TparhKc') bot.start( ctx => ctx.reply(` Привет ${ctx.from.first_name}! Узнай статистику по Коронавирусу. Введи страну на английском языке и получи статистику. Получить весь список стран можно по команде /help." `)) bot.help( ctx => ctx.reply(COUNTRIES_LIST)) // список всех стран на английском языке можно взять в документации covid19-api bot.on('text', async (ctx) => { try { const userText = ctx.message.text const covidData = await covidApi.getReportsByCountries(userText) const countryData = covidData[0][0] const formatData = ` Страна: ${countryData.country}, Случаи: ${countryData.cases}, Смерти: ${countryData.deaths}, Выздоровело: ${countryData.recovered}` ctx.reply(formatData) } catch(e) { ctx.reply('Такой страны не существует, для получения списка стран используй команду /help') } }) bot.launch() Который срабатывает как нам нужно: Поздравляю! Мы завершили настройку нашего телеграм бота, который выводит статистику заболевших коронавирусом. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:53
Часовой пояс: UTC + 5