Создание простого бота Telegram с помощью Node.js и GrammY
4 февраля 2023 г.Это руководство проведет вас через процесс создания простого бота Telegram, который приветствует пользователей. Вы будете использовать язык JavaScript и Node.js для написания кода и фреймворка GrammY.
Почему GrammY?
Существует несколько альтернатив для разработки ботов Telegram на JavaScript, например node-telegram-bot-api или Telegraf. Первый — это больше просто библиотека, чем полноценный фреймворк. Второй старый и зрелый. Но GrammY относительно новый, современный и быстро набирающий популярность.
Кроме того, у него отличная документация и поддерживающее сообщество, которое может помочь. И последнее, но не менее важное: на HackerNoon нет ни одной статьи о GrammY, так что давайте это исправим!
Познакомьтесь с ботом Hello
Мы разработаем простого бота, который сможет приветствовать людей на разных языках. Это отличный пример, чтобы научиться обрабатывать текстовые сообщения и команды.
Создание бота и получение токена
Во-первых, вам нужно создать учетную запись бота. Для этого вам нужно использовать BotFather. Как говорится в описании
<цитата>BotFather — единственный бот, который управляет ими всеми. Используйте его для создания новых учетных записей ботов и управления существующими ботами.
Откройте бота, отправьте команду /newbot
, следуйте инструкциям, создайте бота и получите токен.
Настройка проекта
В качестве предварительного условия у вас должен быть установлен Node.js. Самый простой способ — загрузить его с официального сайта и установить.
Настройка обычная для проектов Node.js. Создайте пустую папку grammy-hello-bot
, откройте ее в Терминале и выполните команду npm init -y
. Затем установите пакет GrammY с помощью npm install grammy
. И создайте пустой файл index.js
. В итоге вы получите следующую структуру проекта.
Исходный код
Поместите следующий код в файл index.js
.
const { Bot } = require('grammy');
const bot = new Bot(''); // <-- put your bot token here (https://t.me/BotFather)
bot.command('help', (ctx) => {
ctx.reply(`
The bot could greet people in different languages.
The list of supported greetings:
- hello - English
- salut - French
- hola - Spanish
`)
});
bot.hears('salut', (ctx) => ctx.reply('salut'));
bot.hears('hello', (ctx) => ctx.reply('hello'));
bot.hears('hola', (ctx) => ctx.reply('hola'));
bot.on('message:text', (ctx) => ctx.reply(`Greeting "${ctx.update.message.text}" is not supported.`))
bot.start();
Давайте построчно. Во-первых, нам требуется модуль GrammY и создается экземпляр нашего бота. Здесь важно указать токен бота, который вы получили от BotFather.
const { Bot } = require('grammy');
const bot = new Bot(''); // <-- put your bot token here (https://t.me/BotFather)
Теперь зарегистрируйте промежуточное ПО для обработки команды /help
и отправки инструкций. Команды — это просто текстовые сообщения, начинающиеся с /
, такие как /start
, /help
и т. д. Вы можете придумать свои собственные команды, когда захотите. разработка бота. А промежуточное ПО — это просто функции, которые обрабатывают сообщения.
bot.command('help', (ctx) => {
ctx.reply(`
The bot could greet people in different languages.
The list of supported greetings:
- hello - English
- salut - French
- hola - Spanish
`)
});
Приведенный выше код в основном говорит: «Если вы получили сообщение с помощью команды /help
, просто вызовите эту функцию и прекратите обработку сообщения». Это означает, что если одно промежуточное ПО обработало сообщение, у другого не будет возможности это сделать. ПО промежуточного слоя вызываются одно за другим в том порядке, в котором они были зарегистрированы.
Затем с помощью метода hears
мы регистрируем промежуточное ПО, которое обрабатывает различные приветствия и отвечает ими пользователю.
bot.hears('salut', (ctx) => ctx.reply('salut'));
bot.hears('hello', (ctx) => ctx.reply('hello'));
bot.hears('hola', (ctx) => ctx.reply('hola'));
И затем промежуточное ПО, которое обрабатывает каждое текстовое сообщение, которое не было обработано промежуточным ПО, описанным выше. Это промежуточное ПО необходимо для случая, когда пользователь отправляет приветствие, которое не поддерживается ботом.
bot.on('message:text', (ctx) => ctx.reply(`Greeting "${ctx.update.message.text}" is not supported.`))
А потом мы запускаем нашего бота. После этого он начнет прослушивать сообщения от Telegram, используя механизм длительного опроса.
bot.start();
Пора проверить. Запустите бота командой node index.js
. Оставьте его работать. Откройте Telegram и отправьте что-нибудь боту.
Ссылки
- документация GrammY
- исходный код GrammY
- Группа GrammY в Telegram
- Боты: введение для разработчиков
- Документация по API Telegram Bot
Оригинал