
discord 支持为 slash 命令设置细粒度权限,使特定命令仅对拥有指定角色(如管理员)的用户可见和可执行,普通用户则完全无法看到该命令列表。
discord 支持为 slash 命令设置细粒度权限,使特定命令仅对拥有指定角色(如管理员)的用户可见和可执行,普通用户则完全无法看到该命令列表。
在 Discord 中,Slash 命令默认对服务器内所有成员可见(前提是具备基础使用权限),但自 2022 年起,Discord 已原生支持基于角色或用户的命令级权限控制——无需代码实现权限逻辑,也不依赖 interaction.guild_permissions 运行时校验。真正的权限控制需在 Discord 开发者平台中完成配置。
✅ 正确配置步骤(Web 端操作)
- 进入你的 Discord 服务器 → 服务器设置
- 左侧菜单选择 “集成”(Integrations)
- 找到你的 Bot 应用 → 点击右侧 “管理”(Manage)按钮
- 在打开的页面中,展开 “应用程序命令”(Application Commands)列表
- 找到目标 Slash 命令(如 /admin-ban),点击其右侧的 “编辑权限”(Edit Permissions)
- 在弹出面板中,取消勾选 “@everyone”,然后添加特定角色(如 Admin、Moderator)并赋予 Use Application Commands 权限
⚠️ 注意:该权限独立于频道权限,且仅影响命令是否出现在自动补全列表中。即使用户手动输入 /xxx,若无权限仍会收到 “该应用命令不可用” 错误。
? 补充建议(增强健壮性)
虽然 Discord 前端已隐藏命令,但为防异常调用或权限绕过,推荐在代码中做二次校验:
# 示例:使用 discord.py 2.0+
@tree.command(name="admin-reset", description="重置系统配置(仅管理员)")
@commands.has_role("Admin") # 或使用 interaction.guild.get_role(xxx) 判断
async def admin_reset(interaction: discord.Interaction):
if not interaction.user.guild_permissions.administrator:
await interaction.response.send_message("❌ 你没有执行此命令的权限。", ephemeral=True)
return
await interaction.response.send_message("✅ 系统已重置。", ephemeral=True)
? 提示:ephemeral=True 确保响应仅对触发者可见,避免敏感操作暴露给他人。
? 总结
- Slash 命令的可见性与可执行权限必须通过 Discord 后台配置,而非仅靠代码判断;
- 角色权限设置后,普通用户既看不到命令,也无法调用(Discord 网关层拦截);
- 服务端仍建议做权限校验,兼顾安全性与调试友好性;
- 权限变更即时生效,无需重启 Bot 或重新注册命令。











