[英]Detect Reaction on discord.js
我正在制作一个 discord 机器人,但我对 waifu 命令有疑问。 使用此命令,机器人会发送一个嵌入,我想检测某人何时对此嵌入做出反应。 我试过这段代码,但没有任何反应。
const Discord = require("discord.js");
const axios = require("axios")
const Client = new Discord.Client;
module.exports = {
name : 'waifu',
description : "waifu command",
execute(message, args) {
Client.on('messageReactionAdd', (reaction, user) => {
message.channel.send("Reacted")
})
axios.get("https://api.waifu.pics/sfw/waifu")
.then((res) => {
let wembed = new Discord.MessageEmbed()
.setTitle(`Voici votre waifu ${message.author.username}`)
.setImage(res.data.url)
message.channel.send(wembed)
.then(function (message) {
message.react("❤")
Client.on('messageReactionAdd', (reaction, user) => {
console.log("reacted")
})
})
})
.catch((err) => {
console.error("ERR: ", err)
})
}
}
这里有几件事。
首先,您定义了两次message
; 一次作为消息启动源自您的命令处理程序的命令,一次作为机器人发送的消息。 您需要重命名其中之一,否则可能会出现各种意外问题。
其次,你永远不应该定义你的客户两次。 相反,您应该重用客户端。 为此,您可以像导出message
和args
一样将它导出到命令处理程序,或者您可以通过<message>.client
访问它并像此处一样使用它。
您不能在message
侦听器中添加messageReactionAdd
侦听器。 但是,您可以使用createReactionCollector
设置反应收集器,例如下面的示例:
const { MessageEmbed } = require('discord.js');
const axios = require('axios')
module.exports = {
name: 'waifu',
description: 'waifu command',
execute(message, args) {
axios
.get('https://api.waifu.pics/sfw/waifu')
.then((res) => {
let wembed = new MessageEmbed()
.setTitle(`Voici votre waifu ${message.author.username}`)
.setImage(res.data.url);
// make sure you use a different var name here
// like msg instead of message
message.channel.send(wembed).then((msg) => {
msg.react('❤');
// set up a filter to only collect reactions with the ❤ emoji
let filter = (reaction, user) => reaction.emoji.name === '❤';
let collector = msg.createReactionCollector(filter);
collector.on('collect', (reaction, user) => {
// in case you want to do something when someone reacts with ❤
console.log('reaction added');
});
collector.on('remove', (reaction, user) => {
// in case you want to do something when someone removes their reaction
console.log('reaction removed');
});
});
})
.catch((err) => {
console.error('ERR: ', err);
});
},
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.