Estoy trabajando en un bot, y en cada uno de mis archivos de comandos tengo una función de ejecución en el módulo. exportaciones, por ejemplo: execute(msg, args) , pude obtener solo los parámetros entre paréntesis en mi index.js, y quiero usarlos para ejecutar dinámicamente todas las funciones/variables (y también porque estaba teniendo problemas con el orden en que las escribí para cada archivo) que necesito en el otro archivo con module.exports. Este es mi código (index.js):
const cmd = client.commands.get(command) const stringifiedCmd = cmd.execute.toString() var firstLine = stringifiedCmd.split('\n')[0] // Gets only the first line with the execute function var str = firstLine.substring( firstLine.lastIndexOf(`(`) + 1, firstLine.indexOf(`)`) // Outputs msg, args for example cmd.execute(str)Sin embargo, cuando se usa el comando, no parece reconocer los parámetros como válidos, ya que siguen siendo una cadena.
EDITAR:
Si es necesario, aquí hay un ejemplo de cómo están estructurados todos los archivos de mis comandos:
module.exports = { name: 'command', description: 'description of command', execute(msg, args) { // code } }Llegaste bastante lejos en esta solución. Habiendo obtenido todo entre el paréntesis de apertura y cierre, querrá dividirlo y recortar los resultados.
const argsStrings = firstLine.substring( firstLine.lastIndexOf(`(`) + 1, firstLine.indexOf(`)`) ).split(",").map(x => x.trim()); Ahora tiene una matriz de cadenas que representan los argumentos ( ["msg","args"] ). Ahora, ¿de dónde vas a sacar los valores? Supongamos por un momento que tiene un mapa que contiene el argumento como clave y el valor como el valor del argumento, por ejemplo
const container = { "msg": "Some message", "args": ["foo","bar"] }; Ahora, es tan fácil como llamar a apply en la función pasando los valores buscados desde el container para cada argumento
function execute(msg, args) { // Use this method to demo the result console.log(msg); console.log(args); } const stringifiedCmd = execute.toString() const firstLine = stringifiedCmd.split('\n')[0] const argsStrings = firstLine.substring( firstLine.lastIndexOf(`(`) + 1, firstLine.indexOf(`)`) ).split(",").map(x => x.trim()); const container = { "msg":"Some message", "args":["foo","bar"] } execute.apply(this, argsStrings.map(a => container[a]))Advertencia: lo único que debería tener en cuenta es que no hay nada en javascript que le impida dividir los argumentos de una función en varias líneas
function thisIsValid( arg1, arg2 ){ // code here }