From 5c877e894bb81dabd42ceab40c5ae73900b295c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sat, 10 Aug 2024 22:35:29 +0800 Subject: [PATCH] chore: GroupCache --- src/core/apis/friend.ts | 15 +++++---- src/core/apis/group.ts | 69 +++++++++++++++++++++++------------------ 2 files changed, 48 insertions(+), 36 deletions(-) diff --git a/src/core/apis/friend.ts b/src/core/apis/friend.ts index 1b32b7ae..b4c7b797 100644 --- a/src/core/apis/friend.ts +++ b/src/core/apis/friend.ts @@ -10,6 +10,9 @@ export class NTQQFriendApi { constructor(context: InstanceContext, core: NapCatCore) { this.context = context; this.core = core; + // if (!this.context.basicInfoWrapper.requireMinNTQQBuild('26702')) { + // this.getFriends(true); + // } } async getBuddyV2(refresh = false): Promise { @@ -80,12 +83,12 @@ export class NTQQFriendApi { async getFriends(forced = false): Promise { const [_retData, _BuddyArg] = await this.core.eventWrapper.CallNormalEvent<(force: boolean) => Promise, (arg: OnBuddyChangeParams) => void> ( - 'NodeIKernelBuddyService/getBuddyList', - 'NodeIKernelBuddyListener/onBuddyListChange', - 1, - 5000, - () => true, - forced, + 'NodeIKernelBuddyService/getBuddyList', + 'NodeIKernelBuddyListener/onBuddyListChange', + 1, + 5000, + () => true, + forced, ); const friends: User[] = []; for (const categoryItem of _BuddyArg) { diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index 532f7de1..ff2218e7 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -16,26 +16,35 @@ export class NTQQGroupApi { core: NapCatCore; groupCache: Map = new Map(); groupMemberCache: Map> = new Map>(); - + groups: Group[] = []; constructor(context: InstanceContext, core: NapCatCore) { this.context = context; this.core = core; + this.initCache().then().catch(context.logger.logError); + } + async initCache() { + this.groups = await this.getGroups(); + for (const group of this.groups) { + this.groupCache.set(group.groupCode, group); + let data = await this.getGroupMembers(group.groupCode, 3000); + this.groupMemberCache.set(group.groupCode, data); + } + this.context.logger.logDebug(`加载${this.groups.length}个群组缓存完成`); } - async setGroupAvatar(gc: string, filePath: string) { return this.context.session.getGroupService().setHeader(gc, filePath); } async getGroups(forced = false) { type ListenerType = NodeIKernelGroupListener['onGroupListUpdate']; - const [_retData, _updateType, groupList] = await this.core.eventWrapper.CallNormalEvent <(force: boolean) => Promise, ListenerType> + const [_retData, _updateType, groupList] = await this.core.eventWrapper.CallNormalEvent<(force: boolean) => Promise, ListenerType> ( - 'NodeIKernelGroupService/getGroupList', - 'NodeIKernelGroupListener/onGroupListUpdate', - 1, - 5000, - () => true, - forced, + 'NodeIKernelGroupService/getGroupList', + 'NodeIKernelGroupListener/onGroupListUpdate', + 1, + 5000, + () => true, + forced, ); return groupList; } @@ -226,16 +235,16 @@ export class NTQQGroupApi { } async getSingleScreenNotifies(num: number) { - const [_retData, _doubt, _seq, notifies] = await this.core.eventWrapper.CallNormalEvent <(arg1: boolean, arg2: string, arg3: number) => Promise, (doubt: boolean, seq: string, notifies: GroupNotify[]) => void> + const [_retData, _doubt, _seq, notifies] = await this.core.eventWrapper.CallNormalEvent<(arg1: boolean, arg2: string, arg3: number) => Promise, (doubt: boolean, seq: string, notifies: GroupNotify[]) => void> ( - 'NodeIKernelGroupService/getSingleScreenNotifies', - 'NodeIKernelGroupListener/onGroupSingleScreenNotifies', - 1, - 5000, - () => true, - false, - '', - num, + 'NodeIKernelGroupService/getSingleScreenNotifies', + 'NodeIKernelGroupListener/onGroupSingleScreenNotifies', + 1, + 5000, + () => true, + false, + '', + num, ); return notifies; } @@ -245,17 +254,17 @@ export class NTQQGroupApi { type EventType = NodeIKernelGroupService['getMemberInfo']; // NTEventDispatch.CreatListenerFunction('NodeIKernelGroupListener/onGroupMemberInfoUpdate', //return napCatCore.session.getGroupService().getMemberInfo(GroupCode, [uid], forced); - const [,,, _members] = await this.core.eventWrapper.CallNormalEvent - ( - 'NodeIKernelGroupService/getMemberInfo', - 'NodeIKernelGroupListener/onMemberInfoChange', - 1, - 5000, - (groupCode: string, changeType: number, members: Map) => { - return groupCode == GroupCode && members.has(uid); - }, - GroupCode, [uid], forced, - ); + const [, , , _members] = await this.core.eventWrapper.CallNormalEvent + ( + 'NodeIKernelGroupService/getMemberInfo', + 'NodeIKernelGroupListener/onMemberInfoChange', + 1, + 5000, + (groupCode: string, changeType: number, members: Map) => { + return groupCode == GroupCode && members.has(uid); + }, + GroupCode, [uid], forced, + ); return _members.get(uid); } @@ -298,7 +307,7 @@ export class NTQQGroupApi { 'NodeIKernelGroupService/getGroupRecommendContactArkJson', 5000, GroupCode, - ); + ); return ret.arkJson; }