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

Discord机器人部分斜杠命令无法在命令树中注册

解决Discord机器人模块化后新斜杠命令无法注册的问题

排查模块导入与命令定义

  • 确认register_commands函数已导入所有新命令所在的模块(如reactions.py、analyticsmessage.py),未导入的模块会被Discord.py忽略
  • 检查模块内的命令装饰器是否正确:必须使用@app_commands.command()而非传统的@bot.command(),且每个命令需明确绑定到命令树对象

检查注册逻辑完整性

  • 验证register_commands是否遍历并注册了所有新命令,而非仅注册原有的language命令。示例正确写法:
    # 从模块导入所有命令对象
    from commands import language, reactions, analyticsmessage, sync
    
    def register_commands(bot):
        # 遍历所有命令并注册,同时打印日志
        for cmd in [language.cmd, reactions.cmd, analyticsmessage.cmd, sync.cmd]:
            bot.tree.add_command(cmd)
            print(f"已注册命令: {cmd.name}")
    
  • 确保全局同步代码await bot.tree.sync()在所有命令注册完成后执行,提前同步会导致新命令未被纳入同步范围

调试日志定位问题

  • 在每个新命令模块的定义末尾添加加载日志,确认模块被正确加载:
    # reactions.py示例
    @app_commands.command(name="reactions")
    async def reactions_cmd(interaction):
        # 命令逻辑
        await interaction.response.send_message("Reactions命令已执行")
    
    print("已加载模块: reactions")
    
  • 查看register_commands中的注册日志输出,若未出现新命令名称,说明注册逻辑未遍历到目标命令,需检查导入路径或命令对象的引用是否正确

验证命令属性与权限

  • 确认新命令的name参数为小写且无空格,Discord斜杠命令名强制要求小写格式
  • 检查机器人应用权限是否包含applications.commands,该权限是注册斜杠命令的必要条件
  • 调试阶段优先使用服务器级同步(await bot.tree.sync(guild=discord.Object(id=你的服务器ID))),全局同步需等待Discord CDN刷新(最长1小时)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:03:10