使用discord.js开发Discord机器人仅ping命令被识别该如何解决
问题根因
你目前仅在代码中实现了指令的响应逻辑,没有主动向Discord平台注册beep、server、user-info这几个斜杠指令,只有最早的ping指令你之前完成过注册,所以只有它出现在命令列表中。斜杠指令的注册和响应逻辑是完全分离的两个步骤,修改本地响应代码不会自动同步指令列表到Discord服务器,这也是为什么ping指令还保留着你最初设置的描述。
解决方案
你可以先使用单服务器注册的方式完成测试,单服务器指令注册完成后即时生效,远快于需要1小时同步时间的全局注册:
- 临时在你的
ready事件中加入如下注册代码,仅执行一次完成注册后就可以注释掉这段代码,高频重复注册会触发Discord速率限制
client.once('ready', async () => { console.log('Ready!'); // 替换为你的测试服务器ID const TEST_GUILD_ID = '你的测试服务器ID'; const targetGuild = client.guilds.cache.get(TEST_GUILD_ID); // 批量注册服务器斜杠指令 await targetGuild.commands.set([ { name: 'ping', description: '测试机器人响应延迟' }, { name: 'beep', description: '触发机器人回复Boop' }, { name: 'server', description: '查询当前服务器基础信息' }, { name: 'user-info', description: '查询你的账号基础信息' } ]); console.log('指令注册完成'); });
- 启动机器人运行一次,看到控制台输出
指令注册完成后就可以注释掉这段代码 - 刷新Discord页面即可看到所有注册成功的指令
补充说明
- 如果你需要让指令在所有添加了机器人的服务器生效,把上述代码中的
targetGuild.commands.set替换为client.application.commands.set即可,全局指令注册后最多需要等待1小时完成全量同步 - 邀请机器人进服务器时要确保勾选了
applications.commands权限,否则注册的指令无法正常加载
内容的提问来源于stack exchange,提问作者AvivKeller
相关产品推荐
相关产品推荐

