Restringir uso de comandos en supergrupos y chat privado de tu bot de Telegram

Restringir uso de comandos en supergrupos y chat privado de tu bot de Telegram

En este artículo, te enseñaremos como restringir los comandos en función de si se usan en un supergrupo o en privado, ya que es un poco extraño que comandos que en teoría serían para supergrupos, funcionen también en privado.

Para ello, haremos uso de una propiedad de msg.chat llamada type permitiéndonos distinguir si es un supergrupo, grupo normal, canal o en privado con el bot.

Índice

Restringiendo comando en supergrupos

Para restringir el uso de los comandos en supergrupos, debemos añadir en cada comando que tengamos previamente programados la siguiente condición:

bot.onText(/^\/start/, function(msg){
    var chatId = msg.chat.id;
    var chatType = msg.chat.type;
    
    if (chatType == 'supergroup'){
    bot.sendMessage(chatId, "Hago algo si estoy en un supergrupo");
    } else {
    // Sino no hago nada
    return;
    }
});

Con esto, hemos hecho que si un usuario hace uso del comando /start en un supergrupo le responda "Hago algo si estoy en un supergrupo" mientras que si es cualquier otro tipo, ya sea privado o un grupo normal, no realizará ninguna acción.

Restringiendo comando en privado con el bot

Ahora, restringiremos el comando para que solo pueda ser utilizado en privado devolviendonos un mensaje, mientras que si se hace uso en un supergrupo, no hará nada.

bot.onText(/^\/start/, function(msg){
    var chatId = msg.chat.id;
    var chatType = msg.chat.type;
    
    if (chatType == 'supergroup'){
        // No hago nada
        return;
    } 

    else if (chatType == 'private'){
        bot.sendMessage(chatId, "Identifico que me hablan en privado y envío este mensaje")
    }
});

Hemos establecido que si el usuario hace uso de /start en un supergrupo, no hará nada, mientras que si se le escribe el comando en privado, devolverá un mensaje determinado.

Resultado final

Como resultado final, haremos que el bot, dependiendo de donde se le haga uso del comando /start, devuelva un mensaje determinado de la siguiente manera:

bot.onText(/^\/start/, function(msg){
    var chatId = msg.chat.id;
    var chatType = msg.chat.type;

    if (chatType == 'private'){
        // Haz algo =>
        bot.sendMessage(chatId, "Devuelvo este mensaje en privado")
    }

    else if (chatType == 'supergroup'){
        // Haz algo =>
        bot.sendMessage(chatId, "Devuelvo este mensaje en supergrupos");
    }

    else if (chatType == 'group'){
        // Haz algo =>
        bot.sendMessage(chatId, "Devuelvo este mensaje en grupos normales")
    }

    else if (chatType == 'channel'){
        // No hago nada
        return;
    }
});

If lo utilizamos para comprobar que, si el tipo de chat es igual a un supergrupo envía un mensaje que previamente hemos establecido.

Else if lo utilizamos como segunda opción en el caso de que el If anterior, no cumpla la condición. Es decir, sino si el tipo de chat es igual a privado que envíe otro mensaje o el bot no realice ninguna acción.