You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js嵌入字段超过25个时如何拆分发送多个嵌入并保留原有属性

实现方案

核心逻辑是先预设Embed基础模板,再把所有字段收集后按单Embed最多25个的限制拆分,每一组字段都基于模板生成新的Embed后批量发送。

完整修改后代码

// 1. 定义Embed基础模板,所有公共属性都在这里配置,无需重复编写
const baseShopEmbed = new MessageEmbed()
    .setTitle(`My Title`)
    .setDescription(`My Description`)
    .setThumbnail('My Thumbnail')
    .setFooter(`My Footer`)
    // 原有颜色等其他配置都可在此添加,会自动继承到所有分页Embed

// 2. 遍历收集所有字段,暂不加入Embed
const allFields = []
const listItems = ITEMS
for (const key in listItems) {
    if (listItems.hasOwnProperty(key)) {
        allFields.push({
            name: listItems[key].name,
            value: commafy(listItems[key].price),
            inline: true
        })
    }
}

// 3. 按25字段/页的限制拆分,生成多个Embed
const MAX_FIELDS_PER_EMBED = 25
const shopEmbeds = []
for (let i = 0; i < allFields.length; i += MAX_FIELDS_PER_EMBED) {
    // 复制基础模板的所有属性
    const currentEmbed = new MessageEmbed(baseShopEmbed)
    // 可选:给标题加上页码区分,不需要可删除下行
    currentEmbed.setTitle(`${baseShopEmbed.title} (第${Math.floor(i/MAX_FIELDS_PER_EMBED)+1}页)`)
    // 批量添加当前页的字段
    currentEmbed.addFields(allFields.slice(i, i + MAX_FIELDS_PER_EMBED))
    shopEmbeds.push(currentEmbed)
}

// 4. 批量发送所有Embed
// discord.js v13+ 请使用下方写法
message.channel.send({ embeds: shopEmbeds })
// 若使用v12及更低版本,改为 message.channel.send(shopEmbeds) 即可

补充说明

  • 单个Discord消息最多支持同时发送10个Embed,也就是最多250个字段,如果你的字段总数超过这个值,可以再加一层循环,每10个Embed发送一次即可
  • 所有原有Embed的基础属性(颜色、描述、缩略图、页脚等)都会完整保留到每个分页Embed中,无需重复配置

内容的提问来源于stack exchange,提问作者eX C0n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:27:04