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

263
Views
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 answers
Answer question

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 Report

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 Report

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 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!