Привет! Меня зовут Арсений, я сеньор фронтенд-разработчик. В этой статье хочу рассказать про основные механизмы библиотеки grammY и разобрать стартовый набор файлов бота, обработку ошибок, виды обработчиков событий, контекст обновлений, работу с разными видами клавиатур и многое другое. И все это — на реальных примерах.
В конце покажу, как задеплоить готового бота на сервере, чтобы он работал автономно и был доступен в любое время. Поехали!
Используйте навигацию, если не хотите читать текст полностью:
→ Создаем бота в Telegram
→ Разворачиваем проект и пишем стартовый код
→ Обработка ошибок
→ Обработка данных от пользователя
→ Что такое Context (ctx)?
→ Клавиатуры
→ Деплой бота на сервер Selectel
→ Заключение
Создаем бота в Telegram
Первым делом нам необходимо создать своего бота:
- открываем Telegram и в поиске вбиваем BotFather;
- отправляем ему команду /newbot;
- получаем ответ, в котором нам предлагают выбрать для будущего бота имя и уникальный username;
- Получаем ключ — токен для управления ботом. Он имеет вид 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(
'Привет! Я - Бот
Поделиться ссылкой:
Интересные статьи
Интересные статьи
В компании ИВИ, ведущем онлайн-кинотеатре, наша команда разработчиков занимается созданием приложения для платформы Android. Недавно мы успешно выпустили версию для Android TV, используя инновационный...
Жизненно важно отслеживать проблемы с производительностью Redis. Для этого инструмента характерна низкая задержка отклика при обслуживании многочисленных запросов. Есть определенные ключевые метри...
В данной статье мы рассмотрим процесс создания формы на базе JavaScript и включения ее в экран создания запроса в JIRA.Это может быть полезно, если вы хотите получить большую гибкость, чем предоставля...
Давайте признаем: современный Web стал очень сложным. Веб-дизайнеры все меньше думают о пользователях с узким каналом, которые вынуждены ждать, пока загрузится очередная огромная картинка. Иногда нам ...
Всем привет, последние 2-3 года у меня было интересное хобби, интересное для меня - предоставление аналитических услуг компаниям в Канаде и США. В этой статья я хочу поде...