Пишем Телеграм-бота на JavaScript

Сегодня будем делать бота — это отличное (и быстрое) занятие, которое развивает уставший мозг и даёт возможность отправить друзьям ссылочку со словами «Смотри, это моё».

Для работы понадобятся

  • Редактор кода, чтобы писать код. Если не знаете, какой выбрать — мы уже рассказывали. Если не умеете писать код, то вот инструкция, как его написать и запустить.
  • Node.js любой версии, выше 0.12. Нужно, чтобы библиотека для ботов заработала. Как установить Node.js.
  • Консоль. Или встроенный в систему вариант, или какой-нибудь другой.
  • VPN. Возможно но не факт, потому что Телеграм работает не везде.

Шаг 1. Регистрируем бота

Находим в поиске Телеграма бота @botFather — это главный инструмент для создания ботов. Набираем в нём /newbot.

Придумываем название и имя боту. Название — то, как он будет подписан в списке контактов. Имя — строка, по которой его можно будет найти. Обратите внимание, что имя должно оканчиваться на bot. В ответ мы получим токен — длинную последовательность символов, которая пригодится нам в будущем. Мы назвали бота echoKeksBot, но вам придётся придумать другое название, потому что это уже занято. Извините.

Шаг 2. Создаём проект

Создаем папку в любом месте и открываем её в консоли. Там пишем npm init -y — эта команда создаст файл package.json, который выглядит примерно так:

Теперь установим node-telegram-bot-api — это библиотека для создания телеграм-ботов на Node.js. Введём команду:

npm install --save --save-exact node-telegram-bot-api

Создадим пустой файл index.js и напишем там самого простого бота, который будет отвечать на любое сообщение:

bot.on('message', (msg) => { const chatId = msg.chat.id; bot.sendMessage(chatId, 'Привет, Друг!'); });

Шаг 3. Запускаем бота

Тут всё просто, в консоли пишем node index.js, заходим к нашему боту в телеграм и начинаем с ним общаться. Не закрывайте консоль — бот работает только на вашем компьютере, и без консоли он не станет отвечать.

Как видим, бот успешно отвечает. Но бот-повторяха — не интересно, усложним задачу. Пусть бот присылает нам картинку.

Шаг 4. Отсылаем картинку

Добавим картинку с Кексом в папку с проектом. Для отправки изображения используем метод .sendPhoto() — передадим в него id чата и путь до картинки. Получится такой код:

bot.on('message', (msg) => { const chatId = msg.chat.id; bot.sendPhoto(chatId, 'keks.png'); });

Запускаем бота, проверяем, работает:

Шаг 5. Добавим клавиатуру. И пёсика

Добавим фотографию милого пёсика в корень проекта. Теперь там две картинки.

Создадим конфигурацию для клавиатуры в боте, пусть у нас будет 3 кнопки: «Хочу кота», «Хочу пёсика» и «Пойти учиться».

// Конфиг клавиатуры const keyboard = [ [ { text: 'Хочу кота', // текст на кнопке callback_data: 'moreKeks' // данные для обработчика событий } ], [ { text: 'Хочу песика', callback_data: 'morePes' } ], [ { text: 'Хочу проходить курсы', url: 'https://htmlacademy.ru/courses' //внешняя ссылка } ] ];

На нажатия первых двух кнопок мы ответим соответствующим сообщением в Телеграме, а последняя уведёт на внешний ресурс.

Чтобы отличить первые 2 кнопки, воспользуемся полем callback_data, где будем передавать тип кнопки. Для обработки нажатий добавим слушателя на событие callback_query, и в зависимости от значения query.data отправим нужную картинку к пользователю.

// Обработчик нажатий на клавиатуру bot.on('callback_query', (query) => { const chatId = query.message.chat.id; let img = ''; if (query.data === 'moreKeks') { // если кот img = 'keks.png'; } if (query.data === 'morePes') { // если пёс img = 'pes.png'; } if (img) { bot.sendPhoto(chatId, img, { // прикрутим клаву reply_markup: { inline_keyboard: keyboard } }); } else { bot.sendMessage(chatId, 'Непонятно, давай попробуем ещё раз?', { // прикрутим клаву reply_markup: { inline_keyboard: keyboard } }); } });

Не забудем про возможные ошибки и предложим пользователю попробовать снова, если он ввёл что-то не то. Перезапустим бота и проверим — всё работает. Главное — не закрывать консоль, иначе бот перестанет отвечать.

Полный файл с кодом: index.js.

В следующей части как раз разберёмся, как загрузить и запустить бота на сервере, чтобы он работал, даже если ваш компьютер выключен.

0
6 комментариев
Написать комментарий...
Danil Borchevkin

Небольшая опечатка в тексте и несоответствие картинки.
"Пойти учиться" и "хочу проходить курсы" - все-таки разные вещи=))

—--

В целом, для начинающих - отличный гайд.

Ответить
Развернуть ветку
Ann Partovi

Не работает! 

Ответить
Развернуть ветку
Ann Partovi

в чем я не прав?

Ответить
Развернуть ветку
Кирилл Кочетков

const TelegramBot = require('node-telegram-bot-api');
const token = 'твой: токен';

const bot = new TelegramBot(token, {polling: true});

Ответить
Развернуть ветку
Ann Partovi

Ух ты, спасибо

Ответить
Развернуть ветку
ELDENHARD

Здравствуйте, как добавить к картинкам текст?

Ответить
Развернуть ветку
3 комментария
Раскрывать всегда