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

Enhanced-dpy框架Discord机器人本地运行正常 Heroku部署报错求助

报错原因定位

  • 依赖版本不匹配:本地使用的是Enhanced-dpy框架,若requirements.txt中填写的是原版discord.py,或是discord-py-slash-command的版本和本地安装的版本不一致,会出现方法、属性找不到的报错,和你日志中的表现完全吻合。
  • 类型注解错误:ban方法中user参数使用discord.User作为类型注解,discord.User是全局用户对象,不包含服务器专属的ban方法,只有服务器内的成员对象discord.Member才具备该方法。本地测试时调用命令的对象都是当前服务器成员,会隐式转换为Member对象所以不会报错,部署后触发边界场景就会抛出异常。
  • Intents配置缺失:Enhanced-dpy要求开启必要的权限意图才能正常获取服务器成员、消息等数据,如果你只在本地代码里配置了intents,没有在Discord开发者后台开启对应权限,或是部署时的配置代码被改动,就会启动失败。
  • 服务器ID配置错误:代码里的__GID__填写的是测试服务器ID,如果部署后连接的服务器ID和该配置不匹配,斜杠命令无法正常注册也会抛出错误。
  • Heroku进程配置错误:如果使用web类型的dyno运行机器人,会因为没有监听HTTP端口被平台判定为启动失败,强制结束进程。

解决方案

  1. 修正依赖配置:在requirements.txt中指定和本地一致的依赖版本,示例配置如下:
enhanced-dpy==2.0.0a36
discord-py-slash-command==3.0.3

版本号替换为你本地实际安装的版本,可在本地运行pip list查看对应版本号。
2. 修正类型注解:将ban方法的参数注解从user: discord.User改为user: discord.Member,确保获取到的是服务器内的成员对象。
3. 检查Intents配置:首先在Discord开发者平台的机器人设置页面,开启「Server Members Intent」「Message Content Intent」权限,同时在你的机器人启动代码中配置intents:

intents = discord.Intents.default()
intents.members = True
intents.message_content = True
client = commands.Bot(command_prefix="!", intents=intents)
  1. 确认服务器ID配置:如果部署后需要在多个服务器使用斜杠命令,把对应服务器ID加入__GID__列表即可;如果需要全局生效可以删掉guild_ids=__GID__参数,注意全局斜杠命令注册需要最长1小时的同步时间。
  2. 修正Heroku运行配置:在项目根目录的Procfile文件中写入worker: python main.py(把main.py替换成你机器人的启动文件名),同时在Heroku后台的资源页面关闭web dyno,开启worker dyno,避免因为web服务没有监听端口被平台强制关闭进程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:01