【问题标题】:Detect Reaction on discord.js检测 discord.js 上的反应
【发布时间】:2021-09-08 07:16:34
【问题描述】:

我正在制作一个不和谐的机器人,但我的 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)
        })

    }
}

【问题讨论】:

    标签: node.js discord.js


    【解决方案1】:

    这里有几件事。

    首先,您定义了两次message;一次作为启动命令处理程序的命令的消息,一次作为机器人发送的消息。您需要重命名其中之一,否则可能会出现各种意外问题。

    第二,你永远不应该定义你的客户两次。相反,您应该重用客户端。为此,您可以像导出 message 和 args 一样将其导出到命令处理程序,或者您可以通过 <message>.client 访问它并像在此处一样使用它。

    【讨论】:

      【解决方案2】:

      您不能在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);
            });
        },
      };
      

      【讨论】:

        猜你喜欢
        • 2020-11-08
        • 2021-04-15
        • 2021-06-09
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 1970-01-01
        • 2021-07-11
        相关资源
        最近更新 更多