From ad4d6a107059048cf2c982631a8ae88a85cf5155 Mon Sep 17 00:00:00 2001 From: Alen Date: Wed, 23 Oct 2024 01:07:52 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=BE=A4=E6=88=90=E5=91=98?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/apis/group.ts | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index cd84ae86..abe83383 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -316,18 +316,46 @@ export class NTQQGroupApi { return undefined; } - async getGroupMembersV2(groupQQ: string, num = 3000): Promise> { - const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow'); - const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', 1, 2000, (params) => params.sceneId === sceneId) + async tryGetGroupMembersV2(modeListener = false, groupQQ: string, num = 30, timeout = 500): Promise { + const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow_1'); + const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', 1, timeout, (params) => params.sceneId === sceneId) .catch(); - const result = await this.context.session.getGroupService().getNextMemberList(sceneId!, undefined, num); + const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num); + let resMode2; if (result.errCode !== 0) { throw new Error('获取群成员列表出错,' + result.errMsg); } - if (result.result.infos.size === 0) { - return (await once)[0].infos; + if (modeListener) { + const ret = (await once); + resMode2 = ret[0]; } - return result.result.infos; + this.context.session.getGroupService().destroyMemberListScene(sceneId); + return modeListener ? resMode2 : result.result; + } + + async getGroupMembersV2(groupQQ: string): Promise> { + type Ret = { + infos: Map; + finish: boolean; + hasNext: boolean; + } + let result = await this.tryGetGroupMembersV2(false, groupQQ) as unknown as Ret; + const retOneSize = result.infos.size; + if (result.infos.size === 0 && result.finish === true) { + result = await this.tryGetGroupMembersV2(true, groupQQ); + if (result.hasNext === true) { + result = await this.tryGetGroupMembersV2(false, groupQQ, 3000); + } + return result.infos; + } + if (result.finish === false) { + result = await this.tryGetGroupMembersV2(false, groupQQ, 3000); + if (result.finish === true && result.infos.size === retOneSize) { + const retListener = await this.tryGetGroupMembersV2(true, groupQQ, 3000, 5000); + result.infos = new Map([...retListener.infos,...result.infos]); + } + } + return result.infos; } async getGroupMembers(groupQQ: string, num = 3000): Promise> {