refactor: groupMember

This commit is contained in:
手瓜一十雪
2024-10-16 20:09:01 +08:00
parent b15e1174d6
commit 3f20733e7e
2 changed files with 19 additions and 29 deletions

View File

@@ -143,7 +143,7 @@ export class NTQQGroupApi {
let members = this.groupMemberCache.get(groupCodeStr);
if (!members) {
try {
members = await this.getGroupMembersV2(groupCodeStr);
members = await this.getGroupMembers(groupCodeStr);
// 更新群成员列表
this.groupMemberCache.set(groupCodeStr, members);
} catch (e) {
@@ -164,7 +164,7 @@ export class NTQQGroupApi {
let member = getMember();
if (!member) {
members = await this.getGroupMembersV2(groupCodeStr);
members = await this.getGroupMembers(groupCodeStr);
member = getMember();
}
return member;
@@ -317,34 +317,23 @@ export class NTQQGroupApi {
}
async getGroupMembersV2(groupQQ: string, num = 3000): Promise<Map<string, GroupMember>> {
const groupService = this.context.session.getGroupService();
const sceneId = groupService.createMemberListScene(groupQQ, 'groupMemberList_MainWindow');
const listener = this.core.eventWrapper.registerListen(
'NodeIKernelGroupListener/onMemberListChange',
1,
5000,
(params) => params.sceneId === sceneId,
);
const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow');
try {
const [membersFromFunc, membersFromListener] = await Promise.allSettled([
groupService.getNextMemberList(sceneId, undefined, num),
listener,
]);
if (membersFromFunc.status === 'fulfilled' && membersFromListener.status === 'fulfilled') {
return new Map([
...membersFromFunc.value.result.infos,
...membersFromListener.value[0].infos,
]);
const [callback, listener] = await this.core.eventWrapper.callNormalEventV2(
'NodeIKernelGroupService/getNextMemberList',
'NodeIKernelGroupListener/onMemberListChange',
[sceneId, undefined, num],
(ret) => ret.errCode === 0,
(params) => params.sceneId === sceneId,
1,
2000
);
if(callback.result.infos.size === 0) {
return listener.infos;
}
if (membersFromFunc.status === 'fulfilled') {
return membersFromFunc.value.result.infos;
}
if (membersFromListener.status === 'fulfilled') {
return membersFromListener.value[0].infos;
}
throw new Error('获取群成员列表失败');
return callback.result.infos;
} finally {
groupService.destroyMemberListScene(sceneId);
this.context.session.getGroupService().destroyMemberListScene(sceneId);
}
}

View File

@@ -115,7 +115,8 @@ export interface NodeIKernelGroupService {
destroyMemberListScene(SceneId: string): void;
getNextMemberList(sceneId: string, a: undefined, num: number): Promise<{
errCode: number, errMsg: string,
errCode: number,
errMsg: string,
result: { ids: string[], infos: Map<string, GroupMember>, finish: boolean, hasRobot: boolean }
}>;