Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

152
Visualizações
Collect reaction from dm message triggered by 'guildMemberAdd'

My bot sends a message when a new member is added to the guild. The message goes to a specific user.

    client.on('guildMemberAdd', member => {
    const adminDm = client.users.cache.get(Config.get('ADMIN'));
    client.commands.get('novoMembro').execute(member, adminDm);
}); 

Now I need to collect the reaction in order to assign some role to the new member.

const Discord = require('discord.js');

module.exports = {
    name: 'novoMembro',
    description: "Adding a new member to the guild",
    execute(member, adminDm){
        const novoMembroEmbed = new Discord.MessageEmbed()
        .setColor([153,0,76])
        .setTitle('NOVO MEMBRO ADICIONADO')
        .setDescription(`<@!${member.id}> foi adicionado`)
        .addFields( 
            {name: 'Selecione uma opção:', value: 'Reaja com 📨 para enviar mensagem de boas vindas \n Reaja com ❌ para cancelar'},
        );

        adminDm.send({ embeds: [novoMembroEmbed] }).then((msg => {
            msg.react('❌');
            msg.react('📨');
        }));
        
       
    }
}

Until this point, the code works fine. But I can't find a way to collect the reactions, every code I've tried doesn't work. I think I didn't understand right the concept of collecting reactions. these are some code I've tried.

const filter = (reaction) => ['❌', '📨'].includes(reaction.emoji.name);
const reactOptions = {maxEmojis: 1};

.then(() => msg.awaitReactions(filter, reactOptions)).then(collected => {
                if (collected.first().emoji.name === '📨') {
                    console.log('msg de boas vindas');
                }else{
                    console.log('cancelando');
                }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

There are a couple of errors with your code. In discord.js v13 the awaitReactions and createReactionCollector accepts a single parameter and the filter is part of the options object now. (See Changes in v13.) So, you need to update that; pass down a single object with a filter and a max or maxEmojis key.

You'll also need to update your filter as it currently collects the bot's reactions too. By checking if the user who reacted is the same as the admin, you can make sure you only collect the reactions you need.

You could also make execute async and use the await keyword to wait for the promises to be resolved.

And one last thing; make sure you enabled the required intents: DIRECT_MESSAGES and DIRECT_MESSAGE_REACTIONS.

Check out the code below:

module.exports = {
  name: 'novoMembro',
  description: 'Adding a new member to the guild',
  async execute(member, admin) {
    const novoMembroEmbed = new Discord.MessageEmbed()
      .setColor([153, 0, 76])
      .setTitle('NOVO MEMBRO ADICIONADO')
      .setDescription(`<@!${member.id}> foi adicionado`)
      .addFields({
        name: 'Selecione uma opção:',
        value:
          'Reaja com 📨 para enviar mensagem de boas vindas \n Reaja com ❌ para cancelar',
      });

    try {
      const sentDM = await admin.send({ embeds: [novoMembroEmbed] });
      // make sure you don't collect the bot's reactions
      const filter = (reaction, user) =>
        ['❌', '📨'].includes(reaction.emoji.name) && user.id === admin.id;

      sentDM.react('❌');
      sentDM.react('📨');

      // add a single options object only
      const collected = await sentDM.awaitReactions({ filter, maxEmojis: 1 });

      if (collected.first().emoji.name === '📨') {
        admin.send('msg de boas vindas');
      } else {
        admin.send('cancelando');
      }
    } catch (err) {
      console.log(err);
    }
  },
};

enter image description here

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda