Перед тем как я начну, я хотел бы заявить, что я новичок в кодировании, а не эксперт по кодированию, поэтому, пожалуйста, извините, если в моем коде есть какие-либо ошибки, поскольку я все еще учусь. Любая критика приветствуется, так как это улучшит мою работу:
Итак, как упоминается в заголовке, я хочу, чтобы пользователь для этого примера ввел "& test", и мой бот сделает это. DM пользователю, сказав что-то вроде «Пожалуйста, введите ответ отдыха», запустите сборщик сообщений, затем, когда пользователь ответит чем-то вроде «test», сборщик завершится и отправит ответ «test» на указанный канал. МНЕ БЫ. Я хотел бы реализовать эту функцию, так как ее текущая цель - отправить обновление о том, какие предметы находятся с кем (на сервере minecraft, да, я знаю, но мы довольно большая группа). Я недавно подумал добавить это in, когда я понял, что любой может ответить на любую команду пользователя, и сборщик просто остановился бы на этом, поэтому они продолжали наводнять канал ответа бесполезными вставками. Вот текущий код (без попыток реализации):
client.on('message', async message => {
if(message.author.bot) return;
if(message.content.toLowerCase() === '&reserveupdate') {
message.channel.send('**Please inform us on what you are doing with the reserve down below. Remember, don\'t take more than half of the current reserve:**');
let filter = m => !m.author.bot;
let counter = 0;
let collector = new discord.MessageCollector(message.channel, filter);
let destination = client.channels.cache.get('my channel id');
collector.on('collect', (m, col) => {
console.log("Collected message: " + m.content);
counter++;
if(counter === 1) {
message.channel.send("**Thanks for updating us on the Token Reserve!**");
collector.stop();
}
if(destination) {
if(m.content.toLowerCase() === '&stop' && (message.author.id === m.author.id)) {
console.log("Stopping collector.");
collector.stop();
}
else {
let embed = new discord.MessageEmbed()
.setTitle("**Reserve Update.**")
.setDescription(m.content)
.setTimestamp()
.setAuthor(m.author.tag, m.author.displayAvatarURL)
.setColor('#ada228')
.setFooter("The Unb. 9 Bot. Developed by: Alduin#0010")
destination.send(embed);
}
}
});
collector.on('end', collected => {
console.log("Messages collected: " + collected.size);
});
}
});
А вот пример кода, с которым я играл, чтобы переключить его на DM, собрать ответ, а затем отправить ответ пользователя. на указанный c идентификатор канала:
client.on('message', async message => {
if(message.author.bot) return;
if(message.content.toLowerCase() === '&reserveupdate') {
message.channel.send('**Please inform us on what you are doing with the reserve down below. Remember, don\'t take more than half of the current reserve:**');
let filter = m => !m.author.bot;
let counter = 0;
let collector = new discord.MessageCollector(discord.DMChannel, m => m.author.id, filter);
let destination = client.channels.cache.get('my channel id');
collector.on('collect', (m, col) => {
console.log("Collected message: " + author.content);
counter++;
if(counter === 1) {
message.channel.send("**Thanks for updating us on the Reserve!**");
collector.stop();
}
if(destination) {
if(m.content.toLowerCase() === '&stop' && (message.author.id === m.author.id)) {
console.log("Stopping collector.");
collector.stop();
}
else {
let embed = new discord.MessageEmbed()
.setTitle("**Reserve Update.**")
.setDescription(m.content)
.setTimestamp()
.setAuthor(m.author.tag, m.author.displayAvatarURL)
.setColor('#ada228')
.setFooter("The Unb. 9 Bot. Developed by: Alduin#0010")
destination.send(embed);
}
}
});
collector.on('end', collected => {
console.log("Messages collected: " + collected.size);
});
}
});
Бот успешно отправляет DM пользователю с ответом при вводе команды, однако всякий раз, когда команда выполняется, журнал Powershell сообщает:
"(node:4540) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'getMaxListeners' of undefined
at new MessageCollector"
Кто-нибудь может мне подсказать? Какие изменения я должен внести в свой код? Это функция, которую я хотел бы реализовать, поскольку я считаю, что это будет полезно для нашей группы и уменьшит беспорядок и спам. Мы очень ценим любой ответ!