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

时间:2020-09-08 06:53:29

标签: python discord discord.py

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

@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())

它发送此消息而不是发送嵌入代码:

enter image description here

我如何制作机器人副本并发送嵌入内容?

2 个答案:

答案 0 :(得分:1)

您必须选择这样的第一个嵌入,如果要更改为“ [复制]”,请再次发送。(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])

答案 1 :(得分:1)

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

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

应该做到这一点。这样,您将发送实际的 discord.Embed 对象,而不是 discord.Embed s

的列表

您不需要在{p>中使用.copy()方法

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

虽然可以使用

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

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

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

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