You need to enable JavaScript to run this app. Discord.py开发的Discord机器人命令已执行却提示不存在问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py开发的Discord机器人命令已执行却提示不存在问题求助

Discord.py 自定义命令提示不存在的问题定位
  • 最核心的执行顺序错误:bot.run('token') 被放置在所有自定义命令、自定义事件的定义之前。Python 自上而下逐行执行代码,bot.run() 是阻塞式的连接循环,程序运行到这行后就会持续维持和Discord的连接,后续所有被@bot.command、@bot.event装饰的代码完全不会被执行,相当于这些命令根本没有被注册到bot的命令列表中,自然会触发“命令不存在”的报错。
  • 就算调整了代码顺序,当前代码中存在多处拼写、逻辑错误,会直接导致运行异常:
    • ctx.channel.purge(Limit = amount) 参数名大小写错误,discord.py 中purge方法的数量参数是小写开头的limit,Python对参数大小写敏感,传大写参数会直接报参数不存在的TypeError
    • 自动审核逻辑中if word in msg.context 属性名拼写错误,消息内容的存储属性是msg.content,不存在context属性,禁词检测逻辑永远无法触发
    • clear命令的回复内容await ctx.reply(f'Deleted {clear} messages') 错误引用了函数对象本身,没有使用实际存储删除数量的变量amount,会在回复中打印函数对象的内存地址,和实际删除数量完全不符
    • on_message_delete 事件中写msg.send(...) 逻辑错误,已删除的消息对象本身没有发送消息的方法,需要通过消息关联的频道对象msg.channel.send(...) 才能在原频道发送提醒
    • on_member_join 的参数名错拼为memeber,和事件回调传递的member参数名不匹配,后续添加欢迎消息逻辑时会直接触发变量未定义的错误
    • 自定义on_message 事件虽然写了await bot.process_commands(msg),但因为这段逻辑定义在bot.run 之后根本没有被加载,就算调整位置,也必须保留这行调用,否则所有自定义命令都会被on_message事件拦截,完全无法触发。

正确的代码结构顺序为:导入依赖→初始化bot实例→定义全局常量→通过装饰器逐个定义所有事件、自定义命令→最后一行调用bot.run(你的机器人token)启动bot。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 19:45:02