mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
commit
8823895a03
@ -316,12 +316,13 @@ export class NTQQGroupApi {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
async tryGetGroupMembersV2(modeListener = false, groupQQ: string, num = 30, timeout = 500): Promise<{
|
async tryGetGroupMembersV2(modeListener = false, groupQQ: string, num = 30, timeout = 100): Promise<{
|
||||||
infos: Map<string, GroupMember>;
|
infos: Map<string, GroupMember>;
|
||||||
finish: boolean;
|
finish: boolean;
|
||||||
|
hasNext: boolean | undefined;
|
||||||
}>{
|
}>{
|
||||||
const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow_1');
|
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)
|
const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', 0, timeout, (params) => params.sceneId === sceneId)
|
||||||
.catch(() => {});
|
.catch(() => {});
|
||||||
const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num);
|
const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num);
|
||||||
if (result.errCode !== 0) {
|
if (result.errCode !== 0) {
|
||||||
@ -338,19 +339,19 @@ export class NTQQGroupApi {
|
|||||||
return {
|
return {
|
||||||
infos: resMode2?.infos || result.result.infos,
|
infos: resMode2?.infos || result.result.infos,
|
||||||
finish: result.result.finish,
|
finish: result.result.finish,
|
||||||
|
hasNext: resMode2?.hasNext,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async getGroupMembersV2(groupQQ: string, num = 3000): Promise<Map<string, GroupMember>> {
|
async getGroupMembersV2(groupQQ: string, num = 3000): Promise<Map<string, GroupMember>> {
|
||||||
let result = await this.tryGetGroupMembersV2(false, groupQQ);
|
let res = await this.tryGetGroupMembersV2(true, groupQQ);
|
||||||
if (result.finish === false || (result.infos.size === 0 && result.finish === true)) {
|
if (res.hasNext || !res.finish || res.infos.size === 0) {
|
||||||
result = await this.tryGetGroupMembersV2(false, groupQQ, num);
|
res = await this.tryGetGroupMembersV2(false, groupQQ, num);
|
||||||
if (result.finish === true && (result.infos.size === 30 || result.infos.size === 0)) {
|
|
||||||
const retListener = await this.tryGetGroupMembersV2(true, groupQQ, num);
|
|
||||||
result.infos = new Map([...retListener.infos,...result.infos]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result.infos;
|
if ((res.infos.size === 0 || res.infos.size === 30) && res.finish) {
|
||||||
|
res = await this.tryGetGroupMembersV2(true, groupQQ, num);
|
||||||
|
}
|
||||||
|
return res.infos;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getGroupMembers(groupQQ: string, num = 3000): Promise<Map<string, GroupMember>> {
|
async getGroupMembers(groupQQ: string, num = 3000): Promise<Map<string, GroupMember>> {
|
||||||
|
@ -21,7 +21,14 @@ export class GetGroupMemberList extends BaseAction<Payload, OB11GroupMember[]> {
|
|||||||
|
|
||||||
async _handle(payload: Payload) {
|
async _handle(payload: Payload) {
|
||||||
const groupIdStr = payload.group_id.toString();
|
const groupIdStr = payload.group_id.toString();
|
||||||
const groupMembers = await this.core.apis.GroupApi.getGroupMembersV2(groupIdStr);
|
const noCache = payload.no_cache ? this.stringToBoolean(payload.no_cache) : false;
|
||||||
|
const memberCache = this.core.apis.GroupApi.groupMemberCache;
|
||||||
|
let groupMembers;
|
||||||
|
if (noCache) {
|
||||||
|
groupMembers = await this.core.apis.GroupApi.getGroupMembersV2(groupIdStr);
|
||||||
|
} else {
|
||||||
|
groupMembers = memberCache.get(groupIdStr) ?? await this.core.apis.GroupApi.getGroupMembersV2(groupIdStr);
|
||||||
|
}
|
||||||
|
|
||||||
const memberPromises = Array.from(groupMembers.values()).map(item =>
|
const memberPromises = Array.from(groupMembers.values()).map(item =>
|
||||||
OB11Entities.groupMember(groupIdStr, item)
|
OB11Entities.groupMember(groupIdStr, item)
|
||||||
@ -30,4 +37,7 @@ export class GetGroupMemberList extends BaseAction<Payload, OB11GroupMember[]> {
|
|||||||
const MemberMap = new Map(_groupMembers.map(member => [member.user_id, member]));
|
const MemberMap = new Map(_groupMembers.map(member => [member.user_id, member]));
|
||||||
return Array.from(MemberMap.values());
|
return Array.from(MemberMap.values());
|
||||||
}
|
}
|
||||||
}
|
stringToBoolean(str: string | boolean): boolean {
|
||||||
|
return typeof str === 'boolean' ? str : str.toLowerCase() === "true";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user