You need to enable JavaScript to run this app. 部署到Heroku的Discord Rewrite Bot运行崩溃 本地可正常启动
优惠活动
大模型
产品
解决方案
定价
更多

部署到Heroku的Discord Rewrite Bot运行崩溃 本地可正常启动

故障根因

你看到的NameError: name 'datetime' is not defined报错和你自己的代码没有关系,也和你新增的on_message事件逻辑无关,二者只是触发时间重合:
报错栈明确显示错误发生在discord.py库的内部文件/app/.heroku/python/lib/python3.9/site-packages/discord/abc.py中,该文件在定义SnowflakeTime类型时用到了datetime,但文件本身没有编写import datetime的导入语句,属于discord.py开发分支的代码bug。
本地运行正常是因为你本地环境安装的discord.py是更早的无bug版本,而Heroku每次部署都会拉取你requirements.txt中指定的github主分支最新代码,刚好拉到了存在导入遗漏的提交,因此触发崩溃。

解决方案
  • 方案1(最推荐):固定使用稳定版discord.py,避免拉取不稳定的开发分支代码。将requirements.txt中的git+https://github.com/Rapptz/discord.py替换为稳定版依赖,示例:
discord.py>=2.3.2
youtube_dl==2020.03.08
pynacl == 1.3.0
colorlog == 4.1.0

版本号可以替换为你本地正常运行的discord.py对应版本,保证环境一致性。

  • 方案2:如果必须使用开发分支的功能,可指定拉取无bug的固定commit,将requirements.txt中的discord.py依赖修改为带commit哈希的地址即可,示例:
git+https://github.com/Rapptz/discord.py@2a3554f569362d323ad3f6f3c0d6e8b4e3a2b1c0

哈希值替换为你本地安装的discord.py对应commit即可。

额外建议

你编写的on_message事件参数命名不符合常规规范:on_message默认接收的是message对象,ctx一般用作命令上下文的命名,虽然不影响运行,但建议修改避免后续开发混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 12:21:04