为什么在Heroku托管discord.py机器人时avatar_url属性无法正常工作
修复方案
1. requirements.txt需补充的内容
- 修正discord.py的安装声明,追加可选依赖后缀避免核心组件缺失,将你现有requirements里的discord.py GitHub链接修改为如下格式:
不需要语音功能也可以省略git+<discord.py仓库地址>.git#egg=discord.py[voice][voice]标记,完整依赖可大幅降低属性拉取类偶发异常的概率。 - 补充
aiohttp版本约束,避免异步请求库版本不兼容导致头像资源拉取卡住、进程无响应:aiohttp>=3.8.1,<3.9.0 - 补充
python-dotenv依赖,用于正确读取Heroku配置的环境变量(机器人Token、权限开关等),避免参数缺失导致的进程挂起:python-dotenv==1.0.0
2. 需同步排查的非依赖问题
若补充依赖后问题仍然存在,可检查以下配置:
member.avatar_url是discord.py v1.x的废弃属性,v2.x版本中已替换为member.avatar.url,无自定义头像的成员还需要回退到默认头像地址,示例代码:avatar_url = member.avatar.url if member.avatar else member.default_avatar.url- 确认Discord开发者后台已经开启
Server Members Intent和Message Content Intent,缺少这两个特权权限会导致机器人无法正常获取成员属性、读取用户回复,进而卡在等待响应的环节。 - 等待用户回复的
wait_for逻辑需添加超时参数,避免无用户回复时进程永久挂起,示例代码:try: reply = await bot.wait_for('message', check=check_func, timeout=30) except asyncio.TimeoutError: await ctx.send("等待超时,已取消本次操作") return
内容的提问来源于stack exchange,提问作者Rodraix
相关产品推荐
相关产品推荐

