Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

419
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda