Доступ к коллекции реакций после awaitReaction node.js - PullRequest
0 голосов
/ 25 июня 2019

Код ниже работает хорошо, пока я не попытаюсь отправить сообщения после выбора X или проверки. Я получаю это вместо https://i.gyazo.com/2b8c4cfcd047121df364218ef0e8d7e9.png

Насколько я понимаю, эта коллекция является картой. Я пробовал разные способы доступа к карте, и все они были либо неопределенными, либо [объектными объектами] и т. Д. Вместо имени пользователя, отправившего собранную реакцию. Согласно документам, response.users - это то, как я думаю, что к коллекциям обращаются, но это не работает для меня ...

Я знаю, что он подтвердил, кто отправил реакцию, потому что я добавил строку «message.reply (« Вы приняли вызов. »)» Прямо над message.channel.send (`$ {response.users} ... ", и он отвечает этой строкой сразу после того, как я отреагировал, и он правильно отображает имя пользователя. Я пытался использовать collection.get (), как я видел, что некоторые люди используют, что тоже не работает ... Я не может прогрессировать дальше для моего бота, не заставив это работать.

Мне требуется имя пользователя, идентификатор и т. Д. Для пользователя, который отреагировал, потому что его информация используется для отправки их в таблицу mysql, в которой содержится статистика игры, для которой предназначен этот вызов.

async function acceptQuestion() {

  const agree = "✅"
  const disagree = "❌"
  let msg = await message.channel.send(`A challenge has been issued by ${author}?\n\n**IF** you are listed above, please select one of the following to accept or deny the challenge...`)
  await msg.react(agree)
  await msg.react(disagree)

  const filter = (reaction, user) => {
  return ['✅', '❌'].includes(reaction.emoji.name) && uniquePlayersIDArray.includes(user.id);

  };
 const collector = await msg.createReactionCollector(filter, { time: 15000 });

  collector.on('collect', (reaction, reactionCollector) => {

  console.log(`Collected ${reaction.emoji.name}`)

  if (reaction.emoji.name === '✅') {
  message.channel.send(`${reaction.user} has **accepted** the challenge! Please await 5 minutes to pass or for all challenged players to respond!`)
  } else if (reaction.emoji.name === '❌') {
  message.channel.send(`${reaction.user} has **declined* the challenge! Please await 5 minutes to pass or for all challenged players to respond!`)
    }
    });

    collector.on('end', collected => {
    console.log(`Collected ${collected.size} items`);
    });
    }

Как я уже говорил выше, вместо [карты объектов] я хочу получить имя пользователя, который отправил реакцию. Мне также нужно будет получить идентификатор для пользователя. Ничто из того, что я пробую, не сработало.

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 25 июня 2019

Я думаю, что вместо reaction.user вам нужно будет использовать MessageReaction.users , который предоставит коллекцию всех пользователей, которые отреагировали на сообщение.Затем вы можете получить первого пользователя из коллекции и получить его / ее имя.

Пример кода (это не проверено, но должно привести вас в правильном направлении):

collector.on('collect', (reaction, reactionCollector) => {
    console.log(`Collected ${reaction.emoji.name}`)

    let firstUser = reaction.users.filter(user => !user.bot).first();

    if (reaction.emoji.name === '✅') {
        message.channel.send(`${firstUser.username} has **accepted** the challenge! Please await 5 minutes to pass or for all challenged players to respond!`)
    } else if (reaction.emoji.name === '❌') {
        message.channel.send(`${firstUser.username} has **declined* the challenge! Please await 5 minutes to pass or for all challenged players to respond!`)
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...