我正在尝试为我的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等)。那么,我必须为每个代码编写代码吗?
答案 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>)
。这也将阻止检查具有相同名称的角色