takayama-lily / oicq

Tencent QQ Bot Library for Node.js
https://oicqjs.github.io/oicq/
Mozilla Public License 2.0
2.68k stars 399 forks source link

如何管理client.on的监听事件 #519

Closed Vi-brance closed 1 year ago

Vi-brance commented 1 year ago

我设置了多个client.on监听事件的回调函数(比如我对system.online设置了多个监听器),如果某一个监听器不需要监听这个事件了,该怎么移除它? 我查看了API文档,有一个client.off方法,但是这个方法会一次移除掉整个监听事件,这不是我想要的结果。

lc-cn commented 1 year ago
const listener=()=>{}
// 监听
client.on('system.online',listener)
// 在你不需要时取消监听
client.off('system.online',listener)
Vi-brance commented 1 year ago

我在翻看文档的时候没发现off方法能够获取两个参数,按你的写法我在文档中实现了一下: image 似乎只有on方法能接受两个参数 image 而off只能接受一个参数 image 这里显示参数数量错误 image

我记得offon方法都有一个重载的方法,但那个重载方法要求第一个参数不属于EventMap,因此这对属于EventMap的事件似乎是无效的。

xueelf commented 1 year ago

oicq 的事件是基于 events 实现的,Client 类继承了 EventEmitter ,有疑问可以 查看 node api,此 issue 与协议库本身无关

Vi-brance commented 1 year ago

不好意思,我发现了问题所在,我使用的是oicq的分支icqq协议,我阅读了icqq的commit history,发现作者 @lc-cn 在 这次提交 中将EventEmitter类更换为了TripTrap,这才使得我无法调用相关的API