You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.js v13中Collection的hasAny()方法返回结果不正确问题

问题根因

你对hasAny方法的传参方式有误,这不是@discordjs/collection的bug:
hasAny方法接收的是多个独立的字符串参数,而非一个包含所有待查ID的数组。你直接传入adminRoles数组对象,相当于只传入了一个非字符串类型的参数,自然无法匹配到角色ID,因此始终返回false。
另外你代码中还有一个冗余写法:guild.members.cache.get(id)是同步操作,不需要加await关键字。

修正方案

方案1:使用扩展运算符展开数组参数

直接在数组前加...将数组元素展开为独立参数,符合hasAny的传参要求:

module.exports = {
    getStaffPermissionFlags(guild, id){
        const adminRoles = ['600912549570936833'];
        const moderatorRoles = ['659905403458682937'];

        const member = guild.members.cache.get(id);
        if(!member) return;
        return{
            admin: !!member.roles.cache.hasAny(...adminRoles),
            moderator: !!member.roles.cache.hasAny(...moderatorRoles)
        }
    },
    execute(client){
        client.permissionsHandler = {}
        client.permissionsHandler.getStaffPermissionFlags = this.getStaffPermissionFlags;
    }
}

方案2:使用Array.some兼容写法

如果你不想依赖hasAny方法,也可以用原生数组方法实现相同逻辑,兼容性更强:

admin: adminRoles.some(roleId => member.roles.cache.has(roleId)),
moderator: moderatorRoles.some(roleId => member.roles.cache.has(roleId))

调用方式说明

你的原有调用逻辑不需要做任何修改,修正工具方法后即可正常返回预期的布尔值结果。

内容的提问来源于stack exchange,提问作者Finbar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:06:03