簡體   English   中英

檢測 discord.js 上的反應

[英]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 一次作為消息啟動源自您的命令處理程序的命令,一次作為機器人發送的消息。 您需要重命名其中之一,否則可能會出現各種意外問題。

其次,你永遠不應該定義你的客戶兩次。 相反,您應該重用客戶端。 為此,您可以像導出messageargs一樣將它導出到命令處理程序,或者您可以通過<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM