Ввод от одного пользователя при Discord.js

#node.js #discord #discord.js

#node.js #Discord #discord.js

Вопрос:

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

Вот что я пробовал:

 const Discord = require('discord.js');


const client = new Discord.Client();

const prefix = '-';

client.on('message', message => {
    if(!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).split(/  /);
const command = args.shift().toLowerCase();


if(command === random) {
    message.channel.send('Please enter your starting number')
    channel.fetchMessages({ limit: 1 }).then(messages => {
        let min = messages.first();
    })
    message.channel.send('Please enter your limit')
    channel.fetchMessages({ limit: 1 }).then(messages => {
        let max = messages.first();
    })

    getRndInteger(min,max)

    function getRndInteger(min, max) {
        console.log(Math.floor(Math.random() * (max - min   1) )   min); 
      }

    
}

});
  

Я хочу, чтобы он подождал, пока пользователь, который его активировал, не назовет число (у него также может быть тайм-аут).

Ответ №1:

Вы можете использовать Channel.createMessageCollector() , чтобы подождать, пока ваш целевой пользователь не ответит, вот краткий пример:

 let min, max;
const filter = (msg) => msg.author.id === message.author.id; // only match messages from whoever sent the command
const collector = message.channel.createMessageCollector(filter, { max: 2 });
collector.on("collect", (m) => {
  if(!min) { // if min hasn't already been set, set it
    min = parseInt(m.content);
  } else { // otherwise set max
    max = parseInt(m.content);
  }
});
collector.on("end", () => {
  getRndInteger(min, max);
});
  

Есть и другие способы сделать это, но я считаю, что это самый простой, потому что в противном случае вам понадобилось бы несколько слушателей.

Комментарии:

1. В нем говорится: «ReferenceError: getRndInteger не определен`

2. Привет, это вызвано попыткой использования getRndInteger() до того, как вы его определите. Чтобы решить эту проблему, вы должны поместить function getRndInteger(min, max) { ... } куда-нибудь, прежде чем вызывать его. Было бы лучше определить функцию вне вашего прослушивателя сообщений.