首页 > 解决方案 > 使用表情符号回复时 Discord.js 执行功能

问题描述

目前,我正在使用 Discord.js 制作一个机器人。

client.on('message', (message) => {
 if (message.content === '$wa') {
  message.channel.send({ embed: exampleEmbed }).then((embedMessage) => {
   embedMessage.react('❤️');

   embedMessage
    .awaitReactions(
     (filter = (reaction, user) => {
      return reaction.emoji.name === '❤️' && user.id === message.author.id;
     }),
     { max: 2, time: 60000, errors: ['time'] }
    )
    .then((collected) => {
     const reaction = collected.first();

     if (reaction.emoji.name === '❤️') {
      message.channel.send(
       ':sparkling_heart: **Hanno** and **Roronoa Zoro** are now married! :sparkling_heart:'
      );
     }
    });
  });
 }
});

如果我键入$wa机器人会显示一些嵌入。但问题是它会自动为嵌入添加一颗心。我希望如果我也单击心脏(总共有 2 颗心脏),它会执行底部的 if 语句。

我尝试了多种方法,但都没有奏效。这也是我第一次与Discord.js

标签: javascriptdiscorddiscord.js

解决方案


您需要考虑机器人自身的反应。我建议将您的filter实现重做为这样的东西。关键要点是您必须添加!user.bot到过滤器中,以便忽略机器人自己的反应

const filter = (reaction, user) => {
   return reaction.emoji.name === "❤️" && user.id === message.author.id && !user.bot
}

embedMessage.awaitReactions(filter, { max: 1, time: 60000, errors: ['time'] })

推荐阅读