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

使用discord.py开发表单机器人遇AttributeError: 'ClientUser'无'avatar_url'属性

Discord表单机器人AttributeError问题解决

我正在用Python开发一款Discord表单机器人,运行代码时触发如下错误:
AttributeError: 'ClientUser' object has no attribute 'avatar_url'

我的代码如下:

@bot.command()
async def testform(ctx):
    form = Form(ctx,'Title')
    form.add_question('Question 1','first')
    form.add_question('Question 2','second')
    form.add_question('Question 3','third')
    await form.start()

错误详情:

2023-09-09 08:58:09 ERROR    discord.ext.commands.bot Ignoring exception in command testform
Traceback (most recent call last):
  File "/usr/local/python/3.10.4/lib/python3.10/site-packages/discord/ext/commands/core.py", line 235, in wrapped
    ret = await coro(*args, **kwargs)
  File "/workspaces/moon/dir/.py/homeworkBOT/main.py", line 43, in testform
    await form.start()
  File "/usr/local/python/3.10.4/lib/python3.10/site-packages/discord/ext/forms/form.py", line 221, in start
    embed.set_author(name=f"{self.title}: {n+1}/{len(self._questions)}", icon_url=self._bot.user.avatar_url)
AttributeError: 'ClientUser' object has no attribute 'avatar_url'


The above exception was the direct cause of the following exception:


Traceback (most recent call last):
  File "/usr/local/python/3.10.4/lib/python3.10/site-packages/discord/ext/commands/bot.py", line 1350, in invoke
    await ctx.command.invoke(ctx)
  File "/usr/local/python/3.10.4/lib/python3.10/site-packages/discord/ext/commands/core.py", line 1029, in invoke
    await injected(*ctx.args, **ctx.kwargs)  # type: ignore
  File "/usr/local/python/3.10.4/lib/python3.10/site-packages/discord/ext/commands/core.py", line 244, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'ClientUser' object has no attribute 'avatar_url'

我代码里没用到avatar_url,网上搜了一圈也没找到其他人遇到这个discord.py相关问题,求解决办法。


问题分析

从报错栈能明确看到,错误并非出自你的代码,而是discord.ext.forms库内部的form.py文件第221行——它在尝试调用机器人用户对象的avatar_url属性,但discord.py 2.0及以上版本已经移除了avatar_url属性,替换成了avatar.url(需要先判断avatar是否存在,避免机器人无头像时报错)。这是表单库未适配新版本discord.py导致的兼容性问题。

解决方案

  1. 修改表单库源码
    找到/usr/local/python/3.10.4/lib/python3.10/site-packages/discord/ext/forms/form.py第221行,将:
embed.set_author(name=f"{self.title}: {n+1}/{len(self._questions)}", icon_url=self._bot.user.avatar_url)

替换为:

avatar_url = self._bot.user.avatar.url if self._bot.user.avatar else None
embed.set_author(name=f"{self.title}: {n+1}/{len(self._questions)}", icon_url=avatar_url)
  1. 降级discord.py版本
    如果不想修改库源码,可以安装适配表单库的旧版discord.py,比如:
pip install discord.py==1.7.3
  1. 更换表单实现方式
    寻找适配discord.py 2.x版本的表单库,或者自行通过消息交互(如按钮、下拉菜单)实现表单逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:13:26