Tenía un comando de información de usuario en v12, pero hice un bot completamente nuevo en v13 y no sé si puedo usar el mismo código nuevamente. Intenté usar esto:
let mem = message.mentions.members.first() || message.member const filteredRoles = mem.roles.cache.filter(role => role.id != message.guild.id) const listedRoles = filteredRoles.sort((a, b) => b.position - a.position).map(role => role.toString()) //...code... .addField('Roles:', listedRoles)Error:
C:\Users\-----\-----\-----\node_modules\discord.js\src\util\Util.js:413 if (typeof data !== 'string') throw new error(errorMessage); ^ RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values must be non-empty strings.El método MessageEmbed.addField() acepta una cadena como su segundo parámetro (el valor del campo). Su listedRoles es una matriz, puede usar Array.join() para convertirla en una cadena.
.addField("Roles: ", listedRoles.join(","))Ejemplo de código de trabajo:
client.on("messageCreate", async (message) => { if (message.author.id == client.user.id) return; if (message.content.startsWith("!roles")) { const member = message.mentions.members.first() || message.member; const filteredRoles = member.roles.cache.filter(role => role.id != message.guild.id); const listedRoles = filteredRoles.sort((a, b) => b.position - a.position).map(role => role.toString()); const embed = new Discord.MessageEmbed() .setTitle(member.user.username) .addField("Roles", listedRoles.join(",")); message.channel.send({embeds: [embed]}); } }); Probado usando discord.js ^13.1.0 .