Subir imágenes a Imgur usando un bot de Telegram en Nodejs

Dado que subir imagenes a Imgur una a una es un trabajo costoso y una perdida de tiempo involuntaria, vamos a automatizar esta tarea para que al responder a una imagen con un comando, automáticamente se suba de manera anónima a Imgur y posteriormente nos devuelva el link de la foto.

Índice

  1. Generando Token de Imgur
  2. API y creación del código

Generando Token de Imgur

Para crear esta función en nuestro bot, necesitaremos lo siguiente:

  • Estar registrados en Imgur, posteriormente nos dirigimos a Imgur API e iniciamos sesión si lo requiere, ya sea con la cuenta de Google o vía Email.

Nos pedirá una serie de datos como:

  • El nombre de la aplicación. Da igual que nombre le des.
  • En Authorization Type, seleccionamos la segunda opción. De esta manera no nos pedira una direccion URL.
  • Añadiriamos nuestro correo electrónico y una breve descripción.

Resolvemos la Captcha y pulsamos en "Submit".

Una vez hecho esto, nos deberá mostrar nuestro ClientID y SecretID que posteriormente utilizaremos. Anotalos en un papel o en un archivo .txt

API y creación del código

La API que utilizaremos es imgur-node-api. Pese a que tenga alguna que otra vulnerabilidad, no es alarmante ya que la API solo se dedica a subir imágenes a Imgur desde Telegram.

Para instalarla solo debemos escribir en nuestro terminal: npm install imgur-node-api --save

Ahora ya podemos trabajar en la parte del código.

// Importamos la libreria
const imgur = require('imgur-node-api');

// Creamos el comando
bot.onText(/^\/imgur/, function(msg){
    // Recogemos el chatId donde se realiza la petición-
    var chatId = msg.chat.id;

    /*
    Obligamos de alguna manera a que el usuario tenga que responder a una imagen que previamente haya sido enviada
    para poder obtener los datos que necesitamos para obtener el enlace de los servidores de Telegram.
    */

    // Le indicamos que si no respondemos a la imagen, no haga nada.
    if (msg.reply_to_message == undefined){
        return;
    }

    /*
    Visualizando el contenido mediante console.log(msg), se puede observar los parámetros de la imagen. 
    Habitualmente suele devolver un Array con 3 resultados. 
    Como recomendación, deja marcada por defecto la posición [2] del array, 
    principalmente por la calidad de la imagen.
    */

    var photo = msg.reply_to_message.photo[2].file_id
    // Con esto obtendríamos el id del archivo de los servidores de Telegram.

    bot.getFileLink(photo).then(function(enlace){
    // "enlace", devuelve la url de la imagen subida en Telegram
        console.log(enlace);
    })
})


  • Con esto, obtendríamos la imagen de los servidores de Telegram. Ahora haremos que dicha imagen se suba a Imgur y nos devuelva la url de la misma de la siguiente manera:
/*
Debemos dar nuestro clientId que previamente hemos solicitado para de alguna manera identificarnos. 
La subida de imagenes son totalmente anonimas.
*/

var clientId = 'TuClientId'

// Establecemos el cliente y procedemos a la subida

imgur.setClientID(clientId)

// Pasamos como parametro "enlace"

imgur.upload(enlace, function(err, res){
    // "res.data.link" devuelve la url de la imagen ya subida a Telegram
    console.log(res.data.link)
    var link = res.data.link;

    // Y por último, enviaremos el enlace en un mensaje
    bot.sendMessage(chatId, "Enlace de la imagen subida a Imgur: \n" + link)
})

  • Aquí, hemos creado una variable que aloja nuestro token de Imgur, posteriormente hemos establecido nuestro clientId para poder subir la imagen, pasandole como parámetro el enlace de la imagen subida a Telegram.
  • Una vez que esté subida a Imgur, el bot se encargará de devolvernos la url de la imagen finalmente subida a Imgur, quedando como resultado lo siguiente:

Si tienes dudas o no entiendes alguna parte del código, puedes unirte a nuestro grupo de Telegram donde te podemos ayudar.