Как стать автором
Обновить

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

Время на прочтение 2 мин
Количество просмотров 5.3K

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


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

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

Здесь инициализируем 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
Теги:
Хабы:
+5
Комментарии 0
Комментарии Комментировать

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн