如何在 discord.py 中复制嵌入?

Posted

技术标签:

【中文标题】如何在 discord.py 中复制嵌入?【英文标题】:How to copy an embed in discord.py? 【发布时间】:2020-12-26 12:34:49 【问题描述】:

我希望机器人获取消息(嵌入)并将其发送到调用命令的通道。 以下代码适用于普通短信:

@bot.command()
async def fetch(ctx):
    channel = bot.get_channel(736984092368830468)
    msg = await channel.fetch_message(752779298439430164)
    await ctx.send(msg.content)

我尝试发送嵌入:

@bot.command()
async def fetch(ctx):
    channel = bot.get_channel(736984092368830468)
    msg = await channel.fetch_message(752779298439430164)
    await ctx.send(msg.embeds.copy())

它发送这个而不是发送嵌入:

如何使机器人复制并发送嵌入?

【问题讨论】:

msg.embeds.copy() 实际上返回一个 Embed 对象(你可以在模块的源代码中看到它)。我还没有尝试过,但似乎ctx.send() 有一个名为embed 的参数。也许你应该试试await ctx.send(embed=msg.embeds.copy()) 这不起作用,给出错误 - discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'list' object has no attribute 'to_dict' @NicholasObert 嗨@Deadshot,如果我的或任何答案解决了您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,因此如果他们遇到了这个问题,如何解决这个问题。 【参考方案1】:

问题是您试图将 discord.Embed 对象列表作为字符串发送到您的await ctx.send(msg.embeds.copy())ctx.send() 方法有一个名为 embed 的参数,用于在消息中发送嵌入。

await ctx.send(embed=msg.embeds[0])

应该做的伎俩。这样,您将发送一个实际的 discord.Embed 对象,而不是 discord.Embeds

的列表

您应该不需要.copy() 方法

await ctx.send(embed=msg.embeds[0].copy())

虽然你可以使用它

使用索引运算符[0] 的唯一缺点是您只能访问消息中包含的一个嵌入。 discord API 不提供在单个消息中发送多个嵌入的方法。 (见this问题)。

一种解决方法可能是遍历 msg.embeds 列表中的每个嵌入,并为每个嵌入发送一条消息。

for embed in msg.embeds:
    await ctx.send(embed=embed)

不幸的是,这会导致机器人发送多条消息,但您并没有真正注意到。

【讨论】:

【参考方案2】:

你必须像这样选择第一个嵌入并使用[复制]如果你想在再次发送之前更改它。(https://discordpy.readthedocs.io/en/latest/api.html?highlight=embed#discord.Embed.copy)

@bot.command()
async def fetch(ctx):
    channel = bot.get_channel(736984092368830468)
    msg = await channel.fetch_message(752779298439430164)
    await ctx.send(embed=msg.embeds[0])

【讨论】:

以上是关于如何在 discord.py 中复制嵌入?的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌入 discord.py 中使用 markdown 语法发送图像

如何将 discord.py 帮助命令放入嵌入中?

如何在嵌入 discord.py 中将长字段作为页面发送?

我如何将成员的图像和昵称放在嵌入中? (w/discord.py)

(discord.py) 有啥方法可以自动保存嵌入图像?

如何以更简洁的方式为 discord.py 编写嵌入代码?