NodeJS Bot para Telegram con procesamiento de expresiones matemáticas

Comienzo de trabajo



Primero, creamos un directorio donde se almacenará el bot.



Un directorio vacío con un bot



Aquí inicializamos npm.



npm init


Inicialización de Npm



Módulos usados



En desarrollo, usaré TypeScript y la biblioteca SlimBot .



Para instalar SlimBot, prescribimos:



npm install slimbot


También creamos un archivo tsconfig.json para TypeScript con el código dado:



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


Como vemos, todos los archivos .ts se almacenarán en la carpeta ts, y nuestro código bot compilado estará contenido en la carpeta de la aplicación. Por lo tanto, creamos la carpeta ts y la aplicación:



mkdir ts app


Ahora nuestra carpeta se ve así:



imagen



Comience a codificar



En la carpeta ts, cree el archivo Config.ts con este código:



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


Vemos el token, pero está vacío, ya que aún no lo hemos recibido y no hemos creado el bot en el telegrama. Para hacer esto, vaya a @BotFather y cree un bot para ello.



imagenimagen



Recibimos un token - 1150111738: AAGs6yfHbDIhgOJVu7LocOqwDYxHrHp2MgM. Ahora ponlo en nuestra configuración.



Una vez que tenemos la configuración, el token y el bot, podemos crear el archivo principal controller.ts. Aceptará todas las solicitudes. Escriba este código en 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();


Si hizo todo correctamente, cuando escribe un mensaje, se envía a nuestra consola en forma de un 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' } ]
}


El objeto se representa a partir de los siguientes valores: desde - información desde qué perfil se envió el mensaje, chat - información desde qué chat se envió el mensaje, message_id - qué cuenta (leer los mensajes del bot) es este mensaje, fecha - hora en formato UNIX, texto: texto del mensaje y entidades: información sobre el texto del mensaje, longitud, desplazamiento, tipo.



Desde aquí extraemos la ID de chat y el mensaje en sí. También enviamos un mensaje idéntico al usuario:



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


Compila, ejecuta nuestro bot y mira.



imagen



Todo funciona a la perfección. Ahora tenemos que enseñarle expresiones matemáticas, para esto puede usar eval, pero compila el código, lo que significa que si el usuario conoce js, puede obtener todos los datos utilizando, por ejemplo, el sistema de archivos. Por lo tanto, usaremos la biblioteca de fórmulas



.



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


Y actualice el controlador de mensajes:



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


¡Vamos a lanzar, voila! Escribes una expresión matemática para el bot y él responde.






CBStudio y copia 2020



All Articles