我制作了一个画布Discord机器人,并且想要执行以下命令:
.igor arg1|arg2|arg3
。现在,如您所见,只有命令由一个简单的空格分隔,而args由一个竖线分隔。
我首先要做的是:
let args = message.content.slice(cfg.prefix.length).trim().split(/\|+/g)
这是我的代码:
client.on("message", function (message) {
if (!message.content.startsWith(cfg.prefix) || message.author.bot) return;
let args = message.content.slice(cfg.prefix.length).trim().split(/+\|+/g)
let command = args.shift().toLowerCase();
if (command === "igor") {
console.log(`test: args: ${args} commande: ${command}`);
}
})
看到控制台日志行吗?我希望我的控制台在键入命令test: args: arg1,arg2,arg3 commande: igor
时打印.igor arg1|arg2|arg3
。如果我用实际代码键入此命令,那么控制台上绝对没有任何显示。但是,如果我输入如下命令:.igor|arg1|arg2|arg3
,则控制台会打印我想要的东西。但是,我不想这样键入命令。谁想要键入这样的命令?
我需要放另一个切片并拆分。但是在哪里,如何?我真的需要再切成薄片然后拆分吗?我不知道了。
答案 0 :(得分:0)
由于Titus,我找到了解决问题的方法:这是我的正则表达式。
这是我的旧正则表达式:/+\|+/g
,这是我的新正则表达式:/\s|\|/g
此正则表达式检测空格和|。现在,如果我键入以下内容:.igor arg1|arg2|arg3
,控制台将显示以下内容:test: args: arg1,arg2,arg3 commande: igor
,这就是我想要的。
但是,如果我这样输入命令:.igor arg1 | arg2 | arg3
,该怎么办?我的控制台将打印以下内容:test: args: arg1,,,arg2,,,arg3 commande: igor
。该机器人认为空格是参数。
解决方案非常简单。我需要做的就是在变量的末尾添加.filter(Boolean)
:
let args = message.content.slice(cfg.prefix.length).trim().split(/\s|\|/g).filter(Boolean)
。
现在,即使我在参数之间放置了数百万个空格,我的控制台也会打印以下内容:test: args: arg1,arg2,arg3 commande: igor
。
编码愉快!