【问题标题】:Roles checker bot - Discord.js - ReferenceError: member is not defined角色检查器机器人 - Discord.js - ReferenceError:未定义成员
【发布时间】:2020-12-21 21:12:23
【问题描述】:

我正在尝试为我的 Discord 服务器设置一个机器人。基本上,每当有人向特定频道(帮助频道)键入“测试”时,机器人都会显示他们的角色。如果他们有一个角色,比如贝克,机器人会说“你准备好了,喜欢他们的甜蛋糕!”。如果他们不这样做,机器人会说“你没有 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.

另外,我在服务器上有多个角色(贝克、测试员、首席等)。那么,我必须为每个人编写代码吗?

【问题讨论】:

    标签: javascript node.js discord.js bots


    【解决方案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')}`
    );
    

    【讨论】:

    • 它有效!!!!非常感谢 Lemme 也弄乱了 .filter() 方法,祝福你,先生
    【解决方案2】:

    member 没有定义是正确的。如果你想让成员成为发起命令的人,你需要使用message.member,如果你想获得一个指定的成员,你可以使用message.guild.members.cache.get(&lt;user id here&gt;)

    您可以通过使用角色的 id 检查角色来缩短代码,然后它看起来像if(message.member.roles.cache.has(&lt;role id&gt;)。它还会阻止检查具有相同名称的角色

    【讨论】:

    • 我试过 if (message.member.roles.has(574540364015337473)) 并得到 TypeError: message.member.roles.has is not a function 但不用担心我现在可以正常工作了,非常感谢你
    • 你必须使用message.member.roles.cache.has()
    • 另外,您必须输入 '574540364015337473' 作为参数,而不是 574540364015337473ID 被映射为字符串。
    • 明白了,让我再试一次,谢谢你好心的先生!
    猜你喜欢
    • 2019-07-31
    • 1970-01-01
    • 2020-09-19
    • 2020-09-08
    • 2020-09-14
    • 2021-05-10
    • 2021-07-25
    • 2022-10-23
    • 2021-09-03
    相关资源
    最近更新 更多