【发布时间】:2020-09-28 01:58:32
【问题描述】:
我正在尝试在 Discord 消息中搜索匹配的短语,然后使用该短语为过滤后的数组设置过滤器 - 当我只有一个短语要搜索时它可以工作,但它不适用于多个短语或者当没有输入短语时(如果没有匹配的短语,我希望它没有过滤器) - 任何和所有帮助都非常感谢!
module.exports = {
name: 'mission',
description: 'Randomly selects a mission',
execute(message, args) {
let missionArray = [
{
name: "Incisive Attack",
size: "Combat Patrol",
type: "Eternal War",
source: "BRB",
page: "286"
},
{
name: "Outriders Attack",
size: "Combat Patrol",
type: "Eternal War",
source: "BRB",
page: "287"
},
//more missions here
];
if (message.content.match('Combat Patrol')) {
let filter = {size:"Combat Patrol"};
} else if (message.content.match('Incursion')) {
let filter = {size:"Incursion"};
} else if (message.content.match('Strike Force')) {
let filter = {size:"Strike Force"}
} else if (message.content.match('Onslaught')) {
let filter = {size:"Onslaught"};
let filteredMission = missionArray.filter(function(item) {
for (var key in filter) {
if (item[key] === undefined || item[key] != filter[key])
return false;
}
return true;
});
let mission = filteredMission[Math.floor(Math.random() * filteredMission.length)];
return message.reply(`I have consulted the mission8Ball and you will play:\n**${mission.name}**\nMission Type: ${mission.type}\nBattle Size: ${mission.size}\nSource: ${mission.source}\nPage: ${mission.page}`);
}
}
};
我还想为来源和类型设置过滤器。
提前致谢!
【问题讨论】:
-
不知道我是否理解正确,但是你想匹配多个与任务参数相关的短语,然后找到符合这些参数的任务?诸如“战斗巡逻”(大小)或“BRB”(来源)或“永恒战争”(类型)之类的短语?您希望用户发送什么样的消息来调用它?当用户发送此命令时,您希望用户提供的最低要求参数是多少?
-
嗨 Allister,我的目标是当用户进入 !mission 时,他们将从任何可用的任务中获得一个随机任务。当他们进入!mission Combat Patrol时,他们只会从数组中获得一个随机任务,属性大小为:“Combat Patrol”,如果他们进入!mission Combat Patrol BRB,他们只会从数组中获得属性大小的任务大小:“Combat Patrol”和来源:“BRB”,如果他们进入!mission Combat Patrol BRB GT2020,他们会从数组中获得一个随机任务,属性大小:“Combat Patrol”和来源:“BRB”或《GT2020》等
-
我现在正在研究一个可以绕过 if/else 分支的答案,但是您应该知道您的 if/else 树存在一个大问题:
let filter =.... @987654323 @ 变量仅对创建它们的块有效。filter将在其使用时未定义,在分支之后。说到这,你有一个嵌套错误。您的let filteredMission = ...代码嵌套在if message == "Onslaught"的分支中。您应该将其移出,并在 if else 分支上方设置let filter = "",然后像这样设置过滤器:filter = ""。但我现在正在寻找答案。 -
这太棒了,将 if else 移到filteredMission之外已经可以工作了-但是它会存储过滤器以供将来搜索-有没有办法在发送消息后“清除”搜索?感谢您的帮助!
-
我不明白你的意思,你的范围应该在你每次打电话时重置。没关系,我的回答差不多了。
标签: javascript discord discord.js