Я создаю бота, отправляя встраивание и собираю с него реакцию. После реакции бот редактирует свое вложение, чтобы показать всех пользователей, которые отреагировали.
Иногда это срабатывает, когда 2 или 3 пользователя быстро реагируют, особенно при запуске бота. Но после этого он больше не собирает реакций.
Бот размещен на Heroku и использует worker в procfile.
Я пробовал на локальном, но иногда он блокируется после 1 реакции пользователя.
const client = new Discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION'] });
function sendEmbed(message) {
var users = [];
message.channel.send(startingEmbed).then(async function(message){
const filter = (reaction, user) => reaction.emoji.name === '????';
const collector = message.createReactionCollector(filter, { max: 50, time: 3 * 24 * 60 * 60 * 1000 });
collector.on('collect', async (reaction, user) => {
var users = [];
console.log(`Collected ${reaction.emoji.name} from ${user.tag}`);
if (reaction.message.partial) await reaction.message.fetch();
if (reaction.partial) await reaction.fetch();
var result = false;
for (var u in users) {
if (users[u].name === user.username) {
result = true;
break;
}
}
if(result == false) {
var roll = {};
roll.name = user.username;
roll.value = random(); //Math.random() method
users.push(roll);
var description = '';
users.forEach(element => {
description += '???? ' + element.value + ' for ' + element.name + '\n';
});
var edittedEmbed = new Discord.MessageEmbed()
.setColor('#0099ff')
.addFields(
{ name: 'rolls', value: `${description}`, inline: true },
);
message.edit(edittedEmbed);
console.log('newest user ' + roll.name + ' ' + roll.value);
users.forEach(element => console.log('user table' + element.name + ' ' + element.value));
}
});