NodeJS Bot for Telegram com processamento de expressões matemáticas

Início do trabalho



Primeiro, criamos um diretório onde o bot em si será armazenado.



Um diretório vazio com um bot



Aqui inicializamos o npm.



npm init


Inicialização Npm



Módulos usados



No desenvolvimento, usarei o TypeScript e a biblioteca SlimBot .



Para instalar o SlimBot, prescrevemos:



npm install slimbot


Também criamos um arquivo tsconfig.json para o TypeScript com o código fornecido:



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


Como podemos ver, todos os arquivos .ts serão armazenados na pasta ts e nosso código bot compilado estará contido na pasta do aplicativo. Portanto, criamos a pasta ts e app:



mkdir ts app


Nossa pasta agora fica assim:



imagem



Comece a codificar



Na pasta ts, crie um arquivo Config.ts com o código fornecido:



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


Vemos o token, mas ele está vazio, pois ainda não o recebemos e não criamos o bot no telegrama. Para fazer isso, vá para @BotFather e crie um bot para ele.



imagemimagem



Recebemos um token - 1150111738: AAGs6yfHbDIhgOJVu7LocOqwDYxHrHp2MgM. Agora coloque-o em nossa configuração.



Depois de termos a configuração, o token e o bot, podemos criar o arquivo controller.ts principal. Ele aceitará todos os pedidos. Escreva este código em 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();


Se você fez tudo corretamente, quando você escreve uma mensagem, ela é enviada ao nosso console na forma de um objeto 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' } ]
}


O objeto é representado pelos seguintes valores: from - informações de qual perfil a mensagem foi enviada, chat - informações de qual chat a mensagem foi enviada, message_id - qual conta (leia a mensagem do bot) essa mensagem, data - hora no formato UNIX, texto: texto da mensagem e entidades - informações sobre o texto, comprimento, deslocamento, tipo da mensagem.



A partir daqui, obtemos o ID do bate-papo e a própria mensagem. Também enviamos uma mensagem idêntica ao usuário:



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


Compile, execute nosso bot e assista.



imagem



Tudo funciona perfeitamente. Agora precisamos ensinar a ele expressões matemáticas, para isso você pode usar eval, mas ele compila o código, o que significa que, se o usuário conhece js, ele pode obter todos os dados usando, por exemplo, o sistema de arquivos. Portanto, usaremos a biblioteca de fórmulas



.



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


E atualize o manipulador de mensagens:



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


Vamos lançar, voila! Você escreve uma expressão matemática para o bot e é a resposta.






CBStudio e cópia 2020



All Articles