【问题标题】:Send multiple embeds if there are more than 25 fields (Discord.js)如果字段超过 25 个,则发送多个嵌入 (Discord.js)
【发布时间】:2021-11-04 22:02:26
【问题描述】:

如果嵌入构造函数中有超过 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 个键,因此,发送嵌入 vanilla 仅发送包含前 25 个字段的嵌入。

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

谁能指出我正确的方向,在这里?谢谢!

【问题讨论】:

    标签: javascript discord.js embed


    【解决方案1】:

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

    • 初始化一个嵌入数组(我们将在最后添加字段后一起发送)
    • 初始化一个索引变量i,它将保存我们需要多少个字段。
    • 现在开始循环遍历listItems,使用for...in 循环将listItems 的值分配给一个键。我们会将它们添加到单个嵌入中(每个嵌入 25 个),然后递增 i
    • 进一步通过TextChannel#send 方法发送我们的嵌入数组,该方法接受BaseMessageOptions,该方法进一步接受embeds 参数,该参数接受Type 作为ArrayMessageEmbed 对象。
    
        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]
                });
    
    

    【讨论】:

    • 努力使您的代码适应我的场景。我不能使用 forEach,因为我没有循环遍历数组,而是循环遍历对象的属性。我相信我需要使用 for...in 循环来调整它。
    • 您也可以使用for...in 循环这样做!只需按照您自己的设置!完全一样,即使在 for...in 循环中,索引变量也会增加 :) 如果您有进一步的疑问,那么会发生什么事情可以随意删除另一条评论
    • 我收到以下错误,DiscordAPIError: Cannot send an empty message => 我将 .send({embeds: [all_embeds]}); 更改为 .send({embed: [all_embeds]});(我在 v12 上我认为我必须这样做)然后我收到以下错误那DiscordAPIError: Invalid Form Body embed.description: This field is required, embeds[0].description: This field is required
    • 您的编辑正是我尝试将代码更改为的内容,请参阅上面的评论,将embeds 更改为embed,然后收到无效的表单正文错误。你有不和吗?如果这样更容易提出解决方案,我们可以转向 DM 吗? (哈哈,我只是问你在 discord.js 中编码时是否有不和谐)
    • 您不必将嵌入更改为嵌入,它仍然是嵌入,请阅读随附的文档,也是的,我的不和谐是 0_0#6666 您可以通过加入我的服务器与我联系here
    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2017-01-08
    • 2013-07-11
    • 1970-01-01
    • 2020-09-15
    • 2018-08-18
    • 2020-10-17
    相关资源
    最近更新 更多