Discord.js v14如何将机器人服务器列表整合到单个Embed
解决Discord机器人服务器信息整合到单个Embed的问题
修改后的代码
const { EmbedBuilder } = require('discord.js') module.exports = { name: 'servers', description: '显示机器人所在的服务器', type: 1, options: [], run: async (client, interaction, guild, args) => { const BOT = client.users.cache.get('你的机器人ID') if (interaction.user.id !== '你的管理员ID') { const embed0 = new EmbedBuilder() .setColor('#791616') .setTitle('错误') .setDescription('你没有权限执行此命令') .setFooter({ text: '错误 - 服务器列表', iconURL: BOT.displayAvatarURL({ dynamic: true }) }) return interaction.reply({ embeds: [embed0], ephemeral: true }) } // 初始化单个Embed容器 const serverEmbed = new EmbedBuilder() .setTitle('机器人所在服务器列表') .setColor('#0099ff') .setFooter({ text: '服务器列表', iconURL: BOT.displayAvatarURL({ dynamic: true }) }) // 拼接所有服务器信息 let serverList = '' client.guilds.cache.forEach((guild) => { serverList += `**名称**: ${guild.name} | **ID**: ${guild.id} | **所有者**: <@${guild.ownerId}>\n` }) // 给Embed设置内容,无服务器时显示提示 serverEmbed.setDescription(serverList || '当前机器人未加入任何服务器') // 先发送加载提示,再替换为最终Embed await interaction.reply('正在获取服务器信息...') await interaction.editReply({ content: null, embeds: [serverEmbed] }) } }
关键修改说明
- 统一Embed容器:不再循环创建新Embed,提前初始化一个Embed用于承载所有服务器数据。
- 批量拼接信息:通过循环将每个服务器的名称、ID、所有者信息整合为一段字符串,作为Embed的描述内容。
- 优化消息流程:先发送加载状态提示,再通过
editReply替换为最终结果,避免多次发送消息刷屏。 - 权限提示优化:添加
ephemeral: true让错误提示仅命令执行者可见,减少频道干扰。
内容的提问来源于stack exchange,提问作者Wdgsgsfsdf
相关产品推荐
相关产品推荐

