如何解决discord.js命令处理器配置别名alias不生效的问题
问题根因与解决方法
1. cmd参数说明
cmd是Array.find()方法回调函数的临时形参,代表遍历client.commands集合时的每一个命令对象,不需要在其他地方额外定义,这部分逻辑本身没有问题。
2. 别名不生效的原因
你获取command变量的逻辑是正常的,但后续多了一行错误的校验逻辑:
if (!client.commands.has(commandName)) return;
client.commands的键是每个命令的name字段(比如示例中的ping),不会存储别名(比如pg)。当你输入别名触发命令时,commandName是别名值,client.commands.has()会返回false,代码直接终止执行,自然没有反应也不会抛出错误。
3. 修复方案
直接删除上述错误校验行,换成校验你已经获取到的command变量是否存在即可,修改后的完整代码如下:
client.on('messageCreate', message => { if (message.author.bot) return; if (!message.content.startsWith(process.env.PREFIX)) return; const args = message.content.slice(process.env.PREFIX.length).trim().split(/ +/); const commandName = args.shift().toLowerCase(); const command = client.commands.get(commandName) || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); // 替换原有错误校验,直接判断command是否存在 if (!command) return; if (message.channel.name == 'general') return message.reply('smh no bot commands in general :raised_hand:'); if (!message.guild.me.permissions.has('SEND_MESSAGES')) return message.member.send(`I need the 'SEND_MESSAGES' permission to be able to reply to commands in the server: ${message.guild.name}`); try { command.execute(message, args, distube); } catch(error) { console.error(error); message.reply('Uh oh! It looks like you have encountered a glitch up in the system, please try again later! || <@498615291908194324> fix yo dead bot ||') } })
内容的提问来源于stack exchange,提问作者Jamie Dias
相关产品推荐
相关产品推荐

