Datos de usuarios
En este post hablaremos de cómo manejar los datos de usuarios que la API de Discord nos da.
¿Qué y cuáles son los datos de usuarios?
Estos son las cosas como el avatar, el nickname, discriminante, ID, etc.
Obtener estos datos son útiles para banear miembros de un servidor, determinar el dueño del bot (tú), o simplemente responder un mensaje con el nombre del usuario.
En el siguiente ejemplo práctico crearemos un comando que le muestre la siguiente información de su perfil a través de un embed:
- Nombre de usuario en discord.
- Avatar.
- Fecha de creación de la cuenta.
- Estado de actividad.
- Nickname dentro del servidor.
- Roles adquiridos en el servidor.
- ID.
Obteniendo los datos
Para que nuestro bot pueda enviar toda la información, tenemos que pasarle el usuario al que va a recorrer los datos. En este caso, estaremos trabajando con los datos del usuario que envía el comando (al final del post haremos uno más completo según a quién se @mencione).
Para hacer esto, crearemos una variable para acortarnos un poco la escritura:
const user = message.author;
const member = message.member;
¿Por qué hay dos variables?
Pues, puede ser un poco complicado entenderlo de primeras, pero explicándolo resumidamente es que member
solo sirve para los datos del usuario dentro del servidor, mientras que user
es para datos del usuario en todo discord.
Creando el embed
Vamos a guardar nuestro embed en una constante para que sea fácil de entender cuando leamos el código:
const embed = new Discord.MessageEmbed()
// llenando los datos
Llenando los datos
Ahora que podemos enviar los datos más fácil, explicaré cada línea con un comentario dentro del siguiente código:
// El username del miembro como "autor" del embed más el avatar
.setAuthor('Username: ' + user.tag, user.avatarURL())
// Mostraremos el avatar del usuario en el thumbnail del embed
.setThumbnail(user.avatarURL())
// La fecha de creación de la cuenta como toLocaleDateString()
.addField('Creación de la cuenta', user.createdAt.toLocaleDateString(), true)
// El estado de actividad del usuario
.addField('Estado', user.presence.status, true)
// Si el usuario NO tiene un nickname dentro del servidor, pone "No tiene"
.addField('Apodo', member.nickname ? member.nickname : 'No tiene', true)
// Hacemos un mapeo de los roles del usuario y los separamos por nombres
.addField('Roles',
message.member.roles.cache.map(rol => '`' + rol.name + '`').join(', ')
)
.setFooter('ID: ' + user.id)
Enviar el embed
Y después de todo esto, enviamos el embed al canal con:
// Todo el código de arriba ^
message.channel.send({embed});
Código final
const user = message.author;
const member = message.member;
const embed = new Discord.MessageEmbed()
.setAuthor('Username: ' + user.tag, user.avatarURL())
.setThumbnail(user.avatarURL())
.addField('Creación de la cuenta', user.createdAt.toLocaleDateString(), true)
.addField('Estado', user.presence.status, true)
.addField('Apodo', member.nickname ? member.nickname : 'No tiene', true)
.addField('Roles',
message.member.roles.cache.map(rol => '`' + rol.name + '`').join(', ')
)
.setFooter('ID: ' + user.id)
message.channel.send({embed});
Final
Muchas gracias por leer este post, espero que te haya sido de ayuda. Recuerda que puedes seguirnos en instagram.
Happy Coding!
Discussion (11)
Hola buenas, estuve probando el código para el bot y al querer mencionar a un usuario me pone los roles del creador del discord, el código es este:
client.on("message", (message) => {
if (message.content.startsWith(prefix + "userinfo")) {
if(!usuarioMencionado) {
const user = message.author;
const member = message.member;
} else {
const miembroMencionado = message.mentions.members.first();
}
}
});
Y si cambio en el segundo condicional el member de los roles por miembroMencionado me crashea el bot y se cierra, si alguien me ayuda estaria perfecto.
Hola! Gracias por comentar 💬
En el embed del usuario mencionado, tienes que cambiar esta línea:
Por esta 👇
Y listo 🤗
hola, una cosa, si yo por ejemplo quiero ver la información de otra persona y no la mía, cual seria el codigo??
Hola! Gracias por preguntar 🤗.
Si lo que buscas es que se puedan visualizar tu información como la de otro usuario que menciones, tendrías que utilizar él método de discord.js
message.mentions.user.first()
condicionales conif...else
. Algo así:Espero te sirva 😄
Gracias pero también necesito definir el member para poder saber estadísticas del servidor, no? :3
Sí! En ese caso, al condicional de abajo agrégale esta variable:
y reemplazas los "member" por esta variable ☝️
Hola ¿me podrías ayudar con algo? Yo quisiera crear un bot tipo InviteLogger.
O sea, un bot que te cuente las invites, un comando para ver las invites de un comando ETC. Y me pregunto como sería en este caso. El mensaje sería: "(Usuario) se unió y fue agregado por: (Usuario que lo invitó)" ¿Cómo defino a ambos usuarios?
Gracias de antemano <3
hola muy buenas. solo era para pedir si tienen un codigo que al usarlo me retorne la ids y nombres de los servidores en donde se encuentra mi bot. si son tan amables
Hola! Para obtener la lista de servidores es fácil:
Me comentas qué tal 😊
Muchisimas gracias
Muy buen post! El único problema que tuve fue con el user.presence.status por alguna razón no me dejaba mostrarlo, pero lo demás todo excelente!