¿Cómo crear enlaces de invitación 2.0 con nuestro Bot de Telegram?

¿Cómo crear enlaces de invitación 2.0 con nuestro Bot de Telegram?

Con la llegada de la versión 5.1 de la Telegram Bot API el 9 de marzo del 2021 se introducía el soporte a los nuevos enlaces de invitación 2.0. La función de estos nuevos enlaces es que podemos limitar su tiempo de vida y el número de usos que se pueden realizar del mismo.

Esta novedad llego primero en la versión 7.5 de Telegram para Android/iOS lanzada en su versión estable el 24 de febrero del 2021.

📝 Nota: Recordar que los enlaces de invitación solo se pueden generan para grupos o canales.

Crear enlace de invitación tradicional

La forma tradicional de generar un enlace de invitación con nuestro bot era usar el método "exportChatInviteLink", este método lo que hace es revocar el enlace que había generado previamente el bot para el grupos (en el caso de existir) para posteriormente crear un enlace nuevo.

En el siguiente ejemplo puedes ver como emplear ese método, en este caso según el código que escribimos debemos poner en un grupo donde tengamos nuestro bot el comando "/normal". El bot nos enviará un mensaje con el enlace de invitación usando el método "sendMessage".

bot.onText(/normal/, (msg) => {
  bot.exportChatInviteLink(msg.chat.id).then((link) => {
     bot.sendMessage(msg.chat.id, `Enlace de invitación normal\nLink: ${link}`);
  });
});

Crear enlace de invitación 2.0

La ventaja de estos nuevos enlaces de invitación 2.0 es que cuando creamos uno no se borra el anterior, además nos permite definir un tiempo de expiración y un número de usos.

Debemos emplear el método "createChatInviteLink" tiene solo un parámetro obligatorio que es el ID del chat sobre el que queremos crear el enlace de invitación.

De forma opcional podemos pasar los parámetros opcionales como un objecto:

  • expire_date: Indica la fecha de expiración y se tiene que pasar como un timestamp (es el número de segundos que han transcurrido desde las 0 horas del 1 de enero de 1970 GMT).
  • member_limit: Indica el número de usuarios que pueden usar este enlace de invitación y se le pasa un número.

En el siguiente ejemplo llamamos al comando "/invite" con el cual generaremos un enlace de invitación que caduca el 17-03-2022 y tiene un limite de 2 usos. Este enlace deja de funcionar ya sea que se supero el número de usos o expiro porque llego a la fecha que establecimos.

bot.onText(/invite/, (msg) => {

  var chat_id = msg.chat.id; // Obtenemos el chat id donde enviamos el mensaje

  // La fecha tenemos que convertirla a un formato Timestamp. Para realizar esto
  // emplearemos el Objecto Date al que debemos de pasar los parámetros año, mes y día
  var date = (new Date(2022, 03, 17)).getTime();

  // Parámetros opcionales que podemos pasar
  var ops = {
    expire_date: date,
    member_limit: 2
  }

  bot.createChatInviteLink(chat_id, ops).then((data) => {
      // Vemos en la consola los datos que recibimos
      console.log(data);
  
      // Enviamos un mensaje con la información del enlace
      bot.sendMessage(chat_id, `Creado un enlace de invitación\nLink: ${data.invite_link}\nMáximo de usos: ${data.member_limit}`);
  });

});

📝 Nota: Recordar ver los datos que nos devuelve al crear un enlace, hay tendréis información útil sobre si un link esta revocado, quien fue su creador, ...

Editar un enlace de invitación

Los enlaces de invitación 2.0 se puede editar tanto su fecha de expiración como el número de usos, para editar un enlace previamente debemos contar con el mismo.

Para realizar esa acción usamos el método "editChatInviteLink" el cual recibe 3 párametros siendo el primero el id del chat, el segundo el enlace de invitación a modificar y el tercero es un objeto con los parámetros opcionales a modificar que son los mismo que le pasamos en el ejemplo anterior a la hora de crear un enlace.

bot.onText(/\/editar (.+)/, (msg, match) => {
  // Obtenemos el enlace y usando trim le quitamos los espacios al princio y final
  var enlace_invitacion = match[1].trim();
  
  // La fecha tenemos que convertirla a un formato Timestamp. Para realizar esto
  // emplearemos el Objecto Date al que debemos de pasar los parámetros año, mes y día
  var date = (new Date(2022, 03, 17)).getTime();

  // Parámetros opcionales que podemos pasar
  var ops = {
    expire_date: date,
    member_limit: 4
  }

  // Comprobamos si el texto que nos manda el usuario es un enlace de Telegram
  if(enlace_invitacion.match(/^https:\/\/t\.me\/joinchat\/.+$/i)) {
    bot.editChatInviteLink(msg.chat.id, enlace_invitacion, ops).then((data) => {
     console.log(data);
      bot.sendMessage(msg.chat.id, `Enlace de invitación se ha modificado\nLimite de miembros: ${data.member_limit}\nEnlace: ${data.invite_link}`);
   });
  } else {
    bot.sendMessage(msg.chat.id, 'No es un enlace de invitación correcto');
  }
});

Borrar un enlace de invitación

Para borrar/revocar un enlace de invitación de un grupo/canal debemos emplear el método "revokeChatInviteLink" el cual recibe dos parámetros que son el id del chat y el enlace de invitación correspondiente al mismo que queremos revocar.

bot.onText(/\/eliminar (.+)/, (msg, match) => {
  // Obtenemos el enlace y usando trim le quitamos los espacios al princio y final
  var enlace_invitacion = match[1].trim();

  // Comprobamos si el texto que nos manda el usuario es un enlace de Telegram
  if(enlace_invitacion.match(/^https:\/\/t\.me\/joinchat\/.+$/i)) {
    bot.revokeChatInviteLink(msg.chat.id, enlace_invitacion).then((data) => {
       bot.sendMessage(msg.chat.id, `El enlace de invaticón se borro correctamente`);
   });
  } else {
    // Si el enlace no es correcto mandamos un mensaje al usuario
    bot.sendMessage(msg.chat.id, 'No es un enlace de invitación correcto');
  }
});

Espero que con estos ejemplos os quedará bastante claro el uso de estos nuevos métodos y podáis implementarlos con éxito en vuestros bots.