#javascript #node.js #discord #discord.js #chatbot
#javascript #node.js #Discord #discord.js #чат-бот
Вопрос:
Я довольно новичок в программировании и discord.js в общем, поэтому я использовал обработчик команд из руководства. Я пытаюсь создать бота, который, когда вы делаете!при запуске он выдает вам игру из gameList
массива, который я создал. Это работает так, как задумано, и отправляется в виде расширенной вставки.
Я хотел сделать так, чтобы, если группа не была удовлетворена этой игрой, они могли повторно запустить ее, проголосовав не менее чем за 3. Для этого я попытался использовать реакции на сообщение, но не смог заставить что-либо действительно работать.
module.exports = {
name: 'spin',
description: 'Spins the wheel!',
execute(message) {
const gameList = ['Games inside array'];
var x = Math.floor(Math.random() * gameList.length);
var games = gameList[x];
const voteEmbed = new Discord.MessageEmbed()
.setColor('#F8AA2A')
.setTitle('🎲Game Spinner🎲')
.addField(games, ' was the chosen game!');
message.channel.send(voteEmbed).then((voteEmbed) => {
voteEmbed.react('👎');
});
var noCount = 0;
const filter = (reaction, user) => {
return [`👎`].includes(reaction.emoji.name);
};
const collector = message.createReactionCollector(filter, { time: 10000 });
collector.on('collect', (reaction, reactionCollector) => {
if (reaction.emoji.name === `👎`) {
noCount = 1;
}
});
collector.on('end', (reaction, reactionCollector) => {
if (noCount >= 3) {
message.channel.send(voteEmbed).then((voteEmbed) => {
voteEmbed.react('👎');
});
}
});
},
};
Никаких ошибок не отображается, оно просто никогда не отправляет новое voteEmbed
после того, как набрано три голоса. Извините, если это глупый вопрос.
Ответ №1:
Ваша ошибка находится здесь: const collector = message.createReactionCollector(filter, {time: 10000});
Вы создаете сборщик реакций на сообщение, полученное в конце, когда хотите прослушать реакции на отправленное сообщение.
Вам нужно заменить свой код чем-то вроде:
Основная правка заключается в изменении reactionCollector для прослушивания встроенного сообщения ^
const Discord = require('discord.js');
module.exports = {
name: "spin",
description: "Spins the wheel!",
execute(message) {
const gameList = [Games inside array]
var x = Math.floor(Math.random() * gameList.length);
var games = gameList[x];
const voteEmbed = new Discord.MessageEmbed()
.setColor("#F8AA2A")
.setTitle("🎲Game Spinner🎲")
.addField(games, " was the chosen game!");
message.channel.send(voteEmbed).then(voteEmbed => {
voteEmbed.react('👎')
var noCount = 0;
const filter = (reaction, user) => {
return [`👎`].includes(reaction.emoji.name);
const collector = voteEmbed.createReactionCollector(filter, {time: 10000});
collector.on('collect', (reaction, reactionCollector) => {
if (reaction.emoji.name === `👎`) {
noCount =1
}
});
collector.on('end', (reaction, reactionCollector) => {
if (noCount >= 3){
message.channel.send(voteEmbed).then(voteEmbed => {
voteEmbed.react('👎')
})
}
});
})
};
}
};
Комментарии:
1. Спасибо за ответ! Я попробовал приведенный выше код, и я по-прежнему не получал никаких ошибок, но после достижения требуемого количества голосов он не будет повторно отправлять новый voteEmbed. Если у вас есть какие-либо идеи о том, почему это не работает, я весь внимание.