首页 > 解决方案 > 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"))
}

标签: discord.js

解决方案


方法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);
        }
    }
});

推荐阅读