Русский
Русский
English
Статистика
Реклама

Пишем телеграм бота на node.js

С полным кодом можно ознакомиться по ссылке.

Сегодня мы будем разрабатывать телеграм бота на node js, который умеет выводить статистику зараженных коронавирусом по всем странам.

Прежде всего в контакт-лист телеграмма нужно добавить @botFather и написать ему команду /newBot. Далее задаем имя нашего бота и, если оно не занято, придумываем идентификатор бота, по которому его можно будет найти.


Вот и все, наш телеграмм бот готов и botfather поделился с нами API Token, благодаря которому мы сможем управлять ботом

Далее создадим новый проект, введем npm init и добавим файл bot.js в котором будет разрабатываться наш бот.

Затем я установлю telegraf это один из популярных фреймворков для создания телеграмм бота. Смотрим документацию телеграфа, копируем в наш проект первоначальную настройку бота и быстро пройдемся по всем методам, которые указаны в примере:

const { Telegraf } = require('telegraf')const bot = new Telegraf(process.env.BOT_TOKEN) //сюда помещается токен, который дал botFatherbot.start((ctx) => ctx.reply('Welcome')) //ответ бота на команду /startbot.help((ctx) => ctx.reply('Send me a sticker')) //ответ бота на команду /helpbot.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-apibot.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
К списку статей
Опубликовано: 13.07.2020 18:21:24
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Node.js

Телеграм-бот

Статистика

Телеграм

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru