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

discord.py命令组的子命令是否会继承父命令的装饰器配置?

discord.py 父命令组权限继承问题解答

结论

默认情况下,你给set父命令组添加的@has_permissions权限校验规则不会被其子命令/子分组自动继承。

原因说明

discord.py 的装饰器仅直接作用于被装饰的函数本身:

  • 你给set根命令挂载的权限校验,只会在用户直接调用根命令(比如/set)的时候触发
  • 当用户调用set channel这类子命令时,只会执行子命令自身挂载的校验规则,不会触发父命令的权限校验

按你当前给出的代码,普通用户无法调用根set命令,但可以无阻碍调用set channel下的所有子功能,不符合你的权限管控需求。

解决方法

方法1:直接给所有子命令/子分组单独加权限装饰器

最直接稳妥的写法,适配所有场景:

@set.group()
@has_permissions(manage_server=True)
async def channel():
  # 你的功能逻辑

方法2:抽离公共权限装饰器减少重复代码

如果子命令数量多,可以把权限规则抽成公共装饰器复用:

# 提前定义公共权限校验装饰器
manage_server_required = has_permissions(manage_server=True)

# 父命令使用
@bot.group()
@manage_server_required
async def set():
  pass

# 子命令直接复用即可
@set.group()
@manage_server_required
async def channel():
  pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:09:00