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

已注册Discord应用命令无法触发:CommandNotFound错误求助

解决方法

首先明确:Discord的应用命令(斜杠命令)和discord.py的前缀命令是完全独立的两套系统,不能混用。你已经在服务器注册了应用命令,就得用应用命令的装饰器编写处理逻辑,而非前缀命令的@bot.command()。

正确实现步骤

  1. 替换装饰器
    把前缀命令的装饰器换成应用命令的@bot.tree.command(name="huncho"),这样才能关联到你已注册的应用命令。示例代码:
@bot.tree.command(name="huncho")
async def huncho(interaction: discord.Interaction):
    await interaction.response.send_message("这是huncho应用命令的响应")
  1. 同步命令(可选但关键)
    如果是手动注册的命令,建议在bot启动时添加同步逻辑,保证代码和Discord端的命令定义一致:
@bot.event
async def on_ready():
    # 同步指定服务器的命令,替换成你的服务器ID
    await bot.tree.sync(guild=discord.Object(id=你的服务器ID))
    print(f"{bot.user} 已上线并同步命令")

注:如果是全局命令,去掉guild参数即可,但全局命令同步可能需要1小时左右生效。

为什么未注册时能正常运行?

未注册应用命令时,你触发的是前缀命令(比如!huncho),这时@bot.command()的逻辑生效;但注册应用命令后,你触发的是斜杠命令(/huncho),Discord会寻找对应的应用命令处理逻辑,而你代码里没写,所以报错。

额外注意

  • 应用命令的处理函数必须接收interaction参数,前缀命令接收的是ctx(上下文),两者不能混用。
  • 如果需要同时支持前缀命令和斜杠命令,可以分别写两个处理函数:
# 前缀命令
@bot.command()
async def huncho(ctx):
    await ctx.send("这是前缀命令的响应")

# 应用命令
@bot.tree.command(name="huncho")
async def huncho_slash(interaction: discord.Interaction):
    await interaction.response.send_message("这是斜杠命令的响应")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:01:21