discord.js - 从所有成员中删除特定角色

Posted

技术标签:

【中文标题】discord.js - 从所有成员中删除特定角色【英文标题】:discord.js - remove a specific role from all members 【发布时间】:2020-11-03 18:37:33 【问题描述】:

我正在尝试从许多人中删除我的公会中的角色。然而,并非公会中的每个人都有这个角色,而且他们的数量大量

message.guild.members.cache.forEach(member => 
  member.roles.remove("12345678901234");
);

此代码有效,但效率不高。上面的代码很慢。你有更好的代码吗?谢谢!

【问题讨论】:

【参考方案1】:

我会删除该角色,然后重新创建它。

const role = message.guild.roles.cache.get("RoleID");
message.guild.roles.create(
data: 
name: role.name,
color: role.color,
hoist: role.hoist,
position: role.position,
permissions: role.permissions,
mentionable: role.mentionable

)
role.delete('I had to.')

它的工作速度非常快,比手动抓取每个成员并删除角色要快得多,尤其是对于大型服务器。

【讨论】:

【参考方案2】:
const Role = message.guild.roles.cache.get("RoleID");
Role.members.forEach((member, i) =>  // Looping through the members of Role.
    setTimeout(() => 
        member.roles.remove(Role); // Removing the Role.
    , i * 1000);
);

我认为由于 Discord 的 API 限制,您的代码很慢。您的代码没有延迟,这意味着您的代码将立即执行。

我提供的代码将每 1 秒从一个成员中删除一个角色。

如果要立即删除角色,则需要将其删除。它将从所有人中删除。

【讨论】:

你可以从他的问题看出这不是他的意思。他正在一个巨大的公会中循环,所以它需要永远是可以理解的。而你实际上只是让它慢得多。 @MakeHellTal Discord 有一个rate limit。试图绕过此限制将暂停请求,直到经过一定的秒数。 forEach 循环的运行速度超过了 Discord 的 API 限制,这将导致 Discord 暂停请求。

以上是关于discord.js - 从所有成员中删除特定角色的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 获取所有具有特定角色的成员

Discord.js V12 如何显示具有特定角色的所有成员?

Discord.js 删除所有成员角色

Discord.js 如何列出具有特定角色的所有成员的显示名称

如何在“就绪”时找到所有具有特定角色的成员?不和谐.js

如何检查具有特定角色的成员是不是存在于 discord.js 的特定语音通道中