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

