我有一个充满项目的 JSON,我想要一种方法来自动将项目添加到嵌入页面,但它会为每个项目发送新的嵌入内容

问题描述

我的代码

 // Getting My Obj
 const storeOptions = require('../util/storeOption.json')
        const options = Object.keys(storeOptions)
        // Looping through them all
        for (const x of options) {

        const option = {
            name: `${storeOptions[x].emoji} ${storeOptions[x].name}`,value: `${storeOptions[x].cost}\n${storeOptions[x].description}`
        }
        const embed = new MessageEmbed()        
        .setAuthor(message.author.tag,message.author.displayAvatarURL())
        .setDescription('Here is our store!\n\n**Shop Items**')
        .addFields(option)
        message.channel.send(embed)
    }

我希望所有字段都在单个嵌入中,但它会向新字段发送垃圾邮件,并且字段中只有一个对象。

解决方法

它会为每个项目发送新的嵌入内容,因为您要声明嵌入内容并将其发送到 for 循环内的通道。 此外,您正在使用 addFeilds,您可以通过一次提供对象数组(带有名称和值)来一次设置多个字段。 Check this for reference

我建议您在 for 循环之前声明 MessageEmbed 并将 addFeild 声明为每次迭代的嵌入。

const storeOptions = require('../util/storeOption.json')
const options = Object.keys(storeOptions)

// Declare embed before for loop starts
const embed = new MessageEmbed() 
        .setAuthor(message.author.tag,message.author.displayAvatarURL())
        .setDescription('Here is our store!\n\n**Shop Items**')

for (const x of options) {
    const option = {
        name: `${storeOptions[x].emoji} ${storeOptions[x].name}`,value: `${storeOptions[x].cost}\n${storeOptions[x].description}`
    }
    // Add Feild to embed
    embed.addField(option)
}

return message.channel.send(embed);