Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

418
Views
convertir cadena en devolución de llamada para usar como parámetros de función

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 } }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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 }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!