Telegram бот на JavaScript: с чего начать и как не запутаться
Вы когда-нибудь задумывались, как работают те самые умные боты в Telegram, которые присылают погоду, напоминают о дедлайнах или просто смешно шутят? А что, если я скажу вам, что написать собственного Telegram бота на JavaScript можно за один вечер? Да-да, даже если вы новичок. В этом гайде мы разберём процесс создания бота шаг за шагом, с реальными примерами кода и без лишней воды.
Почему именно JavaScript? Потому что это универсальный язык, который работает везде: на серверах, в браузере и даже на Raspberry Pi. А с библиотекой Telegraf создание Telegram бота превращается в настоящее удовольствие. Готовы? Поехали!
Что нам понадобится для создания Telegram бота на JS
Прежде чем писать код, давайте подготовим инструменты. Вам понадобится:
- Node.js (версия 14 или новее) — среда выполнения JavaScript на сервере.
- Текстовый редактор — Visual Studio Code, Sublime Text или любой другой.
- Аккаунт в Telegram — ну куда без него.
- Терминал — командная строка для установки пакетов.
Если Node.js ещё не установлен — скачайте его с официального сайта. Процесс установки тривиален: просто нажимайте "Далее".
Регистрация бота и получение токена
Первый шаг к созданию Telegram бота на JavaScript — получить API-токен. Это такой секретный ключ, который связывает ваш код с Telegram.
- Откройте Telegram и найдите бота @BotFather.
- Отправьте команду
/newbot. - Придумайте имя бота (например, MyFirstTestBot).
- Придумайте уникальный username, заканчивающийся на bot (например, my_first_test_2025_bot).
- Сохраните полученный токен — он будет выглядеть примерно так:
1234567890:ABCdefGHIjklMNOpqrsTUVwxyz.
Важно: токен — это ваш пароль. Никому его не показывайте и не загружайте на GitHub в открытом виде.
Установка библиотек и настройка проекта
Теперь перейдём к коду. Создайте папку для проекта, откройте её в терминале и выполните:
npm init -y
Эта команда создаст файл package.json. Теперь установим главную библиотеку — Telegraf:
npm install telegraf
Telegraf — это мощная и простая библиотека для работы с Telegram Bot API на JavaScript. Она поддерживает команды, клавиатуры, инлайн-режим и многое другое.
Для удобства установите также dotenv — он поможет хранить токен в отдельном файле:
npm install dotenv
Создайте файл .env в корне проекта и запишите туда ваш токен:
BOT_TOKEN=ваш_токен_здесь
Не забудьте добавить .env в .gitignore, если планируете выкладывать код.
Пишем первого Telegram бота на JavaScript
Создайте файл bot.js и откройте его в редакторе. Начнём с самого простого — бот, который отвечает на команду /start.
require('dotenv').config();
const { Telegraf } = require('telegraf');
const bot = new Telegraf(process.env.BOT_TOKEN);
bot.start((ctx) => {
ctx.reply('Привет! Я твой первый бот на JavaScript!');
});
bot.launch();
console.log('Бот запущен!');
Запустите бота командой:
node bot.js
Откройте вашего бота в Telegram и нажмите Start. Если всё сделано правильно, бот ответит вам приветствием. Поздравляю — вы только что создали работающего Telegram бота на JavaScript!
Обработка команд и текстовых сообщений
Бот, который только здоровается, — это скучно. Давайте добавим больше команд. Например, команду /help и обработку любого текста:
bot.help((ctx) => {
ctx.reply('Вот что я умею:\n/start — приветствие\n/help — эта справка');
});
bot.on('text', (ctx) => {
const userText = ctx.message.text;
ctx.reply(`Ты написал: "${userText}". А я отвечаю эхом!`);
});
Теперь бот не только отвечает на команды, но и повторяет всё, что вы ему пишете. Полезно? Не очень. Зато наглядно показывает, как работает обработка сообщений.
Добавляем клавиатуры и кнопки
Чтобы сделать бота интерактивнее, добавим клавиатуру. В Telegraf это делается очень просто:
const { Markup } = require('telegraf');
bot.command('menu', (ctx) => {
ctx.reply('Выбери опцию:', Markup.keyboard([
['Погода', 'Курс валют'],
['Анекдот', 'Помощь']
]).resize());
});
bot.hears('Погода', (ctx) => {
ctx.reply('Сегодня солнечно и +25°C!');
});
bot.hears('Курс валют', (ctx) => {
ctx.reply('1 USD = 90 RUB (примерно)');
});
bot.hears('Анекдот', (ctx) => {
ctx.reply('Шёл медведь по лесу, видит — машина горит. Сел в неё и сгорел. Вот такой анекдот.');
});
Клавиатура появляется внизу экрана и исчезает после нажатия кнопки. Обратите внимание на hears — он реагирует на точное совпадение текста.
Inline-клавиатуры: кнопки прямо в сообщении
Бывают ситуации, когда нужно, чтобы кнопки были привязаны к конкретному сообщению. Для этого используются инлайн-кнопки:
bot.command('inline', (ctx) => {
ctx.reply('Нажми на кнопку:', Markup.inlineKeyboard([
Markup.button.url('Перейти на PythonLib', 'https://pythonlib.ru'),
Markup.button.callback('Нажми меня', 'btn_press')
]));
});
bot.action('btn_press', (ctx) => {
ctx.answerCbQuery('Кнопка нажата!');
ctx.editMessageText('Ты нажал на кнопку! Молодец!');
});