DEV Community

Stanislav Karol
Stanislav Karol

Posted on • Edited 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 (3)

Collapse
 
mashaaverina profile image
Mariya

Телеграм боты это, безусловно, важно. Но вот что меня больше интересует, так это можно ли создать аналог казино для тг. У меня есть статья по теме игровые автоматы с выводом, но мне любопытно, можно ли перенести их в качестве игр для тг, и как в самой игре реализовать возможности ввода/вывода средств. Вот это, мне кажется, тема достаточно интересная и перспективная.

Collapse
 
demiz99 profile image
Akeeelow

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

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

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

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

Collapse
 
slkarol profile image
Stanislav Karol

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

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

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