如果字段超过 25 个,则发送多个嵌入 (Discord.js)

Send multiple embeds if there are more than 25 fields (Discord.js)

如果嵌入构造函数中的字段超过 25 个,我想知道如何发送多个嵌入。我需要它包括剩余的字段(在任何给定时间可能有 75 个或更多),同时保留标题、描述、颜色等。

我的嵌入是这样构建的,从 for...in 循环中获取每个 .addField()

const shop = new MessageEmbed()
    .setTitle(`My Title`)
    .setDescription(`My Description`)
    .setThumbnail('My Thumbnail')
    .setFooter(`My Footer`)

    let listItems = ITEMS;
    for(key in listItems) {
        if (listItems.hasOwnProperty(key)) {
            shop.addField(`${listItems[key].name}`, `${commafy(listItems[key].price)}`, true)
        }
    }
message.channel.send(shop);

listItems 中有超过 25 个键,因此,发送嵌入香草只会发送包含前 25 个字段的嵌入。

我知道我需要在某个地方绕过 shop.fields.length,但我一辈子都想不出如何完成这项工作。

任何人都可以指出我正确的方向吗?谢谢!

您可以通过几个简单的步骤实现您的目标!:

  • 初始化一个嵌入数组(我们将在最后添加字段后一起发送)
  • 初始化一个索引变量i,它将保存我们需要的字段数。
  • 现在开始循环 listItems,使用 for...in 循环将 listItems 的值分配给一个键。我们会将它们添加到单个嵌入(每个嵌入 25 个),然后递增 i.
  • 进一步通过 TextChannel#send method which accepts BaseMessageOptions which further accepts an embeds parameter which accepts a Type as an Array of MessageEmbed 对象发送我们的嵌入数组。

    const all_embeds = [];
    let i = 0;
    for(key in listItems) {
                if (!all_embeds[Math.floor(i / 25)]) { //checks if the embed with the required fields already exists in our array
                    all_embeds.push(new Discord.MessageEmbed().setTitle(`My Title`).setDescription(`My Description`).setThumbnail('My Thumbnail').setFooter(`My Footer`)); // add required amount of embeds to our array
                }
                all_embeds[Math.floor(i / 25)].addField(`${listItems[key].name}`, `${(listItems[key].price)}`, true);
                i++;
            }
            message.channel.send({
                embeds: [all_embeds]
            });