Первый телеграм-бот на Node.js

Первый телеграм-бот на Node.js

Инженерия себя

Твой первый бот

Статья поможет тебе создать своего первого телеграм-бота.

Время создания - 1-2 часа (и может еще пару часов на решение возникших в процессе проблем).

Первый бот будет очень простым и будет запускаться на твоем компьютере или смартфоне (будет работать, пока запущена программа на твоем устройстве). Это подходит для обучения, а в будущем ты сможешь размещать ботов на сервере, чтобы они работали стабильно и непрерывно.

Ты увидишь программный код бота и сможешь в нем покопаться. По мере того, как ты захочешь усложнять бота - ты будешь изучать что-то из программирования (и становиться программистом :)

Бот будет написан на языке JavaScript (потому что я делаю ботов на нем и других языков не знаю). Это один из самых популярных языков в данный момент (наверное, после Python). Node.js расшифровывается как Node JavaScript и является платформой для создания серверных приложений на JavaScript.

Сам я не являюсь профессиональным программистом, поэтому инструкция может быть неоптимальной и даже содержать ошибки.

Вопросы и сложности, возникающие в процессе, можно писать в группе: ссылка на группу

Что тебе понадобится:

(PS: Запуск бота с Android смартфона - и так тоже можно)

  1. Компьютер с Windows 10 или новее / Mac (для смартфонов отдельные инструкции), подключенный к интернету (возможен и запуск на более старом компьютере, но может понадобиться немного или много помучиться дополнительно). Теперь можно запустить и со смартфона, см ссылку выше.
  2. Желание сделать своего бота
  3. Готовность преодолевать трудности и разбираться в новом, продираясь через периоды отчаяния и непонимания :)
  4. Несколько часов (а может и дней) времени.

Начнем?

Редактор для программирования - VS Code

Один из лучших редакторов для программирования - VS Code. Тебе нужно скачать и установить программу на свой ПК: https://code.visualstudio.com/download

Движок Node.js

Это движок node.js для запуска ботов прямо на компе. Скачай и установи эту программу: https://nodejs.org/ru/download/

Подготовка и настройка

Создание папки

Создай на диске C:\ папку с коротким латинским названием - там будет располагаться твой код. Пусть папка называется bots, итоговый путь к ней будет C:\bots

Запусти Node.js command prompt.

Эта программа автоматически установилась вместе с node.js

Там с помощью командной строки перейди в свою папочку. Введи:

cd c:// 

И нажать  ↵ enter. Команда cd - это change directory. этой командой мы переходим в корневой каталог c

cd bots

 ↵ enter. Так мы переходим в папочку с ботом

Дальше запускаешь команду:

npm init

На все запросы просто нажимай enter  ↵

После этого в твоей папочке создастся файл package.json. Это технический файл, содержащий информацию о проекте. Можно заглянуть в него ради любопытства.

Далее: там же, в нашем терминале, запускаем команду:

npm install grammy --save

Пояснение:

npm install - команда для установки библиотеки API (набора готовых функций) из онлайн-каталога.

grammy - название нашей библиотеки. Она упрощает работу с серверами Телеграма (вместо сложных запросов к Телеграму у нас будут более простые и понятные функции)

--save - означает, что библиотека сохраняется не глобально на компьютере, а именно в нашу папочку.

Инструкция к библиотеке grammy, если ты уже готов к такому, находится здесь: https://grammy.dev/guide/introduction.html (с ее помощью возможно любое сложное взаимодействие с твоим ботом)

Описание всех функций grammy, с помощью которых мы взаимодействуем с ботом, здесь: https://deno.land/x/grammy@v1.15.3/mod.ts?s=Api

Подготовка окончена. Скоро запустим бота :)

Запускай установленную ранее программу VS Code

File -> Open folder -> Найди свою папочку на диске с:\ и выбери ее

Папка открылась в редакторе VS Code

Дальше нам нужно создать файл index.js. Нажми правой кнопкой на пустом месте возле списка файлов, выбери New File, впиши index.js и нажми enter.

Создаем новый файл
Называем файл index.js

Перед нами открылся наш новый файл. В него то мы и засунем программный код бота. Скопируй и вставь этот код в файл:

