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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:54:04