检查用户是不是具有 x 角色之一,然后从他们中删除该角色

Posted

技术标签:

【中文标题】检查用户是不是具有 x 角色之一,然后从他们中删除该角色【英文标题】:Check if a user has one of x roles, then remove that role from them检查用户是否具有 x 角色之一,然后从他们中删除该角色 【发布时间】:2020-11-20 18:00:55 【问题描述】:

我正在尝试构建一个函数,允许我检查我的 Discord 服务器中的所有成员,以查看他们是否处于一组特定角色中的一个,然后从他们中删除该角色。

        function StripRoles() //will get the players who still have roles assigned to them, and remove those roles
        const RolesArray = ['737531569165565982','737533396422754355','737533710798290974','737532883539066971','737533050925350932','737533864544567296','737534067188301854']; //here's the list of roles
        var i;
        for (i = 0; i < RolesArray.length; i++)  //loop that checks each of the roles in RolesArray
            message.guild.members.cache.forEach(member =>  //for each member of the server
                if (member.roles.has(RolesArray[i])) //if they have the role currently being checked
                    member.roles.remove(i).catch(console.error); //then remove it from them
                
           )
        
    

当我运行它时,它会返回错误:

TypeError: member.roles.has is not a function

任何帮助将不胜感激!

编辑:为我自己的个人新手参考添加了更多标签

【问题讨论】:

【参考方案1】:

你可以使用.includes:

if (member.roles.includes(RolesArray[i]))

编辑:为了帮助调试,你能做到吗:

for (i = 0; i < RolesArray.length; i++)  //loop that checks each of the roles in RolesArray
    message.guild.members.cache.forEach(member =>  //for each member of the server
        console.log(
            roles: member.roles,
            type: typeof member.roles,
            array: Array.isArray(member.roles)
        );
    )

告诉我它记录了什么?

好的,看看discords docs,我认为你只需要这样做:

if (member.roles.cache.has(RolesArray[i]))

【讨论】:

这只是将 TypeError 更改为 'member.roles.includes is not a function'。 哈哈,那么你需要告诉我们member.roles 是什么,我们都假设它是一个数组 请记住,我是一个完全不知道自己在做什么的新手……据我所知……这部分应该是检索成员在不和谐服务器上的角色列表.不知道这个列表是数组还是别的什么... type 出现了'object',array 出现了 false...角色提出了一堆信息: link_italic_粗体'代码'【参考方案2】:

如果member.roles 是一个列表,则使用includes 而不是has

【讨论】:

以上是关于检查用户是不是具有 x 角色之一,然后从他们中删除该角色的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot 发送后删除消息

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

检查提到的用户是不是在 discord.js 中具有角色

检查用户是不是在新的 discord.js 版本中具有角色

Discord.py:检查用户是不是具有列表中的角色 ID 不起作用

在Angular中->如何使用基于角色的访问权限检查用户是不是具有权限,并将角色保存在数据库中