process.env.BOT_TOKEN = 'СЮДА_ТОКЕН';
const { Bot } = require('grammy');
const bot = new Bot(process.env.BOT_TOKEN)
// Код ниже заставляет отвечать на любое сообщение текстом 'Приветик!'
bot.command('start', (ctx) => ctx.reply('Да, хозяин'));
bot.command('help', (ctx) => ctx.reply('Чем я могу помочь?'));
// Код ниже заставляет отвечать на стикеры заданным текстом
bot.on(':sticker', (ctx) => ctx.reply('Вы прислали стикер, подлец!'));
// Код ниже заставляет отвечать на присланный текст. Он отвечает заданным текстом и вашей цитатой:
bot.on(':text', (ctx) => ctx.reply('Приветик! Вы написали:' + ctx.message.text));
bot.start();
console.log('Бот запущен');

Должно получиться что-то вроде этого:

Теперь немного отвлечемся на...

Создание бота через Botfather

Перейдите в телеграм к https://t.me/BotFather и отправьте ему команду /newbot

Далее задаем имя нашего бота и Username (придется взять что-то подлинее, т.к. все короткие заняты). Username бота обязан заканчиваться на bot, иначе Botfather не примет его. Например, это может быть ya_tvoy_ahaha_bot

В ответе Botfather будет кое-что важное. Это секретный токен нашего бота!

Скопируй токен из ответа и возвращайся в VS Code, чтобы вставить его в первой строчке вместо 'СЮДА_ТОКЕН'. Кавычки нужно оставить, заменив токеном только текст внутри.

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

Запуск бота

Мы готовы, сэр! В меню VS Code выбери Run -> Start Debugging. Или просто сразу нажми F5

При первом запуске предлагает выбор "отладчика". Выбери Node.js

Бот запущен! Или...

Произошла какая-то проблема, которых будет сотни на пути! (описание проблемы со скринами скидывай в https://t.me/+Q9ZIMY6x_o0zNDM6 )

Если бот запустился - справа должна появиться панель с кнопочками (1)

Если не появилась - можно посмотреть дебаг консоль. Для этого нажми View -> Debug Console. И скриншот того, что появилось - присылай в чат https://t.me/+Q9ZIMY6x_o0zNDM6

А теперь переходим к нашему боту. Его можно найти в Телеграм по Username, который мы задали при создании бота через Botfather. Или возвращаемся в сам Botfather - в последнем сообщении была ссылка на нашего бота.

Отправляем нашему боту /start и другие варианты:

Видишь, что он отвечает?

Теперь можно вернуться в свой код... и подредактировать эти тексты, написав что-то свое.

Чтобы перезапустить (зеленая круглая стрелочка) или остановить (красный квадратик) бота - пользуйтесь панелькой с кнопочками:

Перезапущенный бот учтет изменения в вашем коде.

Программирование

Если тебе хочется усложнить бота, чтобы он стал поумнее - начинается программирование.

Сложно ли программировать?

Если все делать правильно - то нет. Суть программирования можно описать двумя словами:

Условия и Операции

Операции - это просто. Например, может быть операция сложения и ты напишешь:

let x = a + 10

Или операция "добавить к одной строке другую строку", к строке "привет" добавить имя пользователя, это может выглядеть так:

let text = "Привет, " + first_name 

Условия - тоже не сложно. Это проверка чего-то: если бот получает такое-то сообщение, то нужно выполнить такую-то операцию. Если другое - то другую, например:

if (x == 10) {text = 'Сообщаю, что Х равен 10'} 
else {text = 'Сообщаю, что Х не равен 10'}

Алгоритм - это и есть набор условий и операций. Операции можно группировать в функции.

Это не так уж сложно. Но если ты захочешь создать большой проект - то тебе понадобится очень много условий и операций (длинный алгоритм). И понадобится использовать вспомогательные штуки (функции, объекты, массивы, классы, файлы-модули)... которые позволяют группировать это все так, чтобы наш мозг лучше ориентировался в 1000 условий и операций :)


Можем попробовать применить это на практике прямо сейчас. Воспользуемся операндом условия if. Заменим часть кода, там где bot.on('text')... на:

