Discord.js v14命令参数无法识别问题求助
问题分析与修复
核心问题出在参数分割的正则表达式上:
const args = message.content.slice(PREFIX.length).trim().split(/ + /);
这里的/ + /正则会匹配至少一个空格后再跟一个空格,只有当参数间有两个及以上空格时才会拆分。但正常用户输入命令时都是用单个空格分隔参数,这就导致参数无法被正确拆分,引发以下现象:
- 不输入参数时,
args数组执行shift()后为空,调用args[0]自然输出undefined - 输入参数但用单个空格分隔时,
split后的数组里只有一个元素(命令名+所有参数),shift()拿到的不是正确的命令名,导致找不到对应命令,触发if (!command) return;直接退出,所以控制台没有日志输出
修复方案
把参数分割的正则改成/ +/(匹配一个或多个空格),或者/\s+/(匹配任意空白字符,更灵活):
// 方案1:匹配一个或多个空格 const args = message.content.slice(PREFIX.length).trim().split(/ +/); // 方案2:匹配任意空白字符(包括空格、制表符等) const args = message.content.slice(PREFIX.length).trim().split(/\s+/);
修改后,输入!test hello world时,args会被正确拆分为['hello', 'world'],commandName也能正确获取为test,命令就能正常识别参数并执行了。
内容的提问来源于stack exchange,提问作者Kama
相关产品推荐
相关产品推荐

