Discord.js имеет метод, который можно использовать для этой цели, MessageCollector
.Как только вы установите его на TextChannel
, он будет собирать сообщения, в зависимости от CollectorFilter
и MessageCollectorOptions
.
То есть, чтобы получитьответы, но чтобы легко редактировать исходное сообщение вопроса, он просто использует Message#edit()
для сохраненного метода идентификации сообщения.
Например:
const questions = ['What role?', 'What message?', 'What emoji?'];
const question = await message.channel.send(questions[0]); // store the question message object to a constant to be used later
const filter = msg => msg.author.id === message.author.id; // creates the filter where it will only look for messages sent by the message author
const collector = message.channel.createMessageCollector(filter, { time: 60 * 1000 }); // creates a message collector with a time limit of 60 seconds - upon that, it'll emit the 'end' event
const answers = []; // basic way to store to the answers, for this example
collector.on('collect', msg => { // when the collector finds a new message
answers.push(msg.content);
questions.shift();
if (questions.length <= 0) return collector.stop('done'); // sends a string so we know the collector is done with the answers
question.edit(questions[0]).catch(error => { // catch the error if the question message was deleted - or you could create a new question message
console.error(error);
collector.stop();
});
});
collector.on('end', (collected, reason) => {
if (reason && reason === 'stop') {
// when the user has answered every question, do some magic
}
message.channel.send('You did not answer all the questions in time or the original message was deleted!');
});
Примечание: я не проверял это, и он не очень хорошо сделан, но вы должны быть в состоянии адаптировать его для своего использования.Я предлагаю прочитать это руководство , которое расскажет больше об асинхронных сборщиках и более интересных вещах!