有什么办法可以改变参数的顺序吗?

时间:2019-01-26 17:30:23

标签: discord.js

我正在使用一个命令在地图上搜索游戏osu!在bloodcat.com网站上,我制作了一种使用以下方法过滤地图的方法:

.split('status=ranked').join('&c=b&s=1&m=&g=&l=')
.split('status=approved').join('&c=b&s=2&m=&g=&l=')
.split('status=qualified').join('&c=b&s=3&m=&g=&l=')
.split('status=loved').join('&c=b&s=4&m=&g=&l=')
.split('status=unranked').join('&c=b&s=0&m=&g=&l=')
.split('status=graveyarded').join('&c=b&s=0&m=&g=&l=');

现在某人可以做!search 'map name' status=unranked,而这会寻找https://bloodcat.com/osu/?mod=json&q='map name'&c=b&s=0&m=&g=&l=,但是如果某人做了某事,例如!search status=unranked 'map name',那是不可行的。 即使用户没有在命令中将status=unranked放在结尾,我也可以结束吗?

1 个答案:

答案 0 :(得分:2)

我会这样:首先,检查参数字符串是否以status=开头。如果是这样,则需要切换它们,否则,它应该像现在一样工作。
为了切换它们,我将用空格分割字符串,删除第一个参数(status=*),用空格重新加入并添加删除的部分:

function getQueryURL(argStr = "") { // argStr should be like "'map name' status=unranked" OR "status=unranked 'map name'"
  if (argStr.startsWith('status=')) {
    let arr = argStr.split(' ');
    let removed = arr.shift();
    argStr = arr.join(' ').trim() + removed.trim();
  }

  let res = argStr.split('status=ranked').join('&c=b&s=1&m=&g=&l=')
    .split('status=approved').join('&c=b&s=2&m=&g=&l=')
    .split('status=qualified').join('&c=b&s=3&m=&g=&l=')
    .split('status=loved').join('&c=b&s=4&m=&g=&l=')
    .split('status=unranked').join('&c=b&s=0&m=&g=&l=')
    .split('status=graveyarded').join('&c=b&s=0&m=&g=&l=');

  return "https://bloodcat.com/osu/?mod=json&q=" + res;
}