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

DiscordJS中检查用户是否拥有指定角色的逻辑失效求助

问题排查与修复

你的核心问题是权限判断的对象搞反了——原代码检查的是机器人自身是否拥有Handlers角色,而不是执行命令的用户。

错误原因

guild.members.me指向的是当前机器人在服务器中的成员实例,所以你的判断逻辑变成了"如果机器人没有Handlers角色,就拒绝用户的命令",这完全不符合需求。

修复后的代码

把判断对象换成执行命令的用户(即interaction.member),修改后的代码如下:

case "lock":
    // 先检查服务器是否已配置Handlers角色ID
    if (!docs?.Handlers) {
        return interaction.reply({ content: "服务器未配置Handlers角色", ephemeral: true });
    }
    // 检查执行命令的用户是否拥有指定角色
    if (!interaction.member.roles.cache.some((r) => r.id === docs.Handlers)) {
        return interaction.reply({ content: "You don't have the permissions for that", ephemeral: true });
    }
    // 其余代码...

关键改动说明

  • 用interaction.member替代guild.members.me:interaction.member是触发命令的用户在当前服务器的成员对象,其roles.cache包含用户所有已拥有的角色,这样才能正确校验用户的权限。
  • 增加docs?.Handlers前置判断:避免因服务器未配置Handlers角色ID导致的逻辑错误,提前给用户明确提示。

这样修改后,无对应角色的用户执行命令会收到权限不足提示,拥有角色的用户就能正常执行锁票操作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:05:01