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

265
Vistas
Discord Bot: espera la respuesta después de la interacción

Probablemente no entendí muy bien cómo funciona la API de Discord cuando usamos awaitMessages . Lo que intento hacer es esperar un mensaje del usuario después de hacer clic en un botón en un canal privado:

 client.on('interactionCreate', async interaction => { if (interaction.isButton()) { if (interaction.customId.startsWith('dialogue-')) { const embed = new MessageEmbed() .setColor('#1a8175') .setTitle('📖 Dialogue') .setDescription('Please type your dialgoue') await interaction.channel.send({embeds: [embed]}) // My problem lies here const filter = m => m.author.id === interaction.author.id; await interaction.channel.awaitMessages(filter, { max: 1, time: 60000, errors: ['time'] }).then( async(collected) => { await interaction.channel.send('Received: ' + collected.first().content.toLowerCase()) }) } }

Como puede ver, el usuario hace clic en el botón, se envía un mensaje solicitando el diálogo. Después de eso, el bot debería recibir el siguiente mensaje.

Después de la depuración, vi que todo lo que escribo después de enviar el mensaje al usuario activa el evento messageCreate , por lo que mi código no funciona. Según tengo entendido, cuando usamos awaitMessages el bot debe esperar a que se complete la Promesa. No puedo entender lo que me estoy perdiendo aquí. ¿Algunas ideas? Gracias por adelantado

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

0

Como dijo @GodderE2D , debe cambiar interaction.author.id a interaction.user.id en su filtro.

También debe mover su filtro en el objeto de acuerdo con los documentos como este:

 const filter = m => m.author.id === interaction.user.id interaction.channel.awaitMessages({ filter, max: 1, time: 60000 })
about 4 years ago · Juan Pablo Isaza Denunciar

0

Leyendo más la documentación, encontré otra forma de hacer la misma tarea: Usando MessageCollectors

 const filter = m => m.author.id === interaction.user.id const collector = interaction.channel.createMessageCollector(filter, {max: 1, time: 60000}) collector.once('collect', async (message) => { const embed = new MessageEmbed() .setColor('#1a8175') .setTitle(`📖 Dialogue ${dialogueNumber} received with success!!`) .setDescription(`Dialogue received: ${message.content}`) await interaction.channel.send({embeds: [embed]}) })

Hace el trabajo y funciona bien. Sin embargo, la directiva de time no funciona correctamente. Configuré el tiempo en 4 segundos para enviar un mensaje al usuario si tarda demasiado en responder. Usar el end del oyente debería hacer el trabajo, de alguna manera no funciona y el bot está esperando la respuesta durante mucho tiempo (prefiero de esa manera), pero me gustaría entender por qué el bot todavía está colgado allí, esperando que el usuario lo haga. respuesta. Tengo la sensación de que el filtro debe estar mal:

 collector.on('end', collected => { if (collected.size === 0) { interaction.channel.send('Timeout - You did not send a dialogue') } });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Para obtener el usuario que inicializó la interacción, debe usar Interaction#user . Si bien debe usar Message#author para acceder al autor de un mensaje, necesitará usar user para las interacciones.

 const filter = m => m.author.id === interaction.user.id;

Siempre puede consultar la documentación si no conoce ciertas propiedades o métodos.

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