Crear comando mute | unmute

Continuamos la guía de creación de bots para Telegram con el comando que permite silenciar y retirar dicha prohibición a cualquier usuario mediante el uso de respuesta a un mensaje. El comando /mute nos permitirá restringir que un usuario pueda leer, escribir, enviar multimedia, stickers o gifs e incluso enviar vista previa de enlaces mientras que el comando /unmute nos permitirá retirar la prohibición.

Para ello, usaremos el siguiente método:

Podeis echar un ojo a las propiedades de este método pulsando sobre el nombre del mismo, aunque, cuando escribamos el código, veremos cuales son. Ahora comenzaremos a crear el código.

Comando /mute

Comenzaremos escribiendo el comando /mute, el cual permitirá silenciar a un usuario, en éste caso, de manera indefinida mediante el uso de respuesta al usuario de manera que, si no se responde al mensaje de un usuario, el bot no realizará ninguna acción.

No obstante, también haremos que se pueda manejar el tiempo que queremos que ese usuario esté muteado.

bot.onText(/^\/mute (.+)/, function(msg, match){
    var chatId = msg.chat.id;
    var fromId = msg.from.id;
    var replyId = msg.reply_to_message.from.id;
    var replyName = msg.reply_to_message.from.first_name;
    var fromName = msg.from.first_name;
    
    // Recogerá en el comando el tiempo de baneo
    var tiempo = match[1];
    
    // Nos permitirá manejar el tiempo
    var ms = require('ms')
    
    // Se encargará de manejar los privilegios que el usuario tendrá restringidos.
    const perms = {};
    perms.can_send_message = false;
    perms.can_send_media_messages = false;
    perms.can_send_other_messages = false;
    perms.can_can_add_web_page_previews = false;
    
    if (msg.reply_to_message == undefined){
        return;
    }
    
    bot.getChatMember(chatId, fromId).then(function(data){
        if ((data.status == 'creator') || (data.status == 'administrator')){
            bot.restrictChatMember(chatId, replyId, {until_date: Math.round((Date.now() + ms(tiempo + "days")/1000))}, perms).then(function(result){
            bot.sendMessage(chatId, "El usuario " + replyName + " ha sido muteado durante " + tiempo + " días");
            }) // restrictChatMember
        } else {
            bot.sendMessage(chatId, "Lo siento " + fromName + " no eres administrador");
        }
    }) // getChatMember
}) // Comando

La variable tiempo nos permitirá recoger el tiempo de muteo que queremos aplicar sobre el usuario, mientras que until_date nos permitirá establecer el tiempo de muteo del usuario.

Cuando hagamos uso del comando, deberemos responder al mensaje del usuario al que queremos mutear añadiendo /mute 5. En consecuencia, el usuario será muteado durante 5 días.

Comando /unmute

Ahora, procederemos a crear el comando inverso al anterior. Éste permitirá retirar la prohibición mediante la respuesta a un mensaje del usuario. No hará falta recoger ningun dato ya que retiraremos la prohibición. Deberemos cambiar los permisos a true y aplicarlos al método restrictChatMember de la siguiente forma.

bot.onText(/^\/unmute/, function(msg){
    var chatId = msg.chat.id;
    var fromId = msg.from.id;
    var fromName = msg.from.first_name;
    var replyName = msg.reply_to_message.from.first_name;
    var replyId = msg.reply_to_message.from.id;
    const perms = {};
    
    perms.can_send_message = true;
    perms.can_send_media_messages = true;
    perms.can_send_other_messages = true;
    perms.can_can_add_web_page_previews = true;
    
    if (msg.reply_to_message == undefined){
        return;
    }
    
    bot.getChatMember(chatId, fromId).then(function(data){
        if ((data.status == 'creator') || (data.status == 'administrator')){
            bot.restrictChatMember(chatId, replyId, perms).then(function(result){
                bot.sendMessage(chatId, "El usuario " + replyName + " ha sido desmuteado");
            }) // restrictChatMember
        }
        else {
        bot.sendMessage(chatId, "Lo siento " + fromName + " no eres administrador");
        }
    }) // getChatMember
}) // Comando

De ésta manera, si no respondemos al mensaje de un usuario, el bot no hará ninguna acción mientras que si respondemos al mensaje de un usuario que previamente haya sido muteado con el comando /mute, retirará la prohibición.