Как сделать телеграм бота на javascript

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024


Как оказывается, написать бота для telegram, как два пальца об асфальт.


Легко в общем!

Если кому-то нужно разработать бота для telegram или для другой платформы, напишите мне в VK — сделаем. Также интегрируем с 1С и остальными требуемыми программными продуктами.

Для чего можно использовать бота:

  • Социальные боты в электронной коммерции. Боты-продажники;
  • Боты напоминалки;
  • Проводить обучение;
  • Использоваться для управления умным домом и многое другое, все на что способна фантазия!


Запилим бота — увеличим продажи!

Итак, чтобы написать бота нам потребуется:


Кувалда!

Вначале опишу какой простой бот получился в Telegram

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

И так описание бота, который будем разрабатывать:

Начинаем писать бота в Telegram

В телеграм находим BotFather.


Придумываем название боту. И имя юзера. Он нам выдаст токен, который будем использовать.

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


Начинаем разработку бота на Node.js

В консоли пишем:

для создания package.json и управления зависимостями.

Файл index.js получился такой самый простой:

Вставляем свой токен, который получили от BotFather и можно его разместить на бесплатном хостинге Heroku, и все сразу заработает, самый простой ботик!

Но лучше токен, поместить в переменную окружения, также можно на Heroku.

Полезные ссылки по ботам Телеграм

Описываю какой код бота для Телеграм получился

Подключаем библиотеку для работы с файлами

И также остальные текстовые фразы обрабатывает.

Этим кодом создается клавиатура инлайновая.

Здесь обрабатывается команда /start

Этим кодом обрабатывается callback — от инлайновой клавиатуры.

