Роли участников в v13?

#javascript #string #discord.js

Вопрос:

У меня была команда userinfo в версии 12, но я создал полностью нового бота в версии 13, и я не знаю, смогу ли я снова использовать тот же код. Я попытался использовать это:

 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)
 

Ошибка:

 C:Users---------------node_modulesdiscord.jssrcutilUtil.js:413
    if (typeof data !== 'string') throw new error(errorMessage);
                                        ^

RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values must be non-empty strings.
 

Комментарии:

1. Попробуйте войти в консоль listedRoles . Что он выводит?

Ответ №1:

MessageEmbed.addField() Метод принимает строку в качестве своего второго параметра (значения поля). Ваш listedRoles массив-это массив, который вы можете использовать Array.join() для преобразования его в строку.

 .addField("Roles: ", listedRoles.join(","))
 

Пример рабочего кода:

 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: });
    }

});
 

введите описание изображения здесь

Протестировано с использованием discord.js ^13.1.0 .

Комментарии:

1. Спасибо за объяснение и за то, что вы даже протестировали его! Я надеюсь, что у вас будет/был хороший день 🙂

2. Рад, что я помог, подумайте о том, чтобы отметить мой ответ как принятый, щелкнув галочку, если это решило проблему, которую вы представили в своем вопросе. Счастливого кодирования. 😉