Discord服务器默认权限用户无法使用无权限要求的JDA命令
Discord JDA 命令默认权限不生效问题解决
问题分析
你设置commandone为DefaultMemberPermissions.ENABLED,但默认权限组用户仍无法访问,管理员可正常使用两个命令,核心原因大概率是服务器命令权限被手动覆盖或者JDA权限枚举的使用场景不匹配。
解决方案
检查服务器端命令权限配置
打开Discord服务器设置 → 「整合」→ 「命令」,找到你的机器人对应的commandone命令。若该命令被手动设置为仅特定角色/用户可访问,需改回「允许所有人使用」的默认状态。替换权限枚举为
DefaultMemberPermissions.EMPTYDefaultMemberPermissions.ENABLED的设计是授予所有成员使用权限,但部分场景下Discord的权限继承逻辑会出现冲突。改用EMPTY可明确表示该命令无需任何权限,所有人默认可访问:jda.awaitReady(); jda.upsertCommand("commandone", "This is command 1").setDefaultPermissions(DefaultMemberPermissions.EMPTY).queue(); jda.upsertCommand("commandtwo", "This is command 2").setDefaultPermissions(DefaultMemberPermissions.DISABLED).queue();重新同步命令缓存
若旧命令的权限缓存未更新,可先清空现有命令再重新注册:// 先删除所有现有命令 jda.retrieveCommands().queue(commands -> { commands.forEach(cmd -> cmd.delete().queue()); // 删除完成后重新注册命令 jda.upsertCommand("commandone", "This is command 1").setDefaultPermissions(DefaultMemberPermissions.EMPTY).queue(); jda.upsertCommand("commandtwo", "This is command 2").setDefaultPermissions(DefaultMemberPermissions.DISABLED).queue(); });确认机器人角色权限
进入服务器设置 → 「角色」→ 找到机器人的角色,确保「使用应用命令」权限已勾选开启。
内容的提问来源于stack exchange,提问作者Ben Verbraecken
相关产品推荐
相关产品推荐

