在这种情况下,removeListener的适当用途是什么?

时间:2016-08-22 03:59:42

标签: node.js

Discord的Bot库,

bot.on('messageCreate', msg => {
    // do some stuff
    bot.removeListener('messageCreate', msg);
});

我经常遇到的错误是listener must be a function。 收到消息时会触发messageCreate,msg是对消息类的引用,其中包含消息id,author等。

我想要得到的是机器人等待用户的特定回复,例如是或否。

2 个答案:

答案 0 :(得分:4)

如果bot是节点EventEmitter,则可以使用once方法而不是on,以便在调用侦听器后自动删除侦听器一次。

bot.once('messageCreate', msg => {
  // do some stuff
  // you don't need to remove the listener by yourself!
});

要直截了当地回答你的问题,removeListener的第二个参数必须是你传递给on的监听器函数。

var listener = msg => {
  // do some stuff
  bot.removeListener('messageCreate', listener);
};
bot.on('messageCreate', listener);

答案 1 :(得分:0)

在 discord V12 中,如果您使用其他类型的命令处理程序,例如 ready

,您可以在 commando 事件中像这样删除监听器
bot.once("ready", () => {
   bot.removeListener("message", client._events.message[0]);
}