Discord.js复制另一个bot的嵌入

时间:2020-06-04 01:00:50

标签: javascript node.js bots discord discord.js

我想复制另一个机器人的嵌入内容并重新发送,而只将图像更改为缩略图。我已经能够用缩略图替换图像,获取作者名称和页脚以及描述字段。但是我不知道如何获得这些领域和价值。我要复制的消息中有很多字段和值。我是否需要确切找出有多少个?这是我到目前为止的内容:

            let url = e.image.url;
            let desc = e.description;
            let avatar = e.author.name;
            //let avaimg = e.icon.url;
            let field = e.fields.value;
            let field2 = e.fields.name;
            let foot = e.footer.text;

然后

                      embed
                        .setDescription(desc)
                        .setThumbnail(url)
                        .setFooter(foot)
                        .addField(field2, field, true)
                        .setAuthor(avatar)
                      return message.channel.send(embed)

,这有效,但是字段仅显示“ undefined”。因此,我需要一种方法来获取所有字段并准确地重新发布其内容。另外,我不确定如何获取作者图标。

我希望我的问题有意义,如果这是一个菜鸟问题,我很抱歉,我对js不太有经验。

1 个答案:

答案 0 :(得分:1)

MessageEmbed.fields是一个数组,因此您应该遍历每个元素并逐个添加它们:您可以使用for循环或使用Array.forEach()方法对此进行添加。 br /> 这是一个示例:

// let's say we have a receivedEmbed and yourEmbed
receivedEmbed.fields.forEach(({ name, value, inline }) => {
  yourEmbed.addField(name, value, true)
})

正在发生的事情是,您正在遍历每个field,抓住namevalueinline属性(即使您决定不使用最后一个属性) ,因为它知道它的存在),然后将这些相同的字段添加到您自己的字段中。
一种替代方法是使用for循环:

for (let field of receivedEmbed.fields) {
  yourEmbed.addField(field.name, field.value, field.inline)
}

如果您使用discord.js@v12,则还可以使用addFields方法:

yourEmbed.addFields(receivedEmbed.fields)