Бот реагирует на смайлики - PullRequest
0 голосов
/ 17 апреля 2020

Итак, я получил свой код, и он работает так, как я хочу. всплывающее сообщение меняет все, оно идеально.
Теперь я хочу добавить, чтобы бот знал, когда я реагирую на его сообщение, а затем делает что-то еще. Я имею в виду: бот отправляет сообщение с реакцией, и всякий раз, когда какой-то пользователь нажимает на реакцию, что-то происходит, но я понятия не имею, как это сделать.

Я пробовал много вещей, таких как if (reaction.emoji.name === ':bomb:'), но появилось много ошибок, и я не знал, как это исправить. Вот код:

const Discord = require('discord.js');
const { prefix, token } = require('./config.json');
var lastbuffer;
lastbuffer = 0;
const client = new Discord.Client();
client.once('ready', () => {
  console.log('Ready!');

});
client.on('message', message => {
  if(message.content.startsWith(`${prefix}start`)){
    message.delete()
    setInterval(function(){
      lastbuffer++;
      const Buffer = new Discord.MessageEmbed()
      .setColor('#8300FF')
      .setTitle("**It's time to check buffers!**")
      .setDescription("**It's been **" + "`" + lastbuffer + " Hour" + "`" + "** since last buffercheck, <@&675688526460878848>**." + " **Check now!**")
      .setThumbnail('https://art.pixilart.com/88534e2f28b65a4.png')
      .setFooter('WEEEEEWOOOOO')
      .setTimestamp();
      client.channels.cache.get("700296799482675230").send(Buffer).then(msg => {
        msg.react('✅');
        msg.react('?');
        msg.delete({timeout: 4000})
      });
    }, 5000)
  }
}); 

client.login(token);

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вам необходимо использовать реакционный коллектор .

client.channels.cache.get("700296799482675230").send(Buffer).then(async msg => {
  // I'm using await here so the emojis react in the right order
  await msg.react('✅');
  await msg.react('?');
  msg.awaitReactions(
    // only collect the emojis from the message author
    ({emoji}, user) => ['✅', '?'].includes(emoji.name) && user.id === message.author.id,
    // stop collecting when 1 reaction has been collected or throw an error after 4 seconds
    {max: 1, time: 4000, errors: ['time']}
  )
    .then(collected => {
      const reaction = collected.first()
      // do something
    })
    .catch(() => {
      // I'm assuming you want to delete the message if the user didn't react in time
      msg.delete()
    })

Что этот код делает:

  • Отправляет код (Buffer) на канал с идентификатором 700296799482675230
  • Реагирует с ✅, а затем ? emojis на сообщение с вложением
  • Ожидает реакцию ✅ или from от автора исходного сообщения
    • Если пользователь реагирует в течение 4 секунд, запускает // do something part
    • Если пользователь не реагирует в течение 4 секунд, удаляет сообщение с вложением
1 голос
/ 17 апреля 2020

Вы должны будете использовать ReactionCollector, используя метод createReactionCollector().

Вы можете следовать этому руководству до ReactionCollector с лучше

...