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

Discord Bot如何获取已加入全部服务器的guild ID?

实现方法

1. 获取机器人已加入的所有服务器Guild ID

client.guilds.cache是discord.js封装的服务器集合对象,直接调用map方法即可提取所有服务器ID:

// 放在ready事件内执行
const allGuildIds = client.guilds.cache.map(guild => {
  console.log(`服务器名称:${guild.name},ID:${guild.id}`)
  return guild.id
})
console.log('所有已加入服务器ID列表:', allGuildIds)

如果你只是需要单个测试服务器的ID,也可以直接在Discord客户端开启开发者模式后,右键服务器图标选择「复制ID」直接填写。

2. 更简便的命令注册实现

首先明确两种命令的区别:

  • 公会命令:仅在指定服务器生效,注册后立即同步,适合开发测试
  • 全局命令:所有加入的服务器都生效,注册后最长需要1小时同步,适合正式上线

场景1:开发阶段快速注册单公会测试命令

如果你的机器人仅加入了一个测试服务器,可以直接提取缓存中的第一个服务器,不需要手动填写ID:

client.once('ready', async () => {
    console.log("STARTTTTTTT");
    // 直接取第一个已加入的服务器,无需手动填ID
    const guild = client.guilds.cache.first()
    const commands = guild ? guild.commands : client.application?.commands
    // 注册前可以先清空旧命令,避免重复
    await commands?.set([
        {
            name: "lena",
            description: "LENAAAAAAAAAA",
            options: [
                {
                    name: 'name',
                    description: "LENAAAAAAA",
                    required: true,
                    type: Discord.Constants.ApplicationCommandOptionTypes.STRING
                },
                {
                    name: 'text',
                    description: "LENAAA",
                    required: false,
                    type: Discord.Constants.ApplicationCommandOptionTypes.STRING
                },
            ]
        }
    ])
    console.log('命令注册完成')
})

场景2:批量给所有已加入服务器注册命令

需要遍历所有服务器逐一注册:

client.once('ready', async () => {
    console.log("STARTTTTTTT");
    const commandData = {
        name: "lena",
        description: "LENAAAAAAAAAA",
        options: [
            {
                name: 'name',
                description: "LENAAAAAAA",
                required: true,
                type: Discord.Constants.ApplicationCommandOptionTypes.STRING
            },
            {
                name: 'text',
                description: "LENAAA",
                required: false,
                type: Discord.Constants.ApplicationCommandOptionTypes.STRING
            },
        ]
    }
    // 遍历所有服务器注册命令
    for (const guild of client.guilds.cache.values()) {
        await guild.commands.set([commandData])
        console.log(`已为服务器${guild.name}注册命令`)
    }
    console.log('全部命令注册完成')
})

场景3:正式上线直接用全局命令

不需要处理任何Guild ID,直接注册全局命令即可自动同步到所有已加入服务器:

client.once('ready', async () => {
    console.log("STARTTTTTTT");
    await client.application?.commands.set([
        {
            name: "lena",
            description: "LENAAAAAAAAAA",
            options: [
                {
                    name: 'name',
                    description: "LENAAAAAAA",
                    required: true,
                    type: Discord.Constants.ApplicationCommandOptionTypes.STRING
                },
                {
                    name: 'text',
                    description: "LENAAA",
                    required: false,
                    type: Discord.Constants.ApplicationCommandOptionTypes.STRING
                },
            ]
        }
    ])
    console.log('全局命令注册完成,最长1小时后同步到所有服务器')
})

注意事项

  • 用set()方法代替create()方法可以直接覆盖已有命令,避免重复注册生成多个同名命令
  • 开发阶段优先用单公会命令,测试无误后再注册全局命令减少同步等待时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:02