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

Здесь инициализируем 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
