Python开发Discord Bot无需关闭运行进程新增命令的实现方法问询
Discord Bot 无重启新增指令可行方案
以下方案均无需退出当前终端实例、无需重启Bot进程,适配个人自用场景的安全要求:
前提说明
目前主流Python Discord Bot框架(如discord.py、nextcord)的指令注册逻辑均支持 runtime 动态修改,结合Python进程注入能力即可实现需求。
具体实现步骤
步骤1:获取当前运行Bot的进程ID
新开一个独立终端执行命令:ps aux | grep python
找到你运行Bot代码对应的进程ID,记为<pid>。
步骤2:准备新增指令的注入代码
新建临时代码文件add_cmds.py,内容参考如下,注意替换为你自己的业务逻辑,且Bot实例名要和你原有代码里的实例名保持一致:
from discord.ext import commands # 新增!foodfact指令 @bot.command(name='foodfact') async def foodfact(ctx): # 此处替换为你的食品类科普逻辑 await ctx.send("你的食品科普内容") # 新增!help指令 @bot.command(name='help') async def help_list(ctx): await ctx.send("可用指令:\n!fact 通用日常科普\n!foodfact 食品类科普\n!help 指令列表") # 注册新指令到现有Bot实例 bot.add_command(foodfact) bot.add_command(help_list)
步骤3:注入代码到运行中的Bot进程
- 回到运行Bot的原终端,按
Ctrl+Z将进程临时挂到后台(不会终止进程,也无需退出终端) - 执行命令注入代码:
pyrasite <pid> add_cmds.py(如果未安装pyrasite,在新终端执行pip install pyrasite即可,不影响运行中的Bot) - 执行
fg命令把Bot进程切回前台运行即可
替代方案(如果原有代码预留了动态配置逻辑)
如果你的!fact指令逻辑本身预留了从外部JSON/CSV文件读取科普内容的规则,你可以直接修改外部配置文件,新增foodfact对应的内容分类,在原指令逻辑里加个指令名判断,每次触发指令时自动读取最新配置,完全不需要操作进程。
内容的提问来源于stack exchange,提问作者Esvin Joshua
相关产品推荐
相关产品推荐

