You need to enable JavaScript to run this app. 如何使用discord.py获取用户发送的Embed中的图片URL
优惠活动
大模型
产品
解决方案
定价
更多

如何使用discord.py获取用户发送的Embed中的图片URL

问题根因

Discord的消息结构会按资源来源做拆分存储:

  • 用户本地上传的图片、文件,会被归类到 message.attachments 属性列表中,这是原有代码能识别普通上传图的原因
  • 链接自动预览、第三方分享、用户手动发送的Embed卡片,独立存储在 message.embeds 属性列表中,和附件列表完全不互通,原有逻辑不会触碰到Embed内的内容,自然取不到内嵌图的URL。
Embed内图片的存储规则

Discord的Embed对象中,图片可能出现在两个高频使用的位置:

  • 卡片主体配图:对应属性为 embed.image.url
  • 卡片缩略图:对应属性为 embed.thumbnail.url
    少数自定义Embed会在作者栏、页脚栏放置小图标,如果有抓取需求,可以对应读取 embed.author.icon.url、embed.footer.icon.url 属性,日常场景下读取前两个位置已经可以覆盖绝大多数内嵌图的情况。
可直接复用的实现代码
@bot.event
async def on_message(message):
    if message.channel.id == 787662710787145760:
        # 遍历获取所有普通上传附件的URL
        for attach in message.attachments:
            print(f"普通上传图片:{attach.url}")

        # 遍历获取所有Embed中的图片URL
        for embed in message.embeds:
            # 提取Embed主体配图
            if embed.image.url:
                print(f"Embed主体配图:{embed.image.url}")
            # 提取Embed缩略图
            if embed.thumbnail.url:
                print(f"Embed缩略图:{embed.thumbnail.url}")

    # 必须调用该方法,否则机器人的指令系统会失效
    await bot.process_commands(message)
实现注意点
  • discord.py的Embed相关图片属性如果没有对应内容,会直接返回None,不会抛出索引越界错误,不需要额外写try/except捕捉异常,逻辑稳定性比原代码的单索引取值、异常兜底的写法更好
  • 无论是Discord自动生成的链接预览Embed,还是用户通过webhook、机器人接口手动发送的自定义Embed,都会统一进入message.embeds列表,不需要做额外的类型区分
  • 被Embed引用的图片不会同步出现在message.attachments列表中,必须从Embed对象内部读取对应URL,跨属性取值永远拿不到结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 04:15:04