首页 > 解决方案 > Discord.js 在 guildMemberAdd 上添加角色并不总是有效

问题描述

我遇到了 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 用户的不和谐服务器上用于生产时,代码被执行,审计日志显示机器人按预期添加了角色,但是当你查看用户配置文件时,没有角色出现,直到有人授予手动分配给新用户的角色。

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

机器人配置的特权网关意图都已启用(服务器成员意图和存在意图)。

标签: node.jsdiscord.js

解决方案


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

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

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

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

推荐阅读