Estoy tratando de que mi cliente sepa qué matriz debe seguir.
var json = [{ command: "command 1", giveRole: "884005303811702794" }, { command: "command 2", giveRole : "948609651673563179" }]; for (var key in json) { if (json.hasOwnProperty(key)) { console.log(json[key].command); console.log(json[key].giveRole); } } client.on('message', message => { if (message.content.startsWith(json[key].command)) { target.roles.add([json[key].giveRole]); } });Por ejemplo, si envío el "comando 1", debería dar el rol "884005303811702794" y no "948609651673563179".
Así que tienes que buscarlo. Puedes usar find para hacerlo.
var json = [{ command: "command 1", giveRole: "884005303811702794" }, { command: "command 2", giveRole: "948609651673563179" }]; function getCommand (command) { return json.find(function (item) { return item.command === command; }); } console.log("command 1", getCommand("command 1")); console.log("command 2", getCommand("command 2")); console.log("command 3", getCommand("command 3"));Otra opción es cambiar sus comandos para que sea un objeto en lugar de una matriz.
var myCommands = { "command 1": { giveRole: "884005303811702794" }, "command 2": { giveRole: "948609651673563179" }, }; function getCommand(command) { return myCommands[command] || null; } console.log("command 1", getCommand("command 1")); console.log("command 2", getCommand("command 2")); console.log("command 3", getCommand("command 3"));Y si el comando no es la cadena completa, puede repetir
var json = [{ command: "command 1", giveRole: "884005303811702794" }, { command: "command 2", giveRole: "948609651673563179" }]; function getCommand (command) { return json.find(function (item) { return command.toLowerCase().startsWith(item.command); }); } console.log("command 1", getCommand("command 1 eat pizza")); console.log("command 2", getCommand("command 2 drink water")); console.log("command 3", getCommand("command 3 dance"));En primer lugar, parece que intenta encontrar el elemento en su matriz usando una clave, pero su matriz no está codificada.
En Javascript, puede usar el método de búsqueda en matrices. Esto devolverá el primer elemento de la matriz que devuelve un valor verdadero.
Según el ejemplo del Doc, debería poder encontrar el comando válido con esto:
let json = [{ command: "command 1", giveRole: "884005303811702794" }, { command: "command 2", giveRole : "948609651673563179" }]; const command = json.find(element => element.command === 'command 1');Otra buena manera de almacenar sus comandos sería almacenarlos en un objeto/matrices asociativas. Ex:
const commands = { command1: '884005303811702794', command2: '948609651673563179', } console.log('command1', commands['command1']) console.log('command2', commands['command2'])De esa manera, podría simplemente usar el valor del comando para tener el rol que desea.
En su situación, parece que desea que un bot de Discord asigne un rol cuando un mensaje comienza con "comando 1" o "comando 2". Si implementa una matriz con clave, se vería así:
const commands = { command1: '884005303811702794', command2: '948609651673563179', } client.on('message', message => { if (commands.hasOwnProperty(message.content)) { target.roles.add(commands[message.content]); } });