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 监听器不工作