DEV Community

Stanislav Karol
Stanislav Karol

Posted on • Updated on

Телеграм-бот на NodeJS. 1. Создать бота.

В серии заметок я расскажу как написал телеграмм-бота на Node.JS и развернул его на амазоне.
Вообще считается что я фронт-энд разработчик, поэтому возможно те слова, что я буду здесь писать, не смогут 100% ответить на ваши вопросы, а возможно даже будут замечания по тому, как реализованы блоки кода. Ну, если что- всегда доступны комментарии, пишите, обсудим.

Итак, первый шаг по созданию бота простой- нужно собственно создать этот самый бот. Делается это в телеграмм-боте @botfather. После того, как Вы добавите его себе в контакты, дайте ему команду /help

Дайте имя боту — клиенты увидят это имя при общении с ботом. И никнейм бота — по нему можно будет найти бота в Telegram. Никнейм должен быть уникальным, не повторять существующие в базе и заканчиваться на слово «bot»

CreateBot

После того как вы выберите подходящее имя бот будет создан. Вы получите сообщение со ссылкой на бота t.me/<никнейм_бота>, рекомендации по настройке аватарки, описание бота и список команд для настройки бота.

Result

Поздравляю Вас с созданием своего телеграмм-бота и себя за то, что я смог Вас научить такому действию.

На этом в принципе можно было остановиться, но нет- какая же это работа, а где заявленный NodeJS? - Давайте приступим к оживлению бота.

Создание логики работы бота на NodeJS

Перед этим нам будет необходимо сделать кое-какие приготовления, а именно: Создать проект и установить пакет telegraf:

npm init -y
npm i telegraf --save
Enter fullscreen mode Exit fullscreen mode

Теперь осталось дело за малым: написать его действия.
Создайте JS-файл bot.js такого содержания:

const { Telegraf } = require("telegraf");

// Создать бота с полученным ключом
const bot = new Telegraf("1496911419:AAGt2IUR7zC2-5 1VTLj4pLzt3i7l664-P0x0");

// Обработчик начала диалога с ботом
bot.start((ctx) =>
  ctx.reply(
    `Приветствую, ${
       ctx.from.first_name ? ctx.from.first_name : "хороший человек"
    }! Набери /help и увидишь, что я могу.`
  )
);

// Обработчик команды /help
bot.help((ctx) => ctx.reply("Справка в процессе"));

// Обработчик команды /whoami
bot.command("whoami", (ctx) => {
  const { id, username, first_name, last_name } = ctx.from;
  return ctx.replyWithMarkdown(`Кто ты в телеграмме:
*id* : ${id}
*username* : ${username}
*Имя* : ${first_name}
*Фамилия* : ${last_name}
*chatId* : ${ctx.chat.id}`);
});

// Обработчик простого текста
bot.on("text", (ctx) => {
  return ctx.reply(ctx.message.text);
});

// Запуск бота
bot.launch();
Enter fullscreen mode Exit fullscreen mode

Что у нас тут написано:

const bot = new Telegraf("1496911419:AAGt2IUR7zC2-1VTLj4pLzt3i7l664-P0x0");
Enter fullscreen mode Exit fullscreen mode

Здесь тот самый ключ, который нам поведал BotFather . А т.к. этот ключ не только полезен, но и весьма важен, то его я бы скрыл от тех, кто будет смотреть наш код. Например- на гитхабе. Поэтому давайте напишем эту строку по-другому:

const bot = new Telegraf(process.env.TELEGRAM_TOKEN_EDU);
Enter fullscreen mode Exit fullscreen mode

А сам код запишем в файле .env :

TELEGRAM_TOKEN_EDU="1496911419:AAGt2IUR7zC2-1VTLj4pLzt3i7l664-P0x0"
Enter fullscreen mode Exit fullscreen mode

Для того, чтобы сработал этот код нужно установить пакет dotenv и в начале файла bot.js написать: require("dotenv").config();

Дальше по коду можно будет из комментариев понять, что делают команды. Запустить наш скрипт можно командой node bot.js и в телеграмм-чате с ботом у Вас должно быть примерно следующее:
Result

Сейчас самое время поэкспериментировать - Добавить свои команды; изменить bot.on("text", ... например чтобы бот не просто отображал вводимый текст, а как-то его менял- придумывал рифму или менял порядок букв.
В следующей части научим бот показывать картинку.

Top comments (2)

Collapse
 
demiz99 profile image
Akeeelow

А сам код запишем в файле .env

Расширение файла указал а дальше что? Название файла то какое? Не понятно.

Для того, чтобы сработал этот код нужно установить пакет dotenv и с начале файла bot.js написать: require("dotenv").config();

На скриншотах не показал. Не понятно.

Collapse
 
slkarol profile image
Stanislav Karol

Название файла я уже написал: .env

На скриншотах не показал. Не понятно.

Я не думал, что этот момент "в начале файла написать ..." вызовет трудности.