首页 > 解决方案 > 如何使reactionCollector 对remove 事件起作用?

问题描述

所以,我正在开发一个不和谐的机器人。在这里我开始一个reactionCollector. 当一个反应被收集时,它会做一些事情,当反应被移除时,它应该做其他事情。

await message.channel.send(embed)
  then(async function (message) {
    await message.react('⚔')

    const filter = (reaction, user) => {
      return reaction.emoji.name === '⚔' && user.id != 705462496646922311
    };
    collector = message.createReactionCollector(filter);

    collector.on('collect', async (reaction, user) => {
      // Do something.
    });

    collector.on('remove', (reaction, user) => {
      // Do something.
    });
  })
  .catch(function() {
    message.channel.send('Error while adding the reaction. Try again')
  });

remove 事件永远不会被调用。有谁知道为什么会这样?我在哪里做错了?

标签: javascriptbotsdiscord.js

解决方案


要使您的ReactionCollector触发disposeremove事件,您必须在您的ReactionCollectordisposeCollectorOptions中启用,就像这样:

collector = message.createReactionCollector(filter, { dispose: true });

此外,在操作 ID(雪花)时要小心,它们始终是字符串类型。在您的代码中,您尝试查看是否user.id不等于一个数字(顺便说一下,这个数字真的很大!)所以不要忘记用引号将 ID 括起来。

return reaction.emoji.name === '⚔' && user.id != "705462496646922311";

推荐阅读