¿Cómo obtener y establecer los comandos de nuestro bot de Telegram?

¿Cómo obtener y establecer los comandos de nuestro bot de Telegram?

Desde la llegada de la Bot API v4.7, el equipo de Telegrama añadió dos nuevos métodos llamados getMyCommands y setMyCommands. Estos dos métodos nos permitirán tanto obtener la lista de comandos actual que tiene nuestro bot como la posibilidad de cambiar toda la lista de comandos una sola vez.

La asignación de los comandos hasta el momento se realizaba de forma manual usando @BotFather, este bot es el padre de todos los bots de Telegram y nos sirve para configurar muchos parametros del mismo.

Ver los comandos de nuestro bot

El método getMyCommands() es uno de los más simples de usar ya que no requiere que le pasemos ningún parámetro, pero para obtener la información que nos devuelve el servidor debemos capturarla con la función .then(). Esta función nos retorna un array con la lista de comandos que tenemos en el bot, en el caso de tener ninguna recibiremos un array vacío.

bot.onText(/^\/commands/, (msg) => {
    bot.getMyCommands().then(function (info) {
        console.log(info)
    });
});

Cambiar los comandos del Bot

El método setMyCommands() remplaza todos los comandos de nuestro bot por los comandos que mandemos, en este caso solo es necesario enviar un solo parámetro que es un array con una colección de comandos.

⚠️ Importante: El nombre de los comandos se define en "command" y SOLO PUEDE TENER LETRAS MINÚSCULAS, dígitos o guiones bajos. No puede superar los 32 caracteres.

bot.onText(/^\/setcommand/, (msg) => {

    const opts = [
        { command: 'eat', description: 'Command for eat' },
        { command: 'run', description: 'Command for run' }
    ];

    bot.setMyCommands(opts).then(function (info) {
        console.log(info)
    });;
});

En este caso el .then() no sería necesario usarlo, en caso de usarlo veremos en la terminal que nos devuelve "true" si se modificaron los comandos con éxito, pero parece que la API de Bots de Telegram anda algo rota y aunque lo mandes mal siempre devuelve TRUE.

📝 Nota: Este fallo es de la API de Bots de Telegram no de la librería, la mejor forma de comprobar que se realizo completamente es llamar después al método getMyCommands() y comprobar que los Arrays son iguales.

Espero que con esta explicación entendieseis un poco más sobre el funcionamiento de estos métodos de la Bot API v4.7 y aprendirrais algunas cosas nuevas al respecto.