我希望机器人获取一条消息(嵌入)并将其发送到调用命令的通道。 以下代码可正常处理普通短信:
@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())
它发送此消息而不是发送嵌入代码:
我如何制作机器人副本并发送嵌入内容?
答案 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)
不幸的是,这导致机器人发送了多条消息,但您并没有真正注意到。