Estoy tratando de que mi bot de Discord maneje los comandos con espacios en el argumento. Mi variable args está definida en mi archivo index.js :
const args = message.content.slice(prefix.length).split(/ +/); const commandName = args.shift().toLowerCase(); Mi archivo de comando ( perk.js ) se ve así:
const Discord = require('discord.js'); const PerkData = require('./perk.json'); module.exports = { name: 'perk', args: true, execute(message, args) { for (let i = 0; i < PerkData.perks.length; i++) { if (PerkData.perks[i].id.toLowerCase() === args[0].toLowerCase()) { const perkEmbed = new Discord.MessageEmbed() .setColor('#000000') .setTitle('__**' + PerkData.perks[i].name + '**__ ') .setURL(PerkData.perks[i].url) .setThumbnail(PerkData.perks[i].gif) .setDescription('A teachable unique [' + PerkData.perks[i].character + '](' + PerkData.perks[i].characterURL + ') Perk <:Perk:833657215743295499>. It can be unlocked for all other characters from Level ' + PerkData.perks[i].lvl + ' onwards:') .addField('__Description__', PerkData.perks[i].description, false) message.channel.send(perkEmbed) } } } } A partir de este momento, tengo un campo "id" en el archivo JSON que tiene guiones - en lugar de espacios, que luego lee el archivo perk.js y lo compara con la descripción. Ejemplo: .perk ace-in-the-hole
¿Cómo lo hago para poder usar espacios en el argumento en lugar de tener que usar guiones?
¿Necesito cambiar cómo se args los argumentos en index.js ? ¿O se puede hacer dentro del archivo de comandos, perk.js ?
Para resumir, tengo: .perk ace-in-the-hole . Pero quiero poder hacer esto: .perk ace in the hole
(Lo siento si esto fue mal escrito, no soy un codificador experimentado...)
Simplemente puede unir la matriz de argumentos con un espacio.
execute(message, args) { // Join the args array let perkArg = args.join(' ') for (let i = 0; i < PerkData.perks.length; i++) { if (PerkData.perks[i].id.toLowerCase() === perkArg.toLowerCase()) { // ... } } } Suponiendo que todos los ID de beneficio sean únicos y que solo desee enviar un mensaje, también puede buscar en toda la matriz PerkData.perks en una sola línea sin un bucle for para encontrar un solo elemento.
// Join the args array let perkArg = args.join(' ') let perk = PerkData.perks.find(perk => perk.id === perkArg.toLowerCase()) if(perk !== undefined) { // perk was found } else { // perk was not found }