Discord: использование команды для получения данных из массива - PullRequest
3 голосов
/ 13 июля 2020

Я пытался просмотреть так много разных типов руководств, но ничего из того, что я делаю, похоже, не работает. Для своего бота Discord я создал файл json, в котором находится следующий объект

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

Теперь я пытаюсь понять, как я могу создать команду, чтобы, если кто-то наберет! Тренера Боба, мне нужен бот отображать значения для 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), чтобы она содержала мой первый аргумент, но я все еще не уверен, как использовать это для получения информации из массива. Будем очень признательны за любые рекомендации по этому поводу!

1 Ответ

1 голос
/ 13 июля 2020

Вы можете фильтровать доступные трейнеры в ваших 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!`);
...