Crear comando pin | unpin

Crear comando pin | unpin

Continuamos con la creación de comandos para la guía de creación de bots para Telegram. En esta ocasion, crearemos el comando que nos permitirá anclar y desanclar mensajes dentro de un chat. Para ello, utilizaremos los siguientes métodos:

Los métodos que tambien utilizaremos como condicionales, no deben ser desconocidos para los que están siguiendo ésta guía, por lo tanto, los unicos que hasta ahora no hemos utilizado, son los citados anteriormente.

Comando pin

Anclar un mensaje nos permite tener acceso rápido a una publicación en un chat o un canal. En esta ocasión, haremos que se ancle un mensaje en un chat. Para crear este comando, escribiremos lo siguiente:

bot.onText(/^\/pin/, function(msg){

// Si no respondemos previamente a un mensaje, no hará nada.
    if (msg.reply_to_message == undefined){
        return;
}

// Declaramos las variables que utilizaremos a lo largo de la creación del comando.

    var chatId = msg.chat.id;
    var fromId = msg.from.id;
    var messageId = msg.message_id;
    var chatype = msg.chat.type;
    var replyFrom = msg.reply_to_message.message_id;
    var fromName = msg.from.first_name;
    
    // Aquí añadiremos las opciones que este método requiere, en este caso deshabilitaremos la notificación para el resto de miembros
    const opts = {};
    opts.disable_notification = false;

    // Declaradas las variables pertinentes, empezamos con las condiciones. Verificaremos si quien hace uso del comando es creador o administrador.
    
    bot.getChatMember(chatId, fromId).then(function(data){
        if ((data.status == 'creator') || (data.status == 'administrator')){
            if (chatype == 'supergroup'){
                bot.pinChatMessage(chatId, replyFrom);
                // deleteMessage eliminará el mensaje /pin
                bot.deleteMessage(chatId, messageId);
            }
            else if (chatype == 'private'){
                bot.sendMessage(chatId, "Comando solo disponible en supergrupos");
            }
            else if (chatype == 'group'){
                bot.sendMessage(chatId, "Comando solo disponible en supergrupos.");
            }
        }
        else {
            bot.sendMessage(chatId, "Lo siento " + fromName + " no eres administrador");
        }
    })
});

De ésta manera, anclaremos el mensaje solo en supergrupos, mientras que si se hace uso del comando en grupos o de manera privada, responderá con un mensaje preestablecido. Quedando como resultado:
Telegram--469--20_06_2018-17_34_45

Comando unpin

Para crear el comando que permite desanclar mensajes de un chat, simplemente tendremos que cambiar el método que anteriormente utilizamos para anclarlo. Quedando de la siguiente manera:

bot.onText(/^\/unpin/, function(msg){

    var chatId = msg.chat.id;
    var fromId = msg.from.id;
    var messageId = msg.message_id;
    var fromName = msg.from.first_name;
    
    bot.getChatMember(chatId, fromId).then(function(data){
        if ((data.status == 'creator') || (data.status == 'administrator')){
        // deleteMessage eliminará el mensaje /unpin
            bot.deleteMessage(chatId, messageId);
            bot.unpinChatMessage(chatId);
        }
        else {
            bot.sendMessage(chatId, "Lo siento " + fromName + ", no eres administrador");
        }
    })
});

De ésta manera, desanclaremos el mensaje que previamente hayamos anclado con el comando /pin, quedando como resultado:
Telegram--469--20_06_2018-17_36_39

Ambas muestras de código han sido testeadas previamente y funcionan correctamente.