Discord机器人关机命令失效求助:exit()/quit()未执行
Discord机器人关机命令exit()/quit()不生效的解决办法
你遇到的问题是:shutdown命令里的print和ctx.send能正常执行,但exit()或quit()无法关闭机器人。这是因为Discord.py基于异步事件循环运行,直接用这两个方法属于强制终止,会被事件循环拦截,无法正确结束整个进程。
解决方法
优先使用Discord.py官方提供的优雅关闭方式,再结合进程终止方法确保机器人彻底退出:
修改后的代码示例
import os from discord.ext import commands @commands.has_permissions(view_audit_log=True) async def shutdown(ctx): print('Bot is shutting down') await ctx.send('@PercyJackson and @Berekyah the bot is being shut down') # 优雅关闭机器人连接,清理资源 await ctx.bot.close() # 强制终止进程,确保彻底退出 os._exit(0)
关键说明
ctx.bot.close():这是官方推荐的关闭方式,会断开与Discord网关的连接,清理所有异步任务,让事件循环正常结束。os._exit(0):如果仅用close()后进程仍未退出,调用这个方法可以直接终止当前进程(注意是os._exit,不是内置的exit)。- 若你使用的是
discord.Client而非commands.Bot,将ctx.bot.close()替换为ctx.client.close()即可。
内容的提问来源于stack exchange,提问作者Percy jackson
相关产品推荐
相关产品推荐

