在 guildMemberUpdate discord.js 上分配角色时遇到问题

时间:2021-03-16 00:36:20

标签: javascript node.js discord discord.js

我目前正在为具有第三方年龄验证的服务器开发一个不和谐机器人,在他们更新并添加经过验证的角色之后。

然后我想根据单独的识别角色应用另一个角色。但是我一直遇到部分代码未定义或不是函数的问题,所以我真的被卡住了。

picture of code

bot.on('guildMemberUpdate', (oldMember, newMember) => {
    if(oldMember.roles !== newMember.roles) {
      if(newMember.roles.cache.some(r => r.name === "Verified")) {
        if(newMember.roles.cache.some(r => r.name === "Workshop Devotee")) {
          let role1 = newMember.guild.roles.cache.some(role => role.name === "Verified Workshop Devotee");
          newMember.guild.cache.get(newMember.author.id).roles.add(role1);
        }
        else if (newMember.roles.cache.some(r => r.name === "Workshop Helpers")) {
          let role2 = newMember.guild.roles.cache.some(role => role.name === "Verified Workshop Helpers");
          newMember.guild.cache.get(newMember.author.id).roles.add(role2);
        }
        else if (newMember.roles.cache.some(r => r.name === "Workshop Supporters")) {
          let role3 = newMember.guild.roles.cache.some(role => role.name === "Verified Workshop Supporters");
          newMember.guild.cache.get(newMember.author.id).roles.add(role3);
        }
        else{
          return;
        }

1 个答案:

答案 0 :(得分:0)

这段代码有两个主要错误,这就是它无法工作的原因。

首先,您使用 .some() 方法获取 role 对象,但是 .some() 仅检查列表中是否存在某项,并返回 true 或 false .相反,您应该使用 .get() 方法来获取角色。

let role1 = newMember.guild.roles.cache.get(role => role.name === "Verified Workshop Devotee");

我能看到的另一个错误是您获取 member 对象以添加角色的地方。您出于某种原因尝试使用 guild(成员 ID)获取 newMember.author.id 对象,因此这将返回错误。相反,你可以写

newMember.guild.members.cache.get(newMember.author.id).roles.add(role1);

但是,此代码也是多余的,因为您已经拥有要向其添加角色的成员的 member 对象 - 它的 newMember。因此,您可以改为编写

newMember.roles.add(role1);