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

如何为部署在Heroku的Python Discord机器人编写命令重载功能

问题根因

你遇到的问题核心是Heroku平台的运行特性导致的,和重载命令本身的逻辑无关:

  • Heroku Dyno的文件系统是临时短暂存储,只有你通过Git推送代码到Heroku远程仓库时,才会更新Dyno内部的代码文件。你本地修改Cog代码后如果没有执行推送操作,Heroku服务器上存储的Cog文件还是旧版本,此时调用重载命令只是重新加载了旧文件,自然看不到修改效果。
  • 而Repl.it属于同环境开发,你修改的代码会直接写入当前运行环境的文件系统,重载自然能读取到最新代码。

解决方案

1. 先推送代码再执行重载

所有本地修改的代码,必须先执行git push heroku 你的分支名推送到Heroku之后,再调用重载命令,才能加载到最新的代码。

2. 给重载命令增加异常捕获

你当前的代码没有错误处理逻辑,如果Cog代码存在语法错误、导入错误,重载实际已经失败但你仅通过表情判断为成功,也会出现看起来修改不生效的情况,可以修改为如下代码:

@client.command()
@commands.is_owner()
async def reloadd(ctx, extension):
    try:
        client.reload_extension(f"cogs.{extension}")
        # 如果你使用的是discord.py 2.x版本的斜杠命令,重载后需要同步命令树
        # 测试阶段建议同步到指定服务器,避免全局同步的1小时缓存
        # await client.tree.sync(guild=discord.Object(id=你的服务器ID))
        await ctx.message.add_reaction("✅")
    except Exception as e:
        await ctx.message.add_reaction("❌")
        await ctx.send(f"重载失败:`{str(e)}`")

3. 检查大小写匹配

Heroku运行环境为Linux,区分文件/文件夹名大小写,如果你本地是Windows/macOS开发环境,要确保你代码中写的Cog路径和实际文件名的大小写完全一致,比如文件名是Admin.py就不能写为cogs.admin,否则会加载失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:54:02