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

View File

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