Discord.js - 删除所有包含角色的用户的命令

Posted

技术标签:

【中文标题】Discord.js - 删除所有包含角色的用户的命令【英文标题】:Discord.js - Command to Remove All Users Containing Role 【发布时间】:2021-06-28 22:54:36 【问题描述】:

我知道您可以从用户中删除某些角色,并从用户中删除所有角色,但我正在考虑做相反的事情。我查看了这个guide,它提供了一种检索所有具有特定角色的人的方法。似乎您可以操纵集合/地图来遍历每个成员并删除角色。但是,我似乎无法做到这一点。

我已经硬编码了我要定位的一个特定角色以及应该触发该命令的消息。

我一直在尝试的当前代码(似乎只有在只有一个人分配该角色时才有效):

if (msg.startsWith('!new round')) 
    //check for everyone and remove the role
    //roleID is just the roleID number string; I've stated it outside the if loop, for other command use cases as well
    let membersWithRole = message.guild.roles.cache.get(roleID).members;
    console.log(membersWithRole);
    for (let member of membersWithRole) 
        let mem = member[1]
        mem.roles.remove(role).catch(console.error);
        message.reply("Everyone with the jail role is now back in the game!");    
    


底线:给定具有指定角色的“公会”成员列表的集合(在指南中提供),我可以遍历列表* 以从每个成员中删除角色吗?

*我没有找到包含成员的列表,但它可能是对象本身,所以整个集合

【问题讨论】:

【参考方案1】:

你需要学习discord.js的文档 是的,你可以通过遍历所有成员来做到这一点。

if(msg.startsWith('!new round'))
    console.log('command used by '+msg.author);
    let role =msg.guild.roles.cache.get(roleId);
    role.members.each(member=>
        member.roles.remove(role);
    );
    console.log('removed role from all members');


如果你想从所有成员中删除角色,那么为什么不只是删除角色呢? 删除角色:

msg.guild.roles.cache.get(roleId).delete();

【讨论】:

我不会删除该角色,因为我将不得不再次重新使用该角色,而且我不确定一旦我重新添加该角色,拥有该角色的人是否仍会保留它。谢谢!

以上是关于Discord.js - 删除所有包含角色的用户的命令的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 删除所有成员角色

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

Discord.js,通过数组中的 ID 查找用户是不是具有角色

Discord.js:只有一种反应

如何使用 discord.js 创建角色

如何隐藏 DiscordAPIError (discord.js) (node.js)