如果字段超过 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]
});
如果嵌入构造函数中的字段超过 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 acceptsBaseMessageOptions
which further accepts anembeds
parameter which accepts aType
as an Array ofMessageEmbed
对象发送我们的嵌入数组。
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]
});