NodeJS Бот для Телеграм с обработкой математических выражений

—

от автора

Начало работы

Сначала создаём каталог где будет храниться сам бот.

Пустой каталог с ботом

Здесь инициализируем npm.

npm init 

Инициализация npm

Используемые модули

В разработке я буду использовать TypeScript и библиотеку SlimBot.

Для установки SlimBot прописываем:

npm install slimbot 

Также создаём файл tsconfig.json для TypeScript с данным кодом:

{     "compilerOptions": {         "outDir": "./app/",         "target": "ES6"     },     "include": [         "./ts/*"     ] }

Как мы видим все .ts файлы будут хранится в папке ts, а наш скомпилированный код бота будет содержаться в папке app. Поэтому создаём папке ts и app:

mkdir ts app 

Сейчас наша папка выглядит так:

image

Начинаем кодить

В папке ts создаём файл Config.ts с данным кодом:

const config = {     token: "",     nameBot: "Math Bot",     nameBotShort: "MB" } export { config }; 

Мы видим token, но он пуст, так как мы ещё его не получили и не создали самого бота в телеграме. Для этого идём к @BotFather и создаём у него бота.

imageimage

Мы получили токен — 1150111738:AAGs6yfHbDIhgOJVu7LocOqwDYxHrHp2MgM. Теперь поставим его в наш конфиг.

После того как у нас есть конфиг, токен и бот, мы можем создать главный файл controller.ts. Он будет принимать все запросы. В controller.ts пишем данный код:

import { config } from './Config'; import Slimbot from 'slimbot'; const slimbot:Slimbot = new Slimbot(config.token);   slimbot.on('message', (message)=>{     console.log(message); });  slimbot.startPolling(); 

Если вы сделали всё правильно, то при написании какого-либо сообщения оно отправляется в нашу консоль в виде JS объекта:

{   message_id: 1,   from: {     id: 866278523,     is_bot: false,     first_name: 'Andrey',     last_name: 'Pavlov',     username: 'Semi4',     language_code: 'ru'   },   chat: {     id: 866278523,     first_name: 'Andrey',     last_name: 'Pavlov',     username: 'Semi4',     type: 'private'   },   date: 1593329677,   text: '/start',   entities: [ { offset: 0, length: 6, type: 'bot_command' } ] }

Объект представлен из значений: from — информация от какого профиля было отправлено сообщение, chat — информация из какого чата было отправлено сообщение, message_id — какое по счёту (счтитая сообщения бота) это сообщение, date — время в формате UNIX, text: текст сообщения и entities — информация о тексте сообщения, длина, оффсет, тип.

Отсюда извлекаем ID чата и само сообщение. Также отправляем идентичное сообщение пользователю:

slimbot.on('message', (message)=>{     const ID = message.chat.id;     let text = message.text;     slimbot.sendMessage(ID, text); }); 

Компилируеи, запускаем нашего бота и смотрим.

image

Всё идеально работает. Теперь нам нужно обучить его математический выражениям, для этого можно использовать eval, но он компилирует код, а значит, если пользователь знает js то он может получить все данные с помощью например файловой системы. Поэтому будем использовать библиотеку Formula

Подключаем:

import formula from 'formula'; const { run } = formula;  

И обновляем обработчик сообщений:

slimbot.on('message', (message)=>{     const ID = message.chat.id;     let text = message.text;     slimbot.sendMessage(ID, run(text)); });

Запускаем, вуаля! Вы пишите боту математическое выражение а он ответ.


CBStudio &copy 2020


ссылка на оригинал статьи https://habr.com/ru/articles/509074/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *