2
votes

I wanna use an bot to react to every single message in an channel using discord.js f.e. i got an emoji contest channel and i wanna ad an ✅ and an ✖ reaction on every post in there ofc, all the unnecesary messages are cleaned up so that there are like 50 messages

2

2 Answers

3
votes
const emojiChannelID = 'ChannelIDHere';
client.on('ready', async () => {
  try {
    const channel = client.channels.get(emojiChannelID);
    if (!channel) return console.error('Invalid ID or missing channel.');

    const messages = await channel.fetchMessages({ limit: 100 });

    for (const [id, message] of messages) {
      await message.react('✅');
      await message.react('✖');
    }
  } catch(err) {
    console.error(err);
  }
});
client.on('message', async message => {
  if (message.channel.id === emojiChannelID) {
    try {
      await message.react('✅');
      await message.react('✖');
    } catch(err) {
      console.error(err);
    }
  }
});

In this code, you'll notice I'm using a for...of loop rather than Map.forEach(). The reasoning behind this is that the latter will simply call the methods and move on. This would cause any rejected promises not to be caught. I've also used async/await style rather than then() chains which could easily get messy.

1
votes

According to https://discord.js.org/#/docs/main/stable/class/TextChannel

you can use fetchMessages to get all messages from a specific channel, which then returns a collection of Message

Then you can use .react function to apply your reactions to this collection of message by iterating over it and calling .react on each.

Edit:

channelToFetch.fetchMessages()
    .then(messages => {
        messages.tap(message => {
            message.react(`CHARACTER CODE OR EMOJI CODE`).then(() => {
              // Do what ever or use async/await syntax if you don't care 
                 about Promise handling
            })
        })
    })