bot.on(':text', (ctx) => {  
  if (ctx.message.text == '10') {
    ctx.reply(ctx.message.text * 5)  
  } else if (ctx.message.text == '20') {
    ctx.reply('Вы написали 20. Сейчас я поделю ее на 5, получается: ' + ctx.message.text / 5 )  
  } else {
    ctx.reply('Вы написали не 10 и не 20, а что-то другое. Вот это: ' + ctx.message.text)  
  }}
);

При получении текстового сообщения бот сравнивает текст с 10. Потом сравнивает с 20. В зависимости от условия - выдает разные результаты.

Так же в коде у нас есть операция умножения и операция "складывания строк" - когда к строке текста добавляется дополнительный текст.

Вот результат работы бота (после изменения кода я его перезапустил кнопочкой - на той панельке с кнопочками. Либо можно было запустить его заново через Run -> Start Debugging)

Примеры кода ботов

Примеры ботов можно скачать в этой статье: https://telegra.ph/Primery-koda-botov-01-11.

Можно запустить и поисследовать код этих ботов. Там ты найдешь:

Изучение программирования

В самом начале можно почитать несколько уроков по JavaScript здесь: https://learn.javascript.ru/ (или просто загугли "введение в JavaScript" - и найдешь десятки уроков)

Но самый интересный и эффективный способ учить программирование - это пытаться что-то напрограммировать :) и в процессе учиться, когда чего-то не знаешь.

Идеально, если у тебя есть желание создать какую-то программу. Тогда у тебя будет достаточно интереса, чтобы учиться.

Если же ты просто пытаешься учить программирование "впрок", оно тебе не нужно для собственного проекта - это, скорее всего, будет скучно и быстро надоест.

Эффективный способ обучаться

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

Полезным не только для обучения, но и для проекта. Гораздо проще брать готовые куски чужого кода (переделывая его под себя), чем придумывать все с нуля.

Сложный момент в программировании -

то, что периодически (а особенно вначале) приходится "биться об стенку, ничего не понимая". Изгуглить пол-интернета, пока разберешься и найдешь какую-то простую ошибку. Этот этап необходимо пройти: научиться гуглить, научиться преодолевать такие "стены".

Со временем ты начнешь ориентироваться и научишься быстро находить нужную информацию (такие "стены" все-равно останутся, но будут реже :)

Средства, облегчающие программирование

Есть огромное количество инструментов, которые сделают программирование удобнее.

Например, можно включить дополнение, которое мгновенно будет подсвечивать синтаксические ошибки в коде (PS: оно включено по умолчанию)

(на скриншоте индивидуальные настройки. У тебя ошибки будут подчеркиваться тонкой волнистой линией - желтой или красной; пишу, чтобы ты ее заметил/а)

Можно настроить код так, чтобы:

  • Бот не завершала работу при первой же ошибке. А, например, чтобы сам бот присылал тебе информацию об этой ошибке прямо в Телеграм-чат (с указанием, в каком файле и в какой строке произошел сбой).

Можно устанавливать "точки прерывания" (просто нажми мышкой в редакторе слева от номера строки - появится красная точка). Тогда выполнение будет останавливаться в этом месте и можно будет посмотреть значения всех переменных в режиме реального времени (просто наводя на них мышкой) !

(менее удобный способ - писать console.log('ваши данные') в коде, чтобы получать информацию в консоль)

Можно сделать "сниппеты" - готовые шаблоны-заготовки кода, которые вставляются по нажатию нескольких клавиш.

Для разных сложных задач обычно устанавливаются API - готовые функции, написанные кем-то заранее.

Все это делается легко, когда ты уже "плаваешь в этом океане". Но пока ты новичок - тебя ждет небольшой ад в попытке настроить любую штуку :)

Библиотека grammy

Инструкция к библиотеке grammy, если ты уже готов к такому, находится здесь: https://grammy.dev/guide/introduction.html (с ее помощью возможно любое сложное взаимодействие с твоим ботом)

Запуск бота с Android смартфона

Т.к. не у всех есть компьютер - я нашел три способа запустить бота со смартфона:


Вопросы и общение в специальной группе: https://t.me/+Q9ZIMY6x_o0zNDM6



Report Page