如何使用变量设置 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.py 如何从不和谐消息中读取 int 并将其作为变量发送到嵌入中
Discord.js 使用来自其他消息的附件来更新嵌入中的图像