Есть ли способ реагировать на каждое сообщение, когда-либо отправленное с помощью discord.js? - PullRequest
1 голос
/ 08 июля 2019

Я хочу использовать бота, чтобы реагировать на каждое отдельное сообщение в канале, используя discord.js, например, у меня есть канал для соревнований смайликов, и я хочу объявить ✖ и post реакцию на каждый пост там, все ненужные сообщенияубрано так, что там вроде 50 сообщений

Ответы [ 2 ]

1 голос
/ 08 июля 2019
  • Извлечение сообщений, уже отправленных в канале, с помощью TextChannel.fetchMessages().
  • Итерация по Collection .
  • Добавление реакцийс Message.react().
  • Когда новое сообщение отправляется в канал, вы также должны добавить реакции.
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);
    }
  }
});

В этом коде вы заметите, что я использую цикл for...of вместо Map.forEach().Причиной этого является то, что последние будут просто вызывать методы и двигаться дальше.Это приведет к тому, что любые отклоненные обещания , а не будут обнаружены.Я также использовал async / await стиль, а не then() цепочки, которые могли легко запутаться.

0 голосов
/ 08 июля 2019

Согласно https://discord.js.org/#/docs/main/stable/class/TextChannel

Вы можете использовать fetchMessages получить все сообщения от определенного канала, который затем возвращает коллекцию Message

Затем вы можете использовать функцию .react, чтобы применить свои реакции к этой коллекции сообщений, повторяя ее и вызывая .react для каждого.

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
            })
        })
    })
...