使用 discord.py 在 Discord 消息中显示缩略图时出现问题

Issue with displaying thumbnail in Discord message using discord.py

提问人:Xaalek 提问时间:11/4/2023 最后编辑:Xaalek 更新时间:11/14/2023 访问量:98

问:

我目前正在使用 discord.py 库开发一个 Discord 机器人,我在 Discord 消息中显示缩略图时遇到了问题。我使用的代码似乎是正确的,但我在使缩略图按预期显示时遇到了困难。下面是相关代码:

embedMessage = discord.Embed(
    title=entry.title,
    description=entry.description,
    url=entry.link,
    color=self.color,
)

url_thumbnail = entry.links[1]["href"]
embedMessage.set_thumbnail(url=url_thumbnail)

# Converting the original date into a datetime object
date_obj = datetime.strptime(
    entry.published, "%a, %d %b %Y %H:%M:%S %z"
)

# Formatting the resulting date
date_format = date_obj.strftime("%a, %d %b %Y %H:%M")

embedMessage.set_footer(text=date_format)

await channel.send(
    content="🚀 New Post on PSTHC 📰", embed=embedMessage
)

这是我目前得到的结果:enter image description here

我已确认缩略图 URL 有效,机器人具有嵌入链接和附加文件所需的权限,并且缩略图 URL 可访问。但是,缩略图不会出现在 Discord 消息中。

以下是我正在使用的缩略图 URL 示例: https://www.staticbo.psthc.fr/wp-content/uploads/2023/11/Logo-PGW23.png

下面是 Embed 对象在 :channel.send()enter image description here

如您所见,url 已正确定义,我可以单击链接访问图像,但图像未显示在 discord 的消息中。

机器人具有以下权限:enter image description here

您是否对可能导致此问题的原因有任何见解,或者您对如何解决它有任何建议?任何协助将不胜感激。

先谢谢你!

Python discord.py 嵌入 缩略图

评论

0赞 Hazzu 11/5/2023
1. 确保您的机器人在您的服务器上(而不是在开发人员门户上)具有权限;Embed Links
0赞 Hazzu 11/5/2023
2. 在代码中添加语句,以确保正确选择链接。print(url_thumbnail)
0赞 Xaalek 11/6/2023
@Hazzu我检查了一下,机器人在测试 discord 服务器上具有正确的权限。我还在原来的帖子中添加了嵌入对象的屏幕。正如你所看到的,url 设置正确

答:

1赞 Hazzu 11/6/2023 #1

我还尝试将此图像链接作为缩略图创建嵌入,但没有奏效。我相信错误是 Discord 无法正确渲染来自该域的图像。 解决此问题的另一种方法是下载图像并将其作为文件发送:

import discord
from aiohttp import ClientSession
from io import BytesIO


embed_message = discord.Embed(
    title=entry.title,
    description=entry.description,
    url=entry.link,
    color=self.color,
)

url_thumbnail = entry.links[1]["href"]

# download the image and save in a bytes object
async with ClientSession() as session:
    async with session.get(url_thumbnail) as resp:
        thumb_image = BytesIO(await resp.read())

# creating a discord file
thumb_file = discord.File(fp=thumb_image, filename="thumb.png")

# setting the file as thumbnail
embed_message.set_thumbnail(url=f"attachment://{thumb_file.filename}")

date_obj = datetime.strptime(entry.published, "%a, %d %b %Y %H:%M:%S %z")
date_format = date_obj.strftime("%a, %d %b %Y %H:%M")
embed_message.set_footer(text=date_format)

# sending the embed along with the file
await channel.send(
    content="🚀 New Post on PSTHC 📰",
    embed=embed_message,
    file=thumb_file
)

评论

0赞 Xaalek 11/9/2023
感谢您的这个解决方案,下载图像的这种解决方法非常聪明。不幸的是,该图像仍未显示在 discord 上的消息中。
1赞 Hazzu 11/9/2023
@Xaalek我测试了它并举工作
0赞 Xaalek 11/9/2023
好的,我忘了添加.感谢您的帮助!file=thumb_filechannel.send()
0赞 Xaalek 11/24/2023
您知道为什么这在一台服务器上有效而在其他服务器上不起作用吗?
0赞 Hazzu 11/24/2023
确保机器人在其他服务器(和)上具有必要的权限。Embed LinksAttach Files
0赞 Ethan 11/7/2023 #2

我偶尔会遇到这个错误,我发现总是使用 https://imgur.com 来解决它。我上传我的图片,将其发布到社区,然后将其隐藏起来。然后我右键单击图像并单击弹出的“复制图像链接”选项,并将其添加到我的代码中。自从我开始这样做以来,我没有遇到任何问题!

与往常一样,请确保为不属于您的资产提供信贷。

下面是一个示例:

我有一个机器人,在将代码部署到其他机器人之前,我将其用作测试机器人。可以在此处找到机器人的徽标

  1. 我去imgur,然后点击“新帖子”。
  2. 我选择我的图像,然后命名它。
  3. 我单击“发布”选项下的“到社区”按钮。
  4. 我点击“公开发布”,然后去查看图库中的图像。
  5. 我转到屏幕右下角的“img tools”下,然后单击“隐藏帖子”。
  6. 隐藏后,我右键单击图像,然后选择“复制图像地址”。

然后你应该有一个有效的链接!

编辑:忘了展示它是如何在我的代码中实现的。我使用齿轮,所以它可能看起来和你的有点不同,但基本思想是一样的。

    @commands.hybrid_command(name="helper", description="Displays the help menu")
    async def helper(self, *, ctx: commands.Context) -> None:
      embed = discord.Embed(
        title = "Auxillium Discord Testing Help",
        description = "*The Help Interface for the ADB Testing Bot*",
        color = discord.Color.green()
      )
      embed.set_thumbnail(url = "https://i.imgur.com/A4sLrSk.png")
      await ctx.send(embed=embed)

评论

0赞 Xaalek 11/8/2023
鉴于我使用 动态检索 URL,我发现 @Hazzu的解决方案更合适。但是,我要感谢您为我的问题提供解决方案所做的努力entry.links[1]["href"]
0赞 Ethan 11/19/2023
不用担心!很高兴您找到了解决方案:)