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

Posted

技术标签:

【中文标题】如果字段超过 25 个,则发送多个嵌入 (Discord.js)【英文标题】:Send multiple embeds if there are more than 25 fields (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,但我这辈子都不知道如何完成这项工作。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

努力使您的代码适应我的场景。我不能使用 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

以上是关于如果字段超过 25 个,则发送多个嵌入 (Discord.js)的主要内容,如果未能解决你的问题,请参考以下文章

Paypal 以折扣方式将多个商品添加到购物车

一次向多个(超过 3 个)主题发送 Firebase 云消息(又名推送通知)

如果消息超过 2000 个字符,则发送 2 条不同的消息

如何发布超过 280 个字符的推文?因此,如果字符串 > 280,则打印前 280 个字符,然后在该线程中再次使用其余字符发送推文

JPA 多个嵌入式字段

如果一个输入中有相同的类,则多个输入字段的jquery总和