Этим кодом отлавливается контакты, которые отправили боту, хотя их можно также отловить bot.on(‘message’ — сюда они тоже приходят.

Здесь создаем клавиатуру.

request_contact: true — обозначает запрос контактов, также можно запрашивать локацию.

Этот код отправляет классическую музыку, случайно выбранную из папки ./klasik/

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

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

CreateBot

Result

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

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

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

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

Exit fullscreen mode

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

Exit fullscreen mode

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

Exit fullscreen mode

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

Exit fullscreen mode

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

Exit fullscreen mode

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

Result

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

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

Discussion (0)

For further actions, you may consider blocking this person and/or reporting abuse

Телеграм бот Node.js Webhook

3. Создание SSH – ключей

PuTTYgen создание SSH ключей

PuTTYgen создание SSH ключей

4. Подключение SSH – ключей

Sprintbox добавляем SSH ключ

Sprintbox добавляем SSH ключ

5. Создание VDS

Создание VDS, шаг 1 Создание VDS, шаг 2 Создание VDS, шаг 3 Создание VDS, шаг 4

6. Подключение к VDS по SSH

7. Подготовка к установке Node.js

Перед установкой Node.js выполним обновление:

и перезагрузку системы:

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


LOLZTEAM

Подробный гайд по созданию бота на Node.JS!

Статья носит образовательный характер, мы ни к чему не призываем и не обязываем. Информация представлена исключительно в ознакомительных целях.

Подписывайтесь на канал и делитесь ссылкой на статью с друзьями!

В этой теме мы напишем небольшого Telegram-бота на Node.JS с Inline-модом, который будет показывать текущий курс валют. Для взаимодействия с Bot API на Node.JS есть несколько модулей, например:

Но в этой статье мы будем рассматривать разработку бота именно на telegraf.


Установка стандартная, как и в других программах. Просто нажимаем на "Далее". Проблем с этим возникнуть не должно.

Шаг 0.2: Установка IDE

Не советую использовать Блокнот или Notepad++, так как для такого типа проектов они не сильно эффективны. Использование специальных редакторов кода намного уменьшит вам головную боль и упразднит ненужные вопросы по синтаксическим ошибкам.

Для удобного редактирования кода существует несколько хороших программ:

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

Шаг 0.3: Создание папки проекта

Как и любой проект, он должен находиться в своей папке. Для Ноды желательно называть проекты на латинице и без пробелов. (Неправильно: "мой бот", "my bot". Правильно: "mybot" или "my-bot").

После того, как вы создали папку, необходимо открыть ее в выбранном редакторе.

Шаг 0.4: Использование терминала

Если вы используете VSC в качестве редактора кода, открыть терминал можно прямо в этой программе, используя сочетание клавиш Ctrl + ~ (Ctrl + Shift + ~) или через верхную панель Terminal -> New Terminal.


После того, как вы открыли терминал, необходимо проверить, что установка Node.JS прошла успешно. Написав команду node -v, мы можем убедиться, что все стоит правильно. Если вы получили в ответ что-то по типу v14.15.1 - значит все хорошо и можно приступать к следующему этапу. Если в ответ вы получаете ошибку, попробуйте перезапустить компьютер или попробовать переустановить Ноду.

Шаг 0.5: Инициализация NPM модуля

Далее нам необходимо создать файл package.json, где будет храниться информация о нашем проекте и список зависемостей для него. Сделать это можно таким образом:

После написания команды npm init, скрипт спросит вас информацию о проекте (название, ссылка на репозиторий, автор кода, версия). Вообще, это сделано для управлением модулей на npm, но т. к. мы не будем публиковать код в менеджере пакетов, это можно пропустить, используя аргумент --yes. Единственное, что нам надо будет изменить в будущем - это путь к главному файлу проекта, его мы будем хранить в папке src. Изменить это можно прямо в созданном package.json.

Шаг 0.5: Установка nodemon

Во время разработки бота, нужно его постоянно перезагружать вручную (если что, команда node .), чтобы видеть изменения. Но на самом деле, это не так удобно.. Что же люди придумали? - Программа, которая следит за изменением файлов и автоматически перезапускает скрипт. Она как раз nodemon и называется. Установить ее можно так:Код:

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

После этого заходим в package.json и создаем новый скрипт для запуска:

Теперь для запуска бота нам не нужно постоянно писать node ., а достаточно один раз написать npm run dev. Убить процесс - Ctrl + C.

Шаг 0.6: Установка линтера

Одна из существенных преимуществ специальных IDE перед Блокнотом или Notepad++ - возможность использования линтеров. Они помогают проверять синтаксис, не запуская код и писать всё в одном стиле, правила для которого можно указывать в специальных конфигурационных файлах. Это действительно удобно и при использовании вы сможете понять на сколько.

Для начала необходимо установить модули eslint и prettier (форматор кода), чтобы они были доступны в вашем проекте.

После этого необходимо установить плагины Prettier и ESLint в вашем редакторе.

  • Visual Studio Code: ESLint, Prettier
  • Atom: ESLint (необходимо также установить базовый Linter), Prettier
  • Sublime Text: ESLint, Prettier

Шаг 0.7: Настройка линтера

  1. Создайте файл в директории вашего проекта с названием .eslintrc.json
  2. Вставьте код ниже в созданный файл.

Так выглядит стандартный конфиг для ESLint. В объекте rules вы можете указывать правила для вашего кода. Полный список стандартных правил вы можете найти на официальном сайте ESLint.

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

Для правильной работы этого конфига необходимо установить дополнительные модули в проект:

После нужно создать файл под названием .prettierrc с таким содержанием:

Шаг 1.1: Создание бота

  1. Переходим в бота BotFather
  2. Пишем команду /newbot и указываем спрашиваемые данные. Обратите внимание, что юзернейм бота должен заканчиваться на bot.

Мы получаем токен, с помощью которого мы будем авторизовываться.С помощью токена можно полностью управлять ботом. Храните его в безопасности: не делитесь им с недоверенными людьми.

Используя команду /mybots и выбрав только что созданного бота, мы можем установить ник, аватарку, описание и тд. и тп. Для работы inline-режима, который мы будем разглядывать в этой статье, необходимо включить эту опцию: Bot Settings -> Inline Mode -> Turn On

Шаг 1.2: Хранение токена в проекте

Как было сказано ранее, токен должен быть секретным и доступа к нему ни у кого, кроме доверенных лиц, быть не должно. Мы можем, конечно, хранить токен в специальном JSON-файле и доставать его оттуда, при этом добавив его в .gitignore. Но есть вариант куда удобней - модуль dotenv. С его помощью мы можем хранить токены в файле .env и иметь доступ к указанным переменным в коде без импорта. Например:

Чтобы установить данный модуль, необходимо ввести команду:Код:

Создаем файл .env в корне проекта с токеном, который мы получили от BotFather в таком виде, который указан выше.

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

Шаг 2.1: Создание главного файла

Главный файл должен находиться по тому пути, который вы указали в package.json в поле main. Здесь мы будем рассматривать бота, файлы которого находятся в папке src, по этому создаём такую папку и там файл index.js.

В самом начале кода мы должны подключить установленный dotenv, для того, чтобы он подгрузил значения. Далее мы импортируем главный класс Telegraf, который мы используем для создания нового бота. Перед этим я достал наш токен из process.env. В самом конце мы запускаем бота, используя метод launch().

Если мы запустим такой код, бот стартанет, но ничего делать он пока не может. Давайте исправим это!

Шаг 2.2: Методы для реагирования на действия пользователя

Для того, чтобы бот реагировал на действия пользователя, в telegraf есть специальные методы:

В каждом методе мы получаем контекст. Это объект, где хранятся все функции, которые могут быть нам полезны. Для ответа мы используем метод reply, но есть также и другие. Полный список вы можете найти в официальной документации Telegraf. Ниже вы можете видеть, как работает этот код.

Команды /start и /help мы указали специальной для них функцией, но основным методом является command. Ниже представлено две строки, результат будет один и тот же.

Шаг 3.1: Структура проекта

Как уже было сказано, основной код будет находиться в папке src. Мы будем иметь один главный файл index.js, который будет подключать модули для работы бота. Папка helpers для утилит. Там есть:

Папка locales содержит в себе файлы локализации для разных языков. Они хранятся в формате yaml. В данном проекте мы будем иметь только русский язык, по этому будет только 1 файл - ru.yaml.

В директории handlers мы имеем index.js, который собирает все обработчики для удобного импорта. Также для каждого хендлера есть свой файл, который экспортирует функцию.

Шаг 4.1: Установка telegraf-i18n

Для того, чтобы сильно не засорять сам код текстами для ответа, я использую модуль telegraf-i18n. С его помощью можно не только отделить фразы в отдельный файл, но еще и добавлять языки, помимо русского. Установка:Код:

Шаг 4.2: Конфигурация модуля

Импортируем этот модуль в файле index.js в папке src. Создаём новый инстанс класса с параметрами (все параметры можно посмотреть здесь):

  • язык по умолчанию - русский
  • папка, где находятся файлы с фразами - src/locales

Шаг 4.3: Файл с фразами

В папке src/locales создаём файл ru.yaml. Пока он будет пустым, фразы будем добавлять по мере необходимости в следующих шагах.

Синтаксис очень простой: : . Если надо использовать более, чем одну строку, тогда надо добавить прямую линию ( | ):

В сами фразы можно также переносить значения из кода и использовать их, прямо как в коде, используя $< >:Код:

Шаг 5.1: Установка axios

Для того, чтобы получать информацию с API, нам необходимо использовать специальную библиотеку. В статье мы будем использовать axios, но есть также и node-fetch. Установка:Код:

Шаг 5.2: Метод для получения курса валют

Для получения курса, мы будем использовать API украинского ПриватБанка. Добавим ссылку на API в файл .env:

В папке src/helpers создадим файл getExchange.js, в котором будем экспортировать асинхронную функцию, которая обращается к серверу по ссылке, которую указали в .env (await - ожидание ответа, т.к. он приходит не мгновенно). Если произошла ошибка при обработке запроса на сервере, и мы не получили нужную нам информацию, создаём ошибку, показывая, что всё плохо. Результат просто возвращаем.

Шаг 5.3: Запрос при старте бота

При старте бота будем делать запрос на API, используя только что созданную функцию, во-первых, чтобы проверить работоспособность сервера, во-вторых, чтобы получить список доступных валют и сохранить их в контексте бота. То есть, когда мы будем обрабатывать какое-либо событие, через ctx мы сможем легко получить этот список без дополнительных запросов на сервер. Добавим это в код index.js:

Шаг 6.1: Утилита send

Шаг 7.1: Текст для отправки

Перед тем, как начать писать обработчик команды, надо бы создать клавиатуру и текст для ответа. В src/locales/ru.yaml добавим текст для отправки:Код:

Кстати, можно также использовать HTML для форматирования текста.

Шаг 7.2: Обработчик

Создаём новый файл в папке src/handlers под названием start.js, который будет экспортировать функцию, которая принимает контекст события.

На случай, если случится неожиданная ошибка и бот не стал от нее, вставим наш код в конструкцию try < . >catch (err) < . >.

Сделаем каждую кнопку с таким содержимым select:: , например: select::USD. Также, для того, чтобы наши кнопки были не в одной строке, а как-бы "пирамидкой", используем функцию wrap, которую оглашаем после импортов.


Шаг 7.3: Подключение команды

Для того, чтобы удобно импортировать хендлеры одной строкой, создадим src/handlers/index.js, где будем экспортировать хендлеры под нужными именами.

В src/index.js импортируем этот файл и подключаем, используя методы start и action (чтобы бот реагировал не только на команду, но и нажатие на кнопку с содержимым start.

Шаг 8.1: Клавиатура и текст для отправки

В файл с фразами добавим два названия кнопок для клавиатуры и сам текст ответа. Мы будем передавать объект course, который получаем с API.

Теперь можно перейти к созданию клавиатуры. Создаем файл src/helpers/keyboards.js. Там - стрелочную функцию updateKeyboard, которая принимает контекст для перевода фраз и ответ сервера с курсом. У нас будет 2 кнопки: одна для возврата в главное меню, вторая для обновления информации (обработчик напишем позже). Содержание последней кнопки будет: update:: :: :: .

Шаг 8.2: Обработчик


Шаг 8.3: Подключение обработчика

Все по аналогии, как и с /start. Добавляем хендлер в src/handlers/index.js

Теперь подключаем в главном файле проекта src/index.js. Используем метод action, где в параметрах передаем регулярное выражение:

Шаг 9.1: Текст для отправки

Шаг 9.2: Обработчик

Создаём файл src/handlers/update.js, который по структуре не отличается от прошлых команд. В самом начале мы получаем информацию из содержимого кнопки, которое уже спарсил telegraf, с помощью регулярного выражения. Опять запрашиваем новую информацию о курсе валют, сравниваем значения с помощью функций, которые оглашаем после импорта, после отправляем содержимое.


Шаг 9.3: Подключение обработчика

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

Шаг 10.1: Разрешение Inline mode в настройках

Заходим в уже знакомого BotFather, пишем команду /mybots, выбираем нашего бота и включаем этот режим: Bot Settings -> Turn inline mode on. Изменить текст для плейсхолдера, при использовании этого режима (скрин ниже, что это такое), можно в этом же разделе - Edit inline placeholder.

Читайте также: