Discord机器人开发:如何将单服务器斜杠命令修改为全局生效
修改方案
Discord 斜杠命令分为单服务器(测试用,即时生效)和全局(全服务器生效,最长需1小时同步)两种,你当前代码是固定注册到指定ID的单服务器,按以下步骤修改即可实现全局生效:
1. 修改 dataHandler.js 中的 createCmd 函数
兼容单服务器测试和全局注册逻辑,修改后代码如下:
async function createCmd(Client, guildId) { const data = [ //ping cmd { name: 'test', description: 'test slash command' } // 其余命令继续往这里加即可 ] if (guildId) { // 传入服务器ID则注册为单服务器命令 await Client.guilds.cache.get(guildId)?.commands.set(data) } else { // 未传入服务器ID则注册为全局命令 await Client.application.commands.set(data) } } module.exports = {createCmd}
2. 修改 ready.js 中的调用逻辑
去掉调用createCmd时传入的服务器ID参数即可:
const {prefix} = require("../../botconfig.json") const {createCmd} = require("../../dataHandler.js") module.exports = bot => { console.log(`${bot.user.username} is online`); setInterval(() => bot.user.setActivity(`!help | Switch Support`, { type: "WATCHING" }), 15000) createCmd(bot) // 去掉第二个参数的服务器ID,走全局注册逻辑 };
注意事项
- 全局命令注册后最长需要等待1小时才能在所有服务器同步完成,开发阶段可以临时传入测试服务器ID走单服务器注册,即时生效验证功能
- 邀请机器人进服的链接必须勾选
applications.commands权限,否则服务器无法加载你注册的全局斜杠命令 - 如果需要清理之前测试时注册的单服务器命令,可以单独调用
Client.guilds.cache.get(服务器ID).commands.set([])清空即可
内容的提问来源于stack exchange,提问作者Nicky
相关产品推荐
相关产品推荐

