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
相关产品推荐
相关产品推荐

