mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
refactor: groupMember
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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 }
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user