From f311ab5f7b9bdfd3f35aa740aa6577b57ba1e03a Mon Sep 17 00:00:00 2001 From: "Wesley F. Young" Date: Wed, 28 Aug 2024 20:03:44 +0800 Subject: [PATCH] feat: emit buddy/request --- src/core/events.ts | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/core/events.ts b/src/core/events.ts index 1c33a0e9..b90e1e21 100644 --- a/src/core/events.ts +++ b/src/core/events.ts @@ -21,7 +21,8 @@ type NapCatInternalEvents = { 'message/send': (msg: RawMessage) => PromiseLike; - 'buddy/request': (request: FriendRequest) => PromiseLike; + 'buddy/request': (uid: string, words: string, + xRequest: FriendRequest) => PromiseLike; 'buddy/add': (uin: string, xMsg: RawMessage) => PromiseLike; @@ -87,6 +88,7 @@ export class NapCatEventChannel extends super(); this.initMsgListener(); + this.initBuddyListener(); } private initMsgListener() { @@ -133,4 +135,28 @@ export class NapCatEventChannel extends proxiedListenerOf(msgListener, this.core.context.logger) as any, ); } + + private initBuddyListener() { + const buddyListener = new NodeIKernelBuddyListener(); + + buddyListener.onBuddyReqChange = async reqs => { + await this.core.apis.FriendApi.clearBuddyReqUnreadCnt(); + for (let i = 0; i < reqs.unreadNums; i++) { + const req = reqs.buddyReqs[i]; + if (!!req.isInitiator || (req.isDecide && req.reqType !== BuddyReqType.KMEINITIATORWAITPEERCONFIRM)) { + continue; + } + try { + const reqUin = await this.core.apis.UserApi.getUinByUidV2(req.friendUid); + this.emit('buddy/request', reqUin, req.extWords, req); + } catch (e) { + this.core.context.logger.logDebug('获取加好友者 QQ 号失败', e); + } + } + }; + + this.core.context.session.getBuddyService().addKernelBuddyListener( + proxiedListenerOf(buddyListener, this.core.context.logger) as any, + ); + } }