#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. Рад, что я помог, подумайте о том, чтобы отметить мой ответ как принятый, щелкнув галочку, если это решило проблему, которую вы представили в своем вопросе. Счастливого кодирования. 😉