javascript - Discord:使用命令从数组中获取数据
问题描述
我一直在尝试为此查看许多不同类型的教程,但我所做的一切似乎都没有奏效。对于我的不和谐机器人,我创建了一个包含以下对象的 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 之后的名称)链接回我的 json 文件中的数组,以便我可以获取数组中的其他值。现在我想做的是用 Shift(1) 创建一个 const 以便 const 保存我的第一个参数,但我仍然不确定如何使用它从数组中获取信息。对此的任何指导将不胜感激!
解决方案
您可以根据用户的第一个参数(应该是培训师的姓名)过滤json 数据中的可用培训师。如果 json 数据中的名称与用户请求的培训师匹配,您可以使用模板文字干净地构造要发送的字符串,否则您可以告诉用户培训师不存在。
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!`);
推荐阅读
- c# - 在 C# 中禁用 Excel 工作簿的自动保存?
- http - 如何从 json 请求创建一个复杂的类
- amazon-web-services - 在 AWS Lambda 中访问用户身份
- python - 在 matplotlib 中,使用 plot 和 hist 的返回绘制直方图
- python - 如何根据时间(以毫秒为单位)对 JSON 列表进行排序?
- symfony - 带有过滤器列表的 symfony easyadmin 表单字段类型实体
- css - 设置元素之间的空间 - 边距顶部/底部
- c# - 将浮点数保存到文本文件无法正常工作
- reactjs - 如何在 Draftjs 编辑器中修改样式?
- android - 我的 ScrollView 没有滚动 - 如何解决?