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

172
Vistas
¿Cómo paso la variable del gremio a un archivo de eventos en discord.js?

Estoy usando la guía en discordjs.guide para tener archivos de escucha de eventos separados, y estaba tratando de agregar otro. Específicamente, el evento GuildCreate. En el archivo index.js, tengo esto:

 const eventFiles = fs.readdirSync('./events').filter(file => file.endsWith('.js')); for (const file of eventFiles) { const event = require(`./events/${file}`); if (event.once) { client.once(event.name, (message, guild, ...args) => event.execute(message, guild, ...args)); } else { client.on(event.name, (message, guild, ...args) => event.execute(message, guild, ...args)); } }

Y en el lado del evento, tengo esto:

 const Discord = require('discord.js'); const prefix = require('../config.json') module.exports = { name: 'guildCreate', once: true, async execute(client, guild) { console.log(guild) const introembed = new Discord.MessageEmbed() .setTitle('Hiya!') .setColor('RANDOM') .setDescription(`Long description here`) const owner = await guild.fetchOwner(); owner.send({ embeds: [introembed]}).catch(console.error()) console.info(`I just joined a new server! I am now a member of ${guild.name}`) }, };

Cuando se emite el evento guildCreate, aparece el error: TypeError: Cannot read properties of undefined (reading 'fetchOwner') debido a await guild.fetchOwner(); . He intentado pasar la variable desde el lado del índice: client.on(event.name, (message, guild, ...args) => event.execute(message, guild, ...args)); , como puede ver, agregué la variable del gremio para pasar, y en el lado del archivo de eventos: async execute(client, guild) { Agregué la variable del gremio para ejecutar. Incluso con la adición de las variables en esos lugares, sigo recibiendo el error que dice que el gremio no está definido. ¿Alguna idea de lo que está mal? Cualquier ayuda es apreciada.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Nota: Esto está optimizado para Discord.js v13.3.0


Pasar variables vacías

Como lo señaló @Elitezen , pasar message y el guild no tienen valor ya que nunca se definen en su código en ninguna parte. Esto puede provocar que se arrojen errores debido a variables indefinidas (a menos que tenga controladores de errores en su código en otro lugar). Como se indica en la guía, el argumento ...args pasará a cualquier argumento recibido del evento. Así es como funcionaría algo así:

  • Se recibe un evento ( guildCreate )
  • El proceso busca en sus archivos
 discord-bot/ ├── node_modules ├── config.json ├── index.js ├── package-lock.json ├── package.json └── events └ guildCreate.js
  • Una vez que encuentra una coincidencia, ejecuta el código. En la documentación , se observa que solo se envía un gremio cuando se dispara el evento. Esto significa que ...args solo contendrá un argumento, que es un gremio. Los argumentos de los eventos no tienen nombres, se recomiendan los de la documentación.

El problema con su código es que ha enviado una variable vacía llamada guild al archivo de ejecución.

 async execute(client, guild) {

El código mira esta línea y usa la variable vacía que enviaste llamada guild . Es por eso que está recibiendo un TypeError.

Eventos de un solo argumento

Para solucionar esto, todo lo que necesita hacer es eliminar los dos argumentos client y guild de su archivo index.js y eliminar el client de su archivo guildCreate.js . El resultado será algo como esto:

 // index.js if (event.once) { client.once(event.name, (...args) => event.execute(...args)); } else { client.on(event.name, (...args) => event.execute(...args)); } // guildCreate.js async execute(guild) {

Eventos de múltiples argumentos

A veces, recibirá eventos que tienen varios argumentos, como messageReactionAdd . Ese evento le dará dos argumentos (sin nombre) en este orden : unMessageReaction y un User . Así es como se vería:

 // index.js if (event.once) { client.once(event.name, (...args) => event.execute(...args)); } else { client.on(event.name, (...args) => event.execute(...args)); } // messageReactionAdd.js async execute(messageReaction, user) {

Tenga en cuenta que no he definido ningún argumento en index.js y solo los definí en messageReactionAdd.js .

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