【问题标题】:Discord.js adding role upon guildMemberAdd doesn't always workDiscord.js 在 guildMemberAdd 上添加角色并不总是有效
【发布时间】:2021-06-02 00:59:06
【问题描述】:

我遇到了 Discord.js v12 和 Node.js v15.7.0 的问题。

代码如下:

client.on('guildMemberAdd', member => {
  var i = "336796839582105600";
  var role = member.guild.roles.cache.find(r => r.id === i);
  member.roles.add(role).then(console.log('Role added: ' + member.id));
});

代码似乎在我用于开发的不和谐服务器上完美运行。 但是,当在具有超过 2500k 用户的不和谐服务器上用于生产时,代码会被执行,审计日志显示机器人按预期添加角色,但是当您查看用户配置文件时,直到有人授予手动将角色分配给新用户。

这种行为并不总是发生,有时会添加角色,有时不会。

机器人配置的 Privileged Gateway Intent 均已启用(服务器成员 Intent 和 Presence Intent)。

【问题讨论】:

    标签: node.js discord.js


    【解决方案1】:

    首先,我建议你使用 Node 的稳定版本(即 14)它可能会导致许多意想不到的事情,除非你知道你在用 Node v15 做什么。

    您无需获取角色对象即可将角色添加到新成员。

    您可以简单地使用角色 ID,我在使用角色 ID 添加角色时从未遇到任何问题。

    member.roles.add("ROLE_ID").then(console.log('Role added: ' + member.id));
    

    【讨论】:

    • 我在装有 NodeJs v14.15.1 的个人电脑上运行了数周的代码。同样的问题正在发生。我正在尝试您的建议,并使用角色 id 而不是对象添加角色,但老实说,我认为这不会打扰任何事情。
    • 使用稳定的节点版本和角色ID而不是角色对象是我能想到的。也许你试图使用ID查找的角色没有被缓存?
    【解决方案2】:

    根据来自贡献者的response

    审核显示机器人添加了角色,但是当您查看新用户的个人资料时,没有显示任何角色。

    这表明这是一个客户端问题。我自己也遇到过这个问题,客户没有显示机器人应用的角色。但是,从 API 角度来看,请求通过、完成并相应地添加了角色。您(或我们,在图书馆层面)无法影响查看客户端。

    因此这不是库问题。

    如果没有人提供解决方案,我会将这篇文章标记为答案。

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2023-03-15
      • 2020-11-30
      • 2021-05-03
      • 2021-02-02
      • 2022-01-18
      • 2021-04-10
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多