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
相关产品推荐
相关产品推荐

