Discord自定义Slash命令异常:三命令仅两个显示求助
解决Discord Slash命令不显示的问题
针对你遇到的三个Slash命令中rules无法显示的情况,按以下步骤排查修复:
1. 确认命令已提交到Discord API
你的main.js只实现了命令的本地加载,但没有将命令数据注册到Discord的API——这是Slash命令能在客户端显示的必要步骤。
在client.on('ready')事件中添加注册代码:
client.on('ready', async () => { // 注册全局命令(全平台生效,需等待约1小时同步缓存) await client.application.commands.set(client.commands.map(cmd => cmd.data)); // 若仅需在特定服务器生效,改用以下代码(立即同步) // const targetGuild = client.guilds.cache.get('你的服务器ID'); // await targetGuild.commands.set(client.commands.map(cmd => cmd.data)); console.log(`机器人已登录:${client.user.tag}`); });
添加后重启机器人,确保rules命令的data被提交到Discord。
2. 修复命令文件的语法问题
对比你提供的代码,yt和rules命令的execute方法存在缩进错误,导致它不属于module.exports的对象属性(虽然yt可能侥幸生效,但语法不规范)。修正rules.js的结构:
let { SlashCommandBuilder } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('rules') .setDescription('server rules'), // 确保execute与data同级,作为对象的直接属性 async execute(interaction) { await interaction.reply('(rules)'); } };
注意:对象最后一个属性末尾不要加多余逗号,避免语法解析错误。
3. 检查控制台警告
启动机器人时,查看控制台是否出现[warn] The command at ... is missing a required "data" or "execute" property.的提示。如果有,说明rules.js的结构依然存在问题,需重新检查data和execute是否正确导出。
4. 刷新Discord客户端缓存
Discord客户端可能会缓存旧的命令列表,按Ctrl+R刷新客户端,或退出重新登录、切换服务器后返回,确认rules命令是否显示。
内容的提问来源于stack exchange,提问作者Sapphy
相关产品推荐
相关产品推荐

