mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
commit
e71f7849a7
@ -23,17 +23,15 @@ export class NTQQGroupApi {
|
|||||||
constructor(context: InstanceContext, core: NapCatCore) {
|
constructor(context: InstanceContext, core: NapCatCore) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.core = core;
|
this.core = core;
|
||||||
sleep(1000).then(() => {
|
|
||||||
this.initCache().then().catch(context.logger.logError);
|
this.initCache().then().catch(context.logger.logError);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async initCache() {
|
async initCache() {
|
||||||
this.groups = await this.getGroups();
|
this.groups = await this.getGroups();
|
||||||
for (const group of this.groups) {
|
for (const group of this.groups) {
|
||||||
this.groupCache.set(group.groupCode, group);
|
this.groupCache.set(group.groupCode, group);
|
||||||
const data = await this.getGroupMembers(group.groupCode, 3000);
|
//const data = await this.getGroupMembers(group.groupCode, 3000);
|
||||||
this.groupMemberCache.set(group.groupCode, data);
|
//this.groupMemberCache.set(group.groupCode, data);
|
||||||
}
|
}
|
||||||
this.context.logger.logDebug(`加载${this.groups.length}个群组缓存完成`);
|
this.context.logger.logDebug(`加载${this.groups.length}个群组缓存完成`);
|
||||||
}
|
}
|
||||||
@ -175,7 +173,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.getGroupMembers(groupCodeStr);
|
members = await this.getGroupMembersV2(groupCodeStr);
|
||||||
// 更新群成员列表
|
// 更新群成员列表
|
||||||
this.groupMemberCache.set(groupCodeStr, members);
|
this.groupMemberCache.set(groupCodeStr, members);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -196,7 +194,7 @@ export class NTQQGroupApi {
|
|||||||
|
|
||||||
let member = getMember();
|
let member = getMember();
|
||||||
if (!member) {
|
if (!member) {
|
||||||
members = await this.getGroupMembers(groupCodeStr);
|
members = await this.getGroupMembersV2(groupCodeStr);
|
||||||
member = getMember();
|
member = getMember();
|
||||||
}
|
}
|
||||||
return member;
|
return member;
|
||||||
@ -307,7 +305,6 @@ export class NTQQGroupApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getGroupMemberV2(GroupCode: string, uid: string, forced = false) {
|
async getGroupMemberV2(GroupCode: string, uid: string, forced = false) {
|
||||||
type EventType = NodeIKernelGroupService['getMemberInfo'];
|
|
||||||
const Listener = this.core.eventWrapper.registerListen(
|
const Listener = this.core.eventWrapper.registerListen(
|
||||||
'NodeIKernelGroupListener/onMemberInfoChange',
|
'NodeIKernelGroupListener/onMemberInfoChange',
|
||||||
1,
|
1,
|
||||||
@ -330,6 +327,38 @@ export class NTQQGroupApi {
|
|||||||
return member;
|
return member;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
500,
|
||||||
|
(params) => params.sceneId === sceneId,
|
||||||
|
);
|
||||||
|
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
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
if (membersFromFunc.status === 'fulfilled') {
|
||||||
|
return membersFromFunc.value.result.infos;
|
||||||
|
}
|
||||||
|
if (membersFromListener.status === 'fulfilled') {
|
||||||
|
return membersFromListener.value[0].infos;
|
||||||
|
}
|
||||||
|
throw new Error('获取群成员列表失败');
|
||||||
|
} finally {
|
||||||
|
groupService.destroyMemberListScene(sceneId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async getGroupMembers(groupQQ: string, num = 3000): Promise<Map<string, GroupMember>> {
|
async getGroupMembers(groupQQ: string, num = 3000): Promise<Map<string, GroupMember>> {
|
||||||
const groupService = this.context.session.getGroupService();
|
const groupService = this.context.session.getGroupService();
|
||||||
const sceneId = groupService.createMemberListScene(groupQQ, 'groupMemberList_MainWindow');
|
const sceneId = groupService.createMemberListScene(groupQQ, 'groupMemberList_MainWindow');
|
||||||
|
@ -130,12 +130,13 @@ export class NapCatCore {
|
|||||||
// 获取群成员
|
// 获取群成员
|
||||||
}
|
}
|
||||||
const sceneId = this.context.session.getGroupService().createMemberListScene(g.groupCode, 'groupMemberList_MainWindow');
|
const sceneId = this.context.session.getGroupService().createMemberListScene(g.groupCode, 'groupMemberList_MainWindow');
|
||||||
this.context.session.getGroupService().getNextMemberList(sceneId!, undefined, 3000).then( /* r => {
|
this.context.session.getGroupService().getNextMemberList(sceneId, undefined, 3000).then( /* r => {
|
||||||
// console.log(`get group ${g.groupCode} members`, r);
|
// console.log(`get group ${g.groupCode} members`, r);
|
||||||
// r.result.infos.forEach(member => {
|
// r.result.infos.forEach(member => {
|
||||||
// });
|
// });
|
||||||
// groupMembers.set(g.groupCode, r.result.infos);
|
// groupMembers.set(g.groupCode, r.result.infos);
|
||||||
} */);
|
} */);
|
||||||
|
this.context.session.getGroupService().destroyMemberListScene(sceneId);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
groupListener.onMemberListChange = (arg) => {
|
groupListener.onMemberListChange = (arg) => {
|
||||||
@ -159,10 +160,10 @@ export class NapCatCore {
|
|||||||
} else {
|
} else {
|
||||||
this.apis.GroupApi.groupMemberCache.set(groupCode, arg.infos);
|
this.apis.GroupApi.groupMemberCache.set(groupCode, arg.infos);
|
||||||
}
|
}
|
||||||
// console.log('onMemberListChange', groupCode, arg);
|
//console.log('onMemberListChange', groupCode, arg.infos.size);
|
||||||
};
|
};
|
||||||
groupListener.onMemberInfoChange = (groupCode, dataSource, members) => {
|
groupListener.onMemberInfoChange = (groupCode, dataSource, members) => {
|
||||||
//console.log('onMemberInfoChange', groupCode, changeType, members);
|
//console.log('onMemberInfoChange', groupCode, dataSource, members.size);
|
||||||
if (dataSource === DataSource.LOCAL && members.get(this.selfInfo.uid)?.isDelete) {
|
if (dataSource === DataSource.LOCAL && members.get(this.selfInfo.uid)?.isDelete) {
|
||||||
// 自身退群或者被踢退群 5s用于Api操作 之后不再出现
|
// 自身退群或者被踢退群 5s用于Api操作 之后不再出现
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -81,4 +81,7 @@ export class NodeIKernelGroupListener {
|
|||||||
|
|
||||||
onShutUpMemberListChanged(...args: unknown[]) {
|
onShutUpMemberListChanged(...args: unknown[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onGroupListInited(...args: unknown[]) {
|
||||||
|
}
|
||||||
}
|
}
|
@ -22,7 +22,7 @@ class GetGroupMemberList extends BaseAction<Payload, OB11GroupMember[]> {
|
|||||||
async _handle(payload: Payload) {
|
async _handle(payload: Payload) {
|
||||||
const NTQQGroupApi = this.core.apis.GroupApi;
|
const NTQQGroupApi = this.core.apis.GroupApi;
|
||||||
const NTQQWebApi = this.core.apis.WebApi;
|
const NTQQWebApi = this.core.apis.WebApi;
|
||||||
const groupMembers = await NTQQGroupApi.getGroupMembers(payload.group_id.toString());
|
const groupMembers = await NTQQGroupApi.getGroupMembersV2(payload.group_id.toString());
|
||||||
const groupMembersArr = Array.from(groupMembers.values());
|
const groupMembersArr = Array.from(groupMembers.values());
|
||||||
|
|
||||||
let _groupMembers = groupMembersArr.map(item => {
|
let _groupMembers = groupMembersArr.map(item => {
|
||||||
|
@ -78,7 +78,7 @@ export class OneBotGroupApi {
|
|||||||
const NTQQGroupApi = this.core.apis.GroupApi;
|
const NTQQGroupApi = this.core.apis.GroupApi;
|
||||||
const groupElement = grayTipElement?.groupElement;
|
const groupElement = grayTipElement?.groupElement;
|
||||||
if (!groupElement) return undefined;
|
if (!groupElement) return undefined;
|
||||||
const member = await NTQQGroupApi.getGroupMemberV2(GroupCode, groupElement.memberUid);
|
const member = await NTQQGroupApi.getGroupMember(GroupCode, groupElement.memberUid);
|
||||||
const memberUin = member?.uin;
|
const memberUin = member?.uin;
|
||||||
const adminMember = await NTQQGroupApi.getGroupMember(GroupCode, groupElement.adminUid);
|
const adminMember = await NTQQGroupApi.getGroupMember(GroupCode, groupElement.adminUid);
|
||||||
if (memberUin) {
|
if (memberUin) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user