javascript - 未检测到 Discord js 反应
问题描述
discordjs 有一些我不明白的地方。我想制作一个机器人,在人们对消息做出反应时列出他们。它部分有效,当输入命令的人(或之前输入过命令的人)对机器人的消息做出反应时,消息会立即编辑。但是当它是从未输入过命令的人时,它并没有更新。
const Discord = require('discord.js');
const client = new Discord.Client();
var auth = require('./auth.json');
const regexTime = new RegExp('^(0[0-9]|1[0-9]|2[0-3]|[0-9])([:|h])([0-5][0-9])?$');
var messageBot = "";
var time;
var timer;
var commandeValide=false;
var date = new Date;
var heureMs;
client.on('ready', () => {
console.log(client.guilds.fetch())
});
client.on('message', msg => {
if (msg.content.substring(0,1) === '!') {
var args = msg.content.substring(1).split(' ');
var cmd = args[0];
switch(cmd){
case 'amongus':
dateGame = args[1];
time = args[2];
messageBot = '@everyone Est-ce que des personne veulent faire un Among us à '+ time + ' le '+ dateGame;
if ( dateGame != undefined && time != undefined ){
var heure = time.split('h')[0] * 3600000;
var minute = time.split('h')[1] * 60000;
var temps = heure + minute;
heureMs = date.getHours() * 3600000 + date.getMinutes() * 60000;
if(regexTime.test(time) && isDate(dateGame)){
if(temps>heureMs){
commandeValide=true;
msg.channel.send(messageBot).then(sendMessage => {
sendMessage.react('✅')
});
timer = temps - heureMs;
}
}else{
msg.reply("Veuillez rentrer une heure ou une date valide!");
commandeValide=false;
}
}else{
msg.reply("Veuillez rentrer une heure et/ou une date s'il vous plaît! (exemple: !amongus 19/04 20h)");
commandeValide=false;
}
}
}
if(commandeValide){
const filter = (reaction, user) => {
console.log(client.users.cache);
//return ['✅'].includes(reaction.emoji.name);
return reaction.emoji.name === '✅' && user.id !== msg.author.id;
};
const collector = msg.createReactionCollector(filter, { dispose: true, time: timer }); //dispose: true permet d'utiliser remove
collector.on('collect', (reaction, user) => {
reaction.users.fetch().then((user) => {
updateMessage(user.array(),msg);
});
});
collector.on('remove', (reaction, user) => {
reaction.users.fetch().then((user) => {
updateMessage(user.array(),msg);
});
});
collector.on('end', collected => {
console.log(`Collected ${collected.size} items`);
});
}
});
function updateMessage(tab, msg){
var listparticipant = "";
tab.forEach(user => {
if(user.id !== auth.server_id){
listparticipant += "- " + user.username + "\n";
}
})
msg.edit(messageBot + "\n" + listparticipant);
console.log(listparticipant);
}
client.login(auth.token);
解决方案
Discord 改变了它们发出事件的数量,确保将他正确的意图放在你的机器人上,然后再试一次!
const client = new Discord.Client({
ws : {
intents: [
'GUILD_MEMBERS',
'GUILD_MESSAGES',
'GUILD_MESSAGE_REACTIONS' //<--- the intent you need to detect reactions on messages in a guild
]
}
});
推荐阅读
- asp.net-mvc - 使用 DataContextClass 添加 View 和不添加 View 有什么区别?
- java - progressDialoge 未更新
- rest - 从 Keycloak 中的 REST API 中提取角色
- apache-camel - 如何检查 Camel 消息正文是否基于流?
- java - 如何通过 AnnotationProcessor 访问 TypeUse 注释
- javascript - 如何在 oncomplete 中检查两个以上的条件
- python - 错误:预期的序列或类似数组,得到
" - html - 内联网格相关的 CSS 在 Gmail 中消失
- powershell - 无法使用 .csv 文件的数据
- python - 对交集结果进行排序以保持最大长度仅在 python 中设置