如果字段超过 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)的主要内容,如果未能解决你的问题,请参考以下文章
一次向多个(超过 3 个)主题发送 Firebase 云消息(又名推送通知)
如何发布超过 280 个字符的推文?因此,如果字符串 > 280,则打印前 280 个字符,然后在该线程中再次使用其余字符发送推文