如何使用变量设置 Discord 嵌入消息的图像?

Posted

技术标签:

【中文标题】如何使用变量设置 Discord 嵌入消息的图像?【英文标题】:How to set the image of a Discord embedded message with a variable? 【发布时间】:2018-06-24 05:12:48 【问题描述】:

所以我将图像的 url 放在一个变量中。它需要在变量中,因为每次运行命令时它都会更改。不幸的是,文档说 set_image 需要一个字符串 url,并且尝试使用变量会引发 400 错误。然后我尝试使用链接做一个简单的 send_message,但 Discord 不会将图像下载到聊天中,因为它不是字符串。有谁知道如何解决这个问题?谢谢!

embed.set_image(url = exampleVariable) #throws error

【问题讨论】:

【参考方案1】:

如果您的机器人无法将嵌入发送到频道,则会引发异常 (discord.Forbidden)。

将嵌入发送到频道非常简单:

# rewrite
await ctx.send(embed=embed_object)

# async
await bot.send_message(CHANNEL_ID, embed=embed_object)

否则你在设置嵌入图片时,你必须传入一个字符串 URL (参见async doc 和rewrite)。

URL 必须是字符串,并且如文档中所述“仅支持 HTTPS”

传递变量并不重要,因为变量只是对对象的引用,在这种情况下,是一个字符串。 如果我没记错的话,discord 不会显示无效的图像 URL。因此,您可能需要仔细检查 URL。

否则,这样的代码应该可以工作。

(假设重写)

@bot.command()
async def image(ctx):
    return await ctx.send(embed=discord.Embed().set_image(url=ctx.author.avatar_url))

(假设异步)

@bot.command(pass_context=True)
async def image(ctx):
    em = discord.Embed().set_image(url=ctx.message.author.avatar_url)
    return await bot.send_message(ctx.message.channel.id, embed=em)

【讨论】:

如果嵌入的变量是另一个变量怎么办。 requests.get("https://dog.ceo/api/breeds/image/random") soupRaw = BeautifulSoup(response.text, 'lxml') soupBackend = str(soupRaw).split("message") soup2 = soupBackend[1] soup3 = soup2[3:] soup = soup3[:-20] embed = discord.Embed(title = "Here is your dog!", description = "Hope you like it", color = 0x5810ea) embed.set_image(url = soup) await bot.send_message(message.channel, embed=embed) Any way I can fix this? 我想要的扭结在这个页面上,我需要删除它周围的所有东西。 @心理 对于初学者来说,您可以停止在 cmets 中发布原始代码并使用 gists、hastebin 或 pastebin【参考方案2】:

如果您想要最简单的处理方式,只需发送图片网址即可。唯一的问题是它会同时发送 url 和图片。

如果你想要一个更好的结果,你必须在以下情况下做一个:

如果你使用的是重写分支,你需要这样做

imageURL = "image url"
embed = discord.Embed()
embed.set_image(url=imageURL)
await ctx.send(embed = embed)

如果你使用的是异步分支,你需要这样做

imageURL = "image url"
embed = discord.Embed()
embed.set_image(url=imageURL)
await bot.send_message(ctx.message.channel, embed = embed)

要确定您拥有哪个分支,您需要执行print(discord.__version__)。如果打印了1.0.0a,那么你就有了重写分支。如果打印了0.16.2,那么你就有了异步分支

【讨论】:

我有异步分支。我的问题是 imageURL 等于另一个变量而不是原始字符串。我的代码看起来像:response = requests.get("https://dog.ceo/api/breeds/image/random") soupRaw = BeautifulSoup(response.text, 'lxml') soupBackend = str(soupRaw).split("message") soup2 = soupBackend[1] soup3 = soup2[3:] soup = soup3[:-20] embed = discord.Embed(title = "Here is your dog!", description = "Hope you like it", color = 0x5810ea) embed.set_image(url = soup) await bot.send_message(message.channel, embed=embed) 有什么办法可以解决这个问题? @qspitzwer 忘记标记 @MarkW,问题是 url 包含 \'s。您将需要删除这些链接才能正常工作。这可以通过 for 循环和 if 语句来完成,但可能有更好的方法

以上是关于如何使用变量设置 Discord 嵌入消息的图像?的主要内容,如果未能解决你的问题,请参考以下文章

使用新生成的图像自动更新/编辑嵌入消息 - Discord.js

可以发送嵌入消息的 Discord.js 机器人

Discord.py 如何从不和谐消息中读取 int 并将其作为变量发送到嵌入中

Discord.js 使用来自其他消息的附件来更新嵌入中的图像

编辑带有图像附件的嵌入消息在聊天中加倍 - Discord JDA

消息嵌入中的 Discord.js v12 图像