Discord.js v14如何设置仅特定服务器可见的私有斜杠命令?
在Discord.js v14中设置私有斜杠命令
要实现仅让单个服务器查看指定斜杠命令,其余命令全局可见,核心是区分全局命令与服务器专属命令:将需要私有展示的命令注册为目标服务器的专属命令,其余命令保持全局注册即可。
具体实现步骤
- 维护两个命令列表:一个存放全局可见的命令,另一个存放仅目标服务器可见的私有命令
- 分别注册两类命令:
- 注册全局命令:通过
client.application.commands.set()将全局命令同步到所有服务器(注意:全局命令同步后需要约1小时生效) - 注册服务器专属命令:先获取目标服务器的Guild实例,再通过
guild.commands.set()将私有命令同步到该服务器(服务器命令同步后立即生效)
- 注册全局命令:通过
代码示例
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [GatewayIntentBits.Guilds] }); // 全局命令列表 const globalCommands = [ { name: 'help', description: '查看全局帮助' // 其他命令配置... } ]; // 私有命令列表(仅目标服务器可见) const privateCommands = [ { name: 'admin-tool', description: '仅管理员服务器可用的工具命令' // 其他命令配置... } ]; // 目标服务器ID const TARGET_GUILD_ID = '你的目标服务器ID'; client.on('ready', async () => { console.log(`已登录为 ${client.user.tag}`); // 注册全局命令 await client.application.commands.set(globalCommands); console.log('全局命令已注册'); // 获取目标服务器并注册私有命令 const targetGuild = await client.guilds.fetch(TARGET_GUILD_ID); if (targetGuild) { await targetGuild.commands.set(privateCommands); console.log(`私有命令已注册到目标服务器 ${targetGuild.name}`); } else { console.error('未找到目标服务器'); } }); client.login('你的机器人Token');
注意事项
- 服务器专属命令仅在注册的服务器内可见,不会出现在其他服务器的命令列表中
- 如果需要更新命令,直接修改对应列表后重新执行注册逻辑即可
- 确保机器人在目标服务器内拥有
Manage Guild权限,否则无法注册服务器专属命令
内容的提问来源于stack exchange,提问作者Jun sj
相关产品推荐
相关产品推荐

