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
相关产品推荐
相关产品推荐

