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

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

Используемые модули
В разработке я буду использовать TypeScript и библиотеку SlimBot.
Для установки SlimBot прописываем:
npm install slimbot
Также создаём файл tsconfig.json для TypeScript с данным кодом:
{
"compilerOptions": {
"outDir": "./app/",
"target": "ES6"
},
"include": [
"./ts/*"
]
}
Как мы видим все .ts файлы будут хранится в папке ts, а наш скомпилированный код бота будет содержаться в папке app. Поэтому создаём папке ts и app:
mkdir ts app
Сейчас наша папка выглядит так:

Начинаем кодить
В папке ts создаём файл Config.ts с данным кодом:
const config = {
token: "",
nameBot: "Math Bot",
nameBotShort: "MB"
}
export { config };
Мы видим token, но он пуст, так как мы ещё его не получили и не создали самого бота в телеграме. Для этого идём к @BotFather и создаём у него бота.


Мы получили токен — 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);
});
Компилируеи, запускаем нашего бота и смотрим.

Всё идеально работает. Теперь нам нужно обучить его математический выражениям, для этого можно использовать 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 © 2020