En mi antiguo trabajo (Tecnilógica / LiquidSquad / Accenture), cada vez que alguien se daba de alta en Yammer, Slack o cualquier otra red interna, le freíamos a peticiones de "ponte foto", para saber de quién se trataba. Manías nuestras 🤷🏻♀️.
He montado un bot en Discord que hace exactamente lo mismo. PonteFotoBot se conecta a un canal determinado todos los días a la misma hora, mira la lista de usuarios humanos (vamos, los que no son bots) que no tienen foto de perfil y les avisa.
El bot se conecta al servidor y se baja la información del canal que se haya indicado en el fichero de configuración (getChannelInfo
). Con esa información se hace una segunda llamada para obtener la lista de miembros (getMembers
). Esa lista se analiza miembro a miembro (processMembers
), y compone un mensaje con la lista de usuarios. Si la variable debug_mode
–también definida en el fichero de configuración– es true
, saca la lista por pantalla. Si es false
, envía el mensaje. Finalmente, el bot corta la conexión.
Tener node instalado en el ordenador (yo estoy tirando de 14.15.x) y una cuenta en Discord.
Lo primero es crear una app de Discord, en https://discord.com/developers/applications y apuntar el CLIENT ID en algún lado. No hace falta rellenar ningún campo más.
El siguiente paso es seleccionar Bot en el menú de la izquierda. Aquí tenemos que hacer tres cosas:
- Ponerle un nombre al bot.
- Apuntar el TOKEN en algún lado.
- Activar el switch "Server members intent". En otro caso, no se puede acceder a la lista de usuarios, pero no da error y es un quebradero de cabeza hasta que te das cuenta. A lo mejor me pasó a mí.
Esto es un poco mágico, y seguro que hay un sitio desde donde se puede hacer directamente, el caso es que hay que poner esta URL en el navegador, sustutuyendo CLIENTID por el número que apuntamos en el paso 1.
https://discord.com/oauth2/authorize?client_id=**CLIENTID**&scope=bot
Se abrirá una página de Discord preguntándonos a qué servidor queremos asociar el bot. Hay que elegir uno del desplegable. Si más adelante queremos asociarlo a más servidores, volvemos a abrir la página y vamos seleccionando de uno en uno.
También necesitamos el ID del canal donde se va a ejecutar el bot. Lo más cómodo es, en la aplicación de escritorio, ir a Ajustes de usuario / apariencia / Avanzado y activar el switch "Modo desarrollador". Una vez activado, haciendo clic derecho sobre el nombre de un canal, de un usuario o de un servidor, aparece una opción más para obtener el ID de ese objeto.
Con el código descargado, hay que ejecutar npm install
para descargar los módulos correspondientes. Además, en el fichero config_example.js
hay que hacer los siguientes cambios:
- Renombrar el fichero como
config.js
- Rellenar el campo
config.bot_token
con el valor que copiamos en el punto 2.2 - Rellenar el campo
config.valid_channel
con el ID del canal que copiamos en el punto 4.
Inicialmente, el bot está en modo debug (config.debug_mode = true;
en el fichero config.js
) para comprobar el funcionamiento sin sembrar el caos en el canal.
Al ejecutar node pontefotobot.js
, deberíamos obtener una salida como esta: la lista de usuarios humanos (no bots) que están en el canal indicado y que no han cambiado el avatar por defecto.
Una vez que hemos comprobado que todo funciona, basta con cambiar desactivar el modo debug (config.debug_mode = false;
) para que cada vez que ejecutemos el bot, aparezca la información en el canal.
Para no tener que ejecutar el bot manualmente –y teniendo acceso a un servidor Unix– bastaría con añadir una línea como ésta.
35 14 * * * node /ruta/al/fichero/pontefotobot.js
En este caso, el bot se ejecutaría todos los días a las 14:35.
El empujón para hacer el bot viene de Daniel Shiffman y su serie "How to make a Discord bot with discord.js"
https://www.youtube.com/watch?v=7A-bnPlxj4k&list=PLRqwX-V7Uu6avBYxeBSwF48YhAnSn_sA4