I had a userinfo command in v12, but i made a fully new bot in v13 and i don't know if i can use the same code again. I tried using this:
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.
The MessageEmbed.addField() method accepts a string as its second parameter (the field's value). Your listedRoles is an array, you can use Array.join() to convert it into a string.
.addField("Roles: ", listedRoles.join(","))
Example working code:
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]});
}
});
Tested using discord.js ^13.1.0.