[英]Reaction event discord.js
我正在尝试用我的机器人制作右舷代码,其他一切都运行良好。 但我正试图让机器人忽略实际消息作者的反应。
这是我当前的代码:
client.on('messageReactionAdd', (reaction_orig, message, user) => {
if (message.author.id === reaction_orig.users.id) return
manageBoard(reaction_orig)
})
它返回以下错误:
if (message.author.id === reaction_orig.users.id) return;
^
TypeError: Cannot read property 'id' of undefined
问题是messageReactionAdd
有两个参数; 消息反应为第一个,应用表情符号的用户为第二个。 当您编写reaction_orig, message, user
时, reaction_orig
是反应(这是正确的),但message
是做出反应的用户,因为它是第二个参数。 user
变量将是undefined
的。
另一个问题是reaction_orig.users
返回一个没有id
属性的ReactionUserManager 。 幸运的是, user
已经传递给您的回调,因此您可以使用它的 ID。
此外, reaction_orig
有一个message
属性,即该反应所引用的原始消息,因此您可以从中获取其作者的 ID。
您可以将代码更改为此工作:
client.on('messageReactionAdd', (reaction_orig, user) => {
if (reaction_orig.message.author.id === user.id) {
// the reaction is coming from the same user who posted the message
return;
}
manageBoard(reaction_orig);
});
但是,上面的代码仅适用于缓存消息,即在机器人连接后发布的消息。 对旧消息做出反应不会触发messageReactionAdd
事件。 如果您还想收听对旧消息的反应,则需要在实例化客户端时为MESSAGE
、 CHANNEL
和REACTION
启用部分结构,如下所示:
const client = new Discord.Client({
partials: ['MESSAGE', 'CHANNEL', 'REACTION'],
});
您可以检查消息是否被缓存,例如检查其author
属性是否不是null
。 如果是null
,则可以获取消息。 现在,您拥有消息作者和做出反应的用户,因此您可以比较他们的 ID:
// make sure it's an async function
client.on('messageReactionAdd', async (reaction_orig, user) => {
// fetch the message if it's not cached
const message = !reaction_orig.message.author
? await reaction_orig.message.fetch()
: reaction_orig.message;
if (message.author.id === user.id) {
// the reaction is coming from the same user who posted the message
return;
}
// the reaction is coming from a different user
manageBoard(reaction_orig);
});
尝试这样做:
client.on('messageReactionAdd', (reaction, user) => {
if (!reaction.message.author.id === user.id){
//Do whatever you like with it
console.log(reaction.name)
}
});
注意:消息必须被缓存。 为此,您需要这样做
Client.channels.cache.get("ChannelID").messages.fetch("MessageID");
我猜你正在使用 discord.js v12
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.