Полное краткое руководство по grammY — JS-библиотеке для создания Telegram-ботов

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Привет! Меня зовут Арсений, я сеньор фронтенд-разработчик. В этой статье хочу рассказать про основные механизмы библиотеки grammY и разобрать стартовый набор файлов бота, обработку ошибок, виды обработчиков событий, контекст обновлений, работу с разными видами клавиатур и многое другое. И все это — на реальных примерах.

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

Используйте навигацию, если не хотите читать текст полностью:

→ Создаем бота в Telegram
→ Разворачиваем проект и пишем стартовый код
→ Обработка ошибок
→ Обработка данных от пользователя
→ Что такое Context (ctx)?
→ Клавиатуры
→ Деплой бота на сервер Selectel
→ Заключение

Создаем бота в Telegram


Первым делом нам необходимо создать своего бота:

  1. открываем Telegram и в поиске вбиваем BotFather;
  2. отправляем ему команду /newbot;
  3. получаем ответ, в котором нам предлагают выбрать для будущего бота имя и уникальный username;
  4. Получаем ключ — токен для управления ботом. Он имеет вид 1234567890:UIEaeSx_YsRXdD-C39M0t1PzcdnZZ4HgsKq (этот токен выдуман, советую не показывать и не публиковать свой нигде).

Готово, теперь можно разворачивать проект.



Разворачиваем проект и пишем стартовый код


Для разработки нам понадобятся node.js и npm. При установке node.js автоматически должен установиться и npm, но чтобы убедиться в этом, запустите команды:

node -v
npm -v

Если в ответ увидите числовые версии, значит, все установлено. Если видите ошибку, вам нужно установить node.js с официального сайта https://nodejs.org/. Выбирайте LTS-версию и следуйте инструкциям установщика.

Следующим шагом откроем в редакторе кода папку, в которой будем создавать проект (в данном случае это grammyjs-bot). Затем в терминале инициализируем его с помощью npm. Для этого в командной строке редактора вводим команду:

npm init -y

В нашей папке создался файл package.json с информацией об npm-пакете по умолчанию — его содержимое мы видим в консоли сразу после ввода команды:


Теперь нужно подключить три библиотеки. Сначала главную — Grammy JS (на самом деле, это фреймворк, как говорится в документации), затем две побочные. Библиотека dotenv нам понадобится, чтобы хранить токен как переменную окружения (env variable), nodemon, чтобы код бота автоматически перезапускался после внесения изменений. Все их можно установить одной командой:

npm i grammy dotenv nodemon

После этого в папке появится новый файл package-lock.json с подробным описанием библиотек и зависимостей, а также папка node_modules с самими зависимостями. Кроме того, в package.json будут добавлены версии двух наших библиотек в поле dependencies.

Осталось создать файл index.js, в котором будем писать код бота, и файл .env, в котором будет храниться токен. Если решите использовать другое название, на забудьте также внести его в package.json, в поле main.

Код проекта


Итак, структура проекта готова, переходим к написанию кода. Для этого создадим переменную окружения в отдельном файле .env:

// Обратите внимание, что кавычек нигде нет
BOT_API_KEY=1234567890:UIEaeSx_YsRXdD-C39M0t1PzcdnZZ4HgsKq

Сразу после знака «=» укажите свой уникальный ключ от BotFather (без кавычек).

Теперь открываем index.js (в нем будет наш основной код) и вставляем строки:

// Подключаем библиотеку dotenv
require('dotenv').config();
// Обращаемся к библиотеке grammy и импортируем из него класс Bot const { Bot } = require('grammy');
// Создаем своего бота на основе импортированного класса, передавая
// в качестве аргумента ссылку на полученный ранее токен (чуть дальше мы
// его создадим)
const bot = new Bot (process.env.BOT_API_KEY);

// Запускаем созданного бота
bot.start();

process.env.BOT_API_KEY — это и есть получение переменной окружения BOT_API_KEY.

Бота уже можно запустить, однако он никак не будет реагировать на сообщения пользователя. Чтобы это исправить, добавим реакции на команду /start и любое другое сообщение:

require('dotenv').config();
const { Bot } = require('grammy');
const bot = new Bot (process.env.BOT_API_KEY);
bot.command('start', async (ctx) => {
 await ctx.reply(
  'Привет! Я - Бот 						
Источник: https://habr.com/ru/companies/selectel/articles/799761/


Интересные статьи

Интересные статьи

В компании ИВИ, ведущем онлайн-кинотеатре, наша команда разработчиков занимается созданием приложения для платформы Android. Недавно мы успешно выпустили версию для Android TV, используя инновационный...
Жизненно важно отслеживать проблемы с производительностью Redis. Для этого инструмента характерна низкая задержка отклика при обслуживании многочисленных запросов. Есть определенные ключевые метри...
В данной статье мы рассмотрим процесс создания формы на базе JavaScript и включения ее в экран создания запроса в JIRA.Это может быть полезно, если вы хотите получить большую гибкость, чем предоставля...
Давайте признаем: современный Web стал очень сложным. Веб-дизайнеры все меньше думают о пользователях с узким каналом, которые вынуждены ждать, пока загрузится очередная огромная картинка. Иногда нам ...
Всем привет, последние 2-3 года у меня было интересное хобби, интересное для меня - предоставление аналитических услуг компаниям в Канаде и США. В этой статья я хочу поде...