Discord.js guild.roles.cache.find返回未定义

时间:2020-10-30 15:59:23

标签: javascript discord discord.js

我正在尝试为不和谐的bot分配代码,以便在有人进入服务器时赋予其角色。这是我现在的代码:

client.on('guildMemberAdd', (member) => {
    let role = guild.roles.cache.find(r => r.name === "Admin");
    console.log(role);
    if(!role){
      console.log("Role doesen't exist.");
    }
    member.roles.add(role);
});

我尝试运行它,并执行以下行:console.log("Role doesen't exist.");。然后,我继续打印角色变量,但该变量未定义。有什么问题吗?

1 个答案:

答案 0 :(得分:1)

第一种方法

缓存中可能无法提供所有内容,因此您需要提取它,唯一的问题是您需要通过ID提取。

let role = guild.roles.cache.find(r => r.name === 'ADMIN') || await guild.roles.fetch('ROLEID');

来源:https://discord.js.org/#/docs/main/stable/class/RoleManager?scrollTo=fetch

第二种方法

这是一个非常棘手的解决方案,但是您可以在就绪事件中获取所有角色。

client.guilds.cache.forEach(g => {      
      g.roles.fetch();
});