messageReactionAdd 事件不再赘述,无需解释

Posted

技术标签:

【中文标题】messageReactionAdd 事件不再赘述,无需解释【英文标题】:messageReactionAdd event doesn't word anymore without explanation 【发布时间】:2020-12-16 20:56:59 【问题描述】:

我正在开发一个不和谐机器人,当用户对机器人创建的嵌入消息做出反应时,它会添加角色“投票者”。 直到今天它都很好用,但我不知道为什么不再说话了。

机器人创建嵌入消息并添加反应,但当用户反应时没有任何反应!

discord.js v12 API 中是否有任何我不知道的变化?

这是我的代码(它是触发嵌入消息的 !vote 命令的文件):

const Discord = require('../node_modules/discord.js');
const bot = new Discord.Client();
const rappelVote = require('./rappelVote');
const  roleVoteur, image, thumbnail   = require('..//config.js');

module.exports = function embedVote (channel)          //Affichage pour les votes
    const voteEmbed = new Discord.MessageEmbed()    //Construction du Embed
        .setColor("13ff00")
        .setTitle("Votez pour Fever sur TopServeur !")
        .setURL("https://top-serveurs.net/gta/feverrp")
        .setDescription("Pour recevoir des rappels de vote et soutenir le serveur, réagissez avec ????")
        .setImage(image)
        .setThumbnail(thumbnail)
        .setFooter("Pour ne plus recevoir les rappels : ????")
     channel.send("@everyone")
     channel.send(voteEmbed)
     
    .then(message =>  // envoi une réaction grâce a la promise
        message.react('????')
        message.react('????')

        bot.on('messageReactionAdd', (reaction, user) =>  // on vérifie que ce soit bien la bonne réaction et on ne compte pas celui du bot
            const member = message.guild.members.cache.get(user.id);
            const voteur = message.guild.roles.cache.get(roleVoteur);
            if (reaction.emoji.name === '????' && user.id !== bot.user.id)   
                member.roles.add(voteur);
            
            if (reaction.emoji.name === '????' && user.id !== bot.user.id)   
                member.roles.remove(voteur);
            
        );
    );
    channel.send("<@&" + roleVoteur + ">");
    channel.send(rappelVote());

我怎样才能让它再次工作?

【问题讨论】:

【参考方案1】:

问题可能是您正在创建一个 Discord.Client(),而不是需要当前的。您应该编辑您的函数参数以包含 bot 对象:

function embedVote (channel, bot) 

这样您将使用正确的客户端实例。正确调用该函数的示例:

// if function is being triggered via command

embedVote(message.channel, message.client);

// or something like:

embedVote(bot.channels.cache.get('Channel ID'), bot);

【讨论】:

另一个问题,当用户做出反应时,我怎么能做到这一点,只有这个反应被抑制了?当我这样做时:reaction.remove(user) 它也会删除机器人的反应...... 改用reaction.message.reactions.cache.first().users.remove(user.id)。我不确定它为什么有效,但它有效。

以上是关于messageReactionAdd 事件不再赘述,无需解释的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js V(12) messageReactionAdd 监听器不工作

MySQL错误代码1452:外键什么的错误(好长不再赘述英文了哈哈哈)

JQuery中的事件与动画

从八道面试题看JavaScript DOM事件机制

移动端APP列表点透事件处理方法

使用图片touch事件模拟按钮点击效果&&图片预加载