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

Python开发Discord机器人:欢迎消息缩略图报错及图片显示问题求助

问题解决方案

问题1:修复头像缩略图的AttributeError报错

Member对象本身就包含用户的所有信息,不需要额外通过.user访问。另外注意:discord.py v2.0+版本已经废弃了avatar_url属性,需要改用member.avatar.url获取头像链接;如果用户没设置自定义头像,还可以用member.default_avatar.url调用默认头像做降级处理。

把代码里的这一行:

embed.set_thumbnail(url = member.user.avatar_url)

替换成:

# 优先用用户自定义头像,无自定义头像则用默认头像
avatar_url = member.avatar.url if member.avatar else member.default_avatar.url
embed.set_thumbnail(url=avatar_url)

如果你的discord.py是v1.x旧版本,直接去掉.user即可:

embed.set_thumbnail(url=member.avatar_url)

问题2:嵌入消息图片改为矩形显示

Discord嵌入消息的set_image会自动按图片原始比例缩放显示,不会强制裁剪成方形。要实现矩形显示,有两种可行方案:

方案1:直接使用矩形比例的原图

把你的欢迎图调整为矩形比例(比如16:9、4:3等),Discord会自动适配显示,保持图片的矩形形态。

方案2:合成带头像的矩形欢迎图(自定义效果)

如果想把用户头像叠加到矩形欢迎图上,可以用Pillow库处理图片,步骤如下:

  1. 先安装Pillow:pip install pillow
  2. 修改代码实现图片合成:

示例代码片段:

from PIL import Image, ImageDraw
import io

# 加载选中的随机欢迎图
image_path = os.path.join(images_folder, random_image_file)
base_img = Image.open(image_path).convert("RGBA")

# 下载用户头像并转为PIL格式
avatar_data = await member.avatar.read() if member.avatar else await member.default_avatar.read()
avatar_img = Image.open(io.BytesIO(avatar_data)).convert("RGBA")

# 调整头像大小并添加圆角(可选效果)
avatar_img = avatar_img.resize((100, 100))
mask = Image.new('L', avatar_img.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + avatar_img.size, fill=255)
avatar_img.putalpha(mask)

# 把头像粘贴到欢迎图的指定位置(示例为右上角)
paste_pos = (base_img.width - 120, 20)
base_img.paste(avatar_img, paste_pos, avatar_img)

# 将合成后的图片存入内存
buffer = io.BytesIO()
base_img.save(buffer, format='PNG')
buffer.seek(0)

# 发送合成后的图片和嵌入消息
await welcome_channel.send(
    embed=embed,
    file=discord.File(buffer, filename='welcome_image.png')
)

这种方式可以完全自定义图片布局,实现矩形显示同时叠加用户头像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:32:21