我正在尝试制作一个与服务器进行一些交互的 Discord 机器人。
我已经编写了一些可以工作的代码,但它有一个大问题。这是我的代码:
if (command === "file") {
var accusor = message.author.id;
var username = args[0];
var reason = args[1];
var punishment = args[2];
var duration = args[3];
if(!duration) duration = "N/A";
console.log("Returning last " + amount + " for " + username);
request.post({url:'http://grumpycrouton.com/kismet/api/post_complaint.php', form: {accusor:accusor,search:username,reason:reason,punishment:punishment,duration:duration}}, function(err,httpResponse,body) {
message.reply(body);
});
}
命令是!file {playername} {reason} {punishment} {duration}
,但问题是,有时少数变量可能有多个单词。例如,{reason}
可能是“玩家玩得很开心”之类的内容,但由于参数的分割方式,我的代码无法正确解析它。
假设输入了以下命令:
!file GrumpyCrouton "Player had a bad time" Kick "1 Day"
但参数实际上会以不同的方式展开,因为第三个参数中有空格,但正则表达式将所有参数都按空格分割,而不管引号如何。基本上,Discord 会忽略引号并使用每个单词作为它自己的参数,从而使{punishment}
and {duration}
参数索引为 6 和 7,而不是 2 和 3,因为每个单词都被算作一个参数。
这就是我的论点的解读方式:
const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
如何才能使引号括起来的字符串被读取为单个参数而不是多个?