discord.js - Discord.js 在用户角色中搜索的问题
问题描述
我正在尝试创建一个命令,在这种情况下它被 / 攻击激活,我正在寻找的机制是,如果目标用户(提到的)具有作为一种盾牌的角色(Lavander),则发送嵌入消息说防御并从你身上移除角色(打破盾牌),如果目标用户(提到)没有盾牌角色,只需发送一条不同的消息说被攻击。这是我一直在做的代码,但即使它没有给出错误,它也对我不起作用,只是在使用它时,它会忽略角色检测并出于某种我不知道的原因发送两条消息,有人可以帮忙我?
if (message.content.startsWith('/attack')) {
let Lavander = message.guild.roles.cache.find(role => role.name == "Lavander");
let member = message.mentions.members.first();
if (message.member.roles.cache.has(Lavander)) return
member.roles.remove(Lavander);
message.channel.send(new Discord.MessageEmbed()
.setColor("GOLD")
.setTitle(message.author.username)
.setDescription("Defended"))
message.channel.send(new Discord.MessageEmbed()
.setColor("GOLD")
.setTitle(message.author.username)
.setDescription("Attacked"))
}
解决方案
方法collection.has
需要 id 作为属性。所以你需要这样的想法:
bot.on('message', (message) => {
if (message.content.startsWith('/attack')) {
let lavander = message.guild.roles.cache.find((role) => role.name === 'Lavander');
let member = message.mentions.members.first();
if (!member || !lavander) return message.reply('No role or member');
if (message.member.roles.cache.has(lavander.id)) {
member.roles.remove(lavander);
let embed = new Discord.MessageEmbed()
.setColor('GOLD')
.setTitle(message.author.username)
.setDescription('Defended');
} else {
let embed = new Discord.MessageEmbed()
.setColor('GOLD')
.setTitle(message.author.username)
.setDescription('Attacked');
message.channel.send(embed);
}
}
});