【问题标题】:Discord.js guild.roles.cache.find returning undefinedDiscord.js guild.roles.cache.find 返回 undefined
【发布时间】:2020-10-31 00:08:35
【问题描述】:

我试图将代码分配给不和谐机器人,以便在某人进入服务器时为其赋予角色。这是我现在的代码:

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.");。然后我继续打印角色变量,它是未定义的。有什么问题?

【问题讨论】:

    标签: javascript discord discord.js


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

    【讨论】:

    • afaik 角色缓存在启动时填充。
    • 本应在启动时填充,但也有不缓存的情况。
    • @AlhassanRaad 那么我该如何缓存它呢?
    • @Serket 使用 RoleManager.fetch()
    • 如何找到roleid?
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2021-12-20
    • 2016-09-13
    • 2022-01-22
    • 2021-03-18
    • 1970-01-01
    相关资源
    最近更新 更多