【问题标题】:Discord: Using a command to get Data from ArrayDiscord:使用命令从数组中获取数据
【发布时间】:2020-11-02 06:28:51
【问题描述】:

为此,我一直在尝试浏览许多不同类型的教程,但我所做的一切似乎都没有奏效。对于我的不和谐机器人,我创建了一个包含以下对象的 json 文件

{"trainer":[{"name":"Bob","C0":45,"C1":84,"C2":147},
    {"name":"Paul","C0":60,"C1":104,"C2":167}],
"prefix":!
}

现在我想弄清楚如何发出命令,所以如果有人输入 !trainer Bob,我希望机器人显示 CO、C1 和 C2 的值

目前我有以下内容:

const args = message.content.slice(X.prefix.length).split(/ +/);
const command = args.shift().toLowerCase();

X 是 json 文件的名称。以下是我卡住​​的地方

 if(command === "trainer"){
    message.channel.send('WHAT DO I PUT HERE?')
}

现在我对这一切都很陌生,但如果我的理解是正确的,我的参数 0 在这种情况下是 trainer,所以我想要使用我的第一个参数(将是 !trainer 之后的名称)来链接回我的 json 文件中的数组,以便我可以获取数组中的其他值。现在我想做的是用 Shift(1) 创建一个 const 以便 const 保存我的第一个参数,但我仍然不确定如何使用它从数组中获取信息。任何有关这方面的指导将不胜感激!

【问题讨论】:

    标签: javascript node.js arrays json discord.js


    【解决方案1】:

    您可以根据用户的第一个参数(应该是培训师的姓名)filter json 数据中的可用培训师。如果 json 数据中的名称与用户请求的培训师匹配,您可以使用 template literal 干净地构造一个要发送的字符串,否则您可以告诉用户培训师不存在。

    let queriedTrainerName = args[0];
    let trainersArray = X.trainer;
    let matchingTrainers = trainersArray.filter(trainerObject => trainerObject.name.toLowerCase() === queriedTrainerName.toLowerCase());
    if (matchingTrainers.length > 0) {
        let firstMatch = matchingTrainers[0];
        message.channel.send(`For trainer ${queriedTrainerName}: C0 is ${firstMatch.C0}, C1 is ${firstMatch.C1}, C2 is ${firstMatch.C2}`);
    } else message.channel.send(`Trainer ${queriedTrainerName} does not exist!`);
    

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 2022-07-07
      • 2020-02-16
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 2017-04-16
      相关资源
      最近更新 更多