feat: emit buddy/request

This commit is contained in:
Wesley F. Young 2024-08-28 20:03:44 +08:00
parent 3a1c428917
commit f311ab5f7b

View File

@ -21,7 +21,8 @@ type NapCatInternalEvents = {
'message/send': (msg: RawMessage) => PromiseLike<void>; 'message/send': (msg: RawMessage) => PromiseLike<void>;
'buddy/request': (request: FriendRequest) => PromiseLike<void>; 'buddy/request': (uid: string, words: string,
xRequest: FriendRequest) => PromiseLike<void>;
'buddy/add': (uin: string, 'buddy/add': (uin: string,
xMsg: RawMessage) => PromiseLike<void>; xMsg: RawMessage) => PromiseLike<void>;
@ -87,6 +88,7 @@ export class NapCatEventChannel extends
super(); super();
this.initMsgListener(); this.initMsgListener();
this.initBuddyListener();
} }
private initMsgListener() { private initMsgListener() {
@ -133,4 +135,28 @@ export class NapCatEventChannel extends
proxiedListenerOf(msgListener, this.core.context.logger) as any, 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,
);
}
} }