Discord.js如何检测指定用户是否拥有某角色?现有代码应如何修改?
代码问题与修改方案
核心问题点
memberTarget.roles.cache.has()方法仅接收角色ID作为参数,你现有代码传入了完整的角色对象,会导致判断始终为false- 没有做异常场景校验,未提及用户、找不到指定角色时代码会直接抛出错误
- 直接从缓存读取成员存在未命中的可能,增加fetch逻辑可兼容缓存缺失的情况
修改后可运行代码
// 注意:使用await需要在外层函数前加async关键字 if (message.member.permissions.has("MANAGE_ROLES")) { // 校验是否提及了目标用户 const mentionUser = message.mentions.users.first(); if (!mentionUser) return message.channel.send("请先@你要检测的目标用户"); // 拉取成员,兼容缓存未命中的场景 const memberTarget = await message.guild.members.fetch(mentionUser.id).catch(() => null); if (!memberTarget) return message.channel.send("未在本服务器找到该用户"); // 查找目标角色 const role = message.guild.roles.cache.find(role => role.name === "Awesome Role Name"); if (!role) return message.channel.send("未找到指定名称的角色"); // 检测角色,传入角色ID if (memberTarget.roles.cache.has(role.id)) { message.channel.send(`${memberTarget} 拥有该角色!`); } else { message.channel.send(`${memberTarget} 没有该角色!`); } }
如果你调用这段代码的外层函数没有添加
async声明,需要先补充async关键字,否则await语法会报错。
内容的提问来源于stack exchange,提问作者Pepega Pingu
相关产品推荐
相关产品推荐

