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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:32:46