Как мне заставить мою команду игнорировать других пользователей, но позволить исходному пользователю ответить? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь сделать команду work, которая требует правильного ответа, чтобы дать деньги. Это прекрасно работает, когда никто не отправляет сообщения между первоначальным «вопросом» и ответом, но если какое-либо сообщение прерывает это, оно полностью отменяет остальную часть. Я почти уверен, что это проблема с моим фильтром, но я понятия не имею, как это исправить. Я посмотрел на нем пару видео на YouTube, а также прочитал несколько других постов справочного форума, и все равно он не будет работать должным образом.

В журналах выдается следующая ошибка Cannot read property 'content' of undefined, которая возникает при ' Пользователь 2 говорит что-либо после того, как «пользователь 1» использует исходную команду work, но до того, как «пользователь 1» сможет использовать правильный ответ, в этом случае «огонь»

Я пытался передвигаться по filter во что бы то ни стало; Я также попытался избавиться от Authorid и просто использовать message.author.id. Я также заменил член для автора в той же части filter, которая оставила код работающим, но все еще не работающим так, как я хочу.

Я думаю, мой главный большой вопрос после всего этого - как, черт возьми, можно ли заставить его игнорировать ввод любого другого пользователя, но при этом продолжать исходную команду пользователя?

Я отредактировал ту часть, которая была предложена, но команда по-прежнему заканчивается сообщением об ошибке. Он точно фильтрует отправителя, так как работает нормально при ответе исходного автора, но если кто-то отвечает, он возвращается к ошибке.

else {
    message.channel.send(question).then(r => {
      const filter = msg => msg.author.id === message.author.id;
      };
      message.channel.awaitMessages(filter, { max: 1 }).then(collected => {
        const response = collected.first();
        let answer = response.content;
        if (result === 0 && answer.toLowerCase() === "fire") {
          let embed = new Discord.RichEmbed()
            .setTitle(`${message.author.username} went to work!`)
            .setColor("#ffd1dc")
            .setDescription(`You received ${amount} Quoins!`)
            .setFooter(
              message.member.user.username,
              message.member.user.displayAvatarURL
            );
          message.channel.send(embed);
          db.add(`qnhCurrency_${message.author.id}`, amount);
          db.set(`work_${message.author.id}`, Date.now());
          return;
        }

1 Ответ

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

Ваш filter должен проверить, был ли получен ответ командой author, используйте это как ваше filter: const filter = msg => msg.author.id === message.author.id

...