Imagen de los usuarios que se muestran como indefinidos . ¿Quiero mostrar los nombres de usuario en lugar de hacer ping al usuario en la inserción de la tabla de clasificación? En este punto, no tengo idea de qué hacer, le pedí ayuda a la gente y no pude resolverlo. La imagen dice indefinido hasta que los miembros chatean.
Archivo de comandos Leaberboard
let UserJSON = JSON.parse(Fs.readFileSync("./DataBase/users.json")); var Sorted = Object.entries(UserJSON).sort((a, b) => b[1].money- a[1].money); if (Sorted.length > 10) Sorted = Sorted.slice(0, 10); var LBString = ""; Sorted.forEach(user => { LBString += `${client.users.cache.find(u => u.id == user[0])} - ${user[1].money}\n`; }); var LBEmbed = new Discord.MessageEmbed() .setColor('#FFFFFF') .setTitle("**Coins Leaderboard**") .setDescription(LBString); message.channel.send(LBEmbed); client.channels.cache.get('941016208940077086').send(`${message.author.username} has used $coinslb`) //users.json file {"599675959888707594":{"money":492,"lastbeg":1644580691540,"lastwork":1644580757380},"617797297924866093":{"money":0,"lastbeg":0,"lastwork":0}}Quiero que la tabla de clasificación muestre nombres de usuario que no sean @ ellos en la inserción
Después user[0]) , coloque .username para obtener solo el nombre de usuario, así:
LBString += `${client.users.cache.find(u => u.id == user[0]).username} - ${user[1].money}\n`; Además, muestra undefined cuando no han chateado antes porque no están en su base de datos. Puede obtener el gremio (servidor) en el que se encuentra y buscar al miembro por ID, en lugar de la memoria caché:
guild.members.fetch('user_id_here').username;Me di cuenta de que si lo agrega DESPUÉS de que haya algo en users.json, se mostrará como indefinido, por lo que cuando agregue el nombre de usuario, debe restablecer sus usuarios.json