如何在discord.js Embed中使用forEach循环展示警告列表
在Discord.js中整合动态数量的警告到单个Embed
你可以通过先创建基础Embed,再遍历警告数组拼接内容(或添加字段)的方式,把所有警告整合到一个Embed里发送,不用单独逐条发送。以下是具体实现:
方法一:将警告内容拼接至Embed描述
适合警告数量较多的场景,避免字段数量限制:
// 假设已从数据库/存储中获取到用户的警告数组 const userWarnings = [ { id: 1, reason: "恶意刷屏", timestamp: "2024-05-20 12:30" }, { id: 2, reason: "辱骂成员", timestamp: "2024-05-21 14:15" } ]; // 创建Embed实例(Discord.js v14+ 使用 EmbedBuilder) const warningsEmbed = new EmbedBuilder() .setTitle(`${user.tag} 的警告记录`) .setColor(0xFF4444) .setTimestamp(); // 拼接所有警告内容 let warnContent = ""; userWarnings.forEach((warn, idx) => { warnContent += `\n**第 ${idx + 1} 条警告** - 警告ID: ${warn.id} - 原因: ${warn.reason} - 警告时间: ${warn.timestamp}\n`; }); // 处理无警告的情况 if (userWarnings.length === 0) { warnContent = "此用户目前没有任何警告记录"; } // 将内容设置到Embed描述中 warningsEmbed.setDescription(warnContent); // 发送最终的Embed message.channel.send({ embeds: [warningsEmbed] });
方法二:用Embed字段展示每条警告
适合警告数量较少(≤25条,Discord单Embed字段上限)的场景,排版更规整:
const userWarnings = [/* 你的警告数组 */]; const warningsEmbed = new EmbedBuilder() .setTitle(`${user.tag} 的警告记录`) .setColor(0xFF4444) .setTimestamp(); // 遍历警告添加字段 userWarnings.forEach((warn, idx) => { warningsEmbed.addFields({ name: `警告 ${idx + 1}`, value: `ID: ${warn.id}\n原因: ${warn.reason}\n时间: ${warn.timestamp}`, inline: false // 设为true可让字段并排,建议false保证可读性 }); }); // 无警告时的兜底 if (userWarnings.length === 0) { warningsEmbed.setDescription("此用户目前没有任何警告记录"); } // 发送Embed message.channel.send({ embeds: [warningsEmbed] });
注意事项
- 如果警告数量极多导致Embed字符数超出Discord限制(描述最大4096字符,总字段内容最大6000字符),可以考虑拆分多个Embed发送,比如每10条警告一个Embed。
- 代码示例基于Discord.js v14+,如果是旧版本,将
EmbedBuilder替换为MessageEmbed即可。
内容的提问来源于stack exchange,提问作者Thebeston123
相关产品推荐
相关产品推荐

