角色检查器机器人-Discord.js-ReferenceError:成员未定义

时间:2020-09-02 16:40:59

标签: javascript node.js discord.js bots

我正在尝试为我的Discord服务器设置一个机器人。基本上,只要有人在特定频道(帮助频道)上键入“测试”,该漫游器就会显示其角色。如果他们扮演角色,例如Baker,则机器人会说:“您已经准备好,享受他们的甜蜜蛋糕!”。如果没有,该机器人将说“您没有Baker角色。”

这是我的代码:

client.on('message', (message) => {
 if (message.content === 'test') {
  if (member.roles.cache.some((role) => role.name === '<Baker>'))
   message.reply("You're all set , enjoys them sweet cakes !");
  else message.reply('You do not have the Baker role.');
 }
});

我无法正常工作;错误日志说:

ReferenceError: member is not defined.

此外,我在服务器上有多个角色(Baker,Tester,Chief等)。那么,我必须为每个代码编写代码吗?

2 个答案:

答案 0 :(得分:1)

您收到此错误,因为实际上member尚未定义。相反,您将要使用message.member


关于第二个问题,可能是。我想到的是将创建每个角色名称的数组,然后创建一个for...of循环。

const roles = ['<Baker>', '<Dancer>', '<Programmer>', '<Actor>'];

// iterate a loop through all elements in the array
for (role of roles) {
 if (message.member.roles.cache.some((r) => r.name === role))
  console.log(`${message.author.username} has the ${role} role.`);
}

您还可以使用.filter()方法。

const roles = ['<Baker>', '<Dancer>', '<Programmer>', '<Actor>'];

console.log(
 `Out of the roles in the array, ${
  message.author.username
 } has these roles: ${roles
  .filter((role) => message.member.roles.cache.some((r) => r.name === role))
  .join('\n')}`
);

答案 1 :(得分:0)

没有定义

member是正确的。如果要使成员成为发起命令的人,则需要使用message.member,如果要获得指定的成员,则可以使用message.guild.members.cache.get(<user id here>)

然后您可以通过使用角色ID检查角色来缩短代码,看起来像if(message.member.roles.cache.has(<role id>)。这也将阻止检查具有相同名称的角色