diff --git a/src/core/apis/group.ts b/src/core/apis/group.ts index 074155e9..31efa701 100644 --- a/src/core/apis/group.ts +++ b/src/core/apis/group.ts @@ -139,14 +139,21 @@ export class NTQQGroupApi { async getGroupMemberAll(groupCode: string, forced = false) { return this.context.session.getGroupService().getAllMemberList(groupCode, forced); } - + async refreshGroupMemberCache(groupCode: string) { + try { + const members = await this.getGroupMemberAll(groupCode, true); + this.groupMemberCache.set(groupCode, members.result.infos); + } catch (e) { + this.context.logger.logError(`刷新群成员缓存失败, ${e}`); + } + } async getGroupMember(groupCode: string | number, memberUinOrUid: string | number) { const groupCodeStr = groupCode.toString(); const memberUinOrUidStr = memberUinOrUid.toString(); let members = this.groupMemberCache.get(groupCodeStr); if (!members) { try { - members = await this.getGroupMembers(groupCodeStr); + members = (await this.getGroupMemberAll(groupCodeStr)).result.infos; this.groupMemberCache.set(groupCodeStr, members); } catch (e) { return null; @@ -164,7 +171,7 @@ export class NTQQGroupApi { let member = getMember(); if (!member) { - members = await this.getGroupMembers(groupCodeStr); + members = members = (await this.getGroupMemberAll(groupCodeStr)).result.infos; member = getMember(); } return member; @@ -253,28 +260,28 @@ export class NTQQGroupApi { return notifies; } - async getGroupMemberV2(GroupCode: string, uid: string, forced = false) { - const Listener = this.core.eventWrapper.registerListen( - 'NodeIKernelGroupListener/onMemberInfoChange', - (params, _, members) => params === GroupCode && members.size > 0, - 1, - forced ? 5000 : 250, - ); - const retData = await ( - this.core.eventWrapper - .createEventFunction('NodeIKernelGroupService/getMemberInfo') - )!(GroupCode, [uid], forced); - if (retData.result !== 0) { - throw new Error(`${retData.errMsg}`); - } - const result = await Listener as unknown; - let member: GroupMember | undefined; - if (Array.isArray(result) && result?.[2] instanceof Map) { - const members = result[2] as Map; - member = members.get(uid); - } - return member; - } + // async getGroupMemberV2(GroupCode: string, uid: string, forced = false) { + // const Listener = this.core.eventWrapper.registerListen( + // 'NodeIKernelGroupListener/onMemberInfoChange', + // (params, _, members) => params === GroupCode && members.size > 0, + // 1, + // forced ? 5000 : 250, + // ); + // const retData = await ( + // this.core.eventWrapper + // .createEventFunction('NodeIKernelGroupService/getMemberInfo') + // )!(GroupCode, [uid], forced); + // if (retData.result !== 0) { + // throw new Error(`${retData.errMsg}`); + // } + // const result = await Listener as unknown; + // let member: GroupMember | undefined; + // if (Array.isArray(result) && result?.[2] instanceof Map) { + // const members = result[2] as Map; + // member = members.get(uid); + // } + // return member; + // } async searchGroup(groupCode: string) { const [, ret] = await this.core.eventWrapper.callNormalEventV2( @@ -316,88 +323,88 @@ export class NTQQGroupApi { return undefined; } - async tryGetGroupMembersV2(groupQQ: string, modeListener = false, num = 30, timeout = 100): Promise<{ - infos: Map; - finish: boolean; - hasNext: boolean | undefined; - }> { - const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow_1'); - const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', (params) => params.sceneId === sceneId, 0, timeout) - .catch(() => { }); - const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num); - if (result.errCode !== 0) { - throw new Error('获取群成员列表出错,' + result.errMsg); - } - let resMode2; - if (modeListener) { - const ret = (await once)?.[0]; - if (ret) { - resMode2 = ret; - } - } - this.context.session.getGroupService().destroyMemberListScene(sceneId); - return { - infos: new Map([...(resMode2?.infos ?? []), ...result.result.infos]), - finish: result.result.finish, - hasNext: resMode2?.hasNext, - }; - } + // async tryGetGroupMembersV2(groupQQ: string, modeListener = false, num = 30, timeout = 100): Promise<{ + // infos: Map; + // finish: boolean; + // hasNext: boolean | undefined; + // }> { + // const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow_1'); + // const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', (params) => params.sceneId === sceneId, 0, timeout) + // .catch(() => { }); + // const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num); + // if (result.errCode !== 0) { + // throw new Error('获取群成员列表出错,' + result.errMsg); + // } + // let resMode2; + // if (modeListener) { + // const ret = (await once)?.[0]; + // if (ret) { + // resMode2 = ret; + // } + // } + // this.context.session.getGroupService().destroyMemberListScene(sceneId); + // return { + // infos: new Map([...(resMode2?.infos ?? []), ...result.result.infos]), + // finish: result.result.finish, + // hasNext: resMode2?.hasNext, + // }; + // } - async GetGroupMembersV3(groupQQ: string, num = 3000, timeout = 2500): Promise<{ - infos: Map; - finish: boolean; - hasNext: boolean | undefined; - listenerMode: boolean; - }> { - const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow_1'); - const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', (params) => params.sceneId === sceneId, 0, timeout) - .catch(() => { }); - const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num); - if (result.errCode !== 0) { - throw new Error('获取群成员列表出错,' + result.errMsg); - } - let resMode2; - if (result.result.finish && result.result.infos.size === 0) { - const ret = (await once)?.[0]; - if (ret) { - resMode2 = ret; - } - } - this.context.session.getGroupService().destroyMemberListScene(sceneId); - return { - infos: new Map([...(resMode2?.infos ?? []), ...result.result.infos]), - finish: result.result.finish, - hasNext: resMode2?.hasNext, - listenerMode: resMode2?.hasNext !== undefined - }; - } + // async GetGroupMembersV3(groupQQ: string, num = 3000, timeout = 2500): Promise<{ + // infos: Map; + // finish: boolean; + // hasNext: boolean | undefined; + // listenerMode: boolean; + // }> { + // const sceneId = this.context.session.getGroupService().createMemberListScene(groupQQ, 'groupMemberList_MainWindow_1'); + // const once = this.core.eventWrapper.registerListen('NodeIKernelGroupListener/onMemberListChange', (params) => params.sceneId === sceneId, 0, timeout) + // .catch(() => { }); + // const result = await this.context.session.getGroupService().getNextMemberList(sceneId, undefined, num); + // if (result.errCode !== 0) { + // throw new Error('获取群成员列表出错,' + result.errMsg); + // } + // let resMode2; + // if (result.result.finish && result.result.infos.size === 0) { + // const ret = (await once)?.[0]; + // if (ret) { + // resMode2 = ret; + // } + // } + // this.context.session.getGroupService().destroyMemberListScene(sceneId); + // return { + // infos: new Map([...(resMode2?.infos ?? []), ...result.result.infos]), + // finish: result.result.finish, + // hasNext: resMode2?.hasNext, + // listenerMode: resMode2?.hasNext !== undefined + // }; + // } - async getGroupMembersV2(groupQQ: string, num = 3000, no_cache: boolean = false): Promise> { - if (no_cache) { - return (await this.getGroupMemberAll(groupQQ, true)).result.infos; - } - let res = await this.GetGroupMembersV3(groupQQ, num); - let ret = res.infos; - if (res.infos.size === 0 && !res.listenerMode) { - res = await this.GetGroupMembersV3(groupQQ, num); - ret = res.infos; - } - if (res.infos.size === 0) { - ret = (await this.getGroupMemberAll(groupQQ)).result.infos; - } - return ret; - } + // async getGroupMembersV2(groupQQ: string, num = 3000, no_cache: boolean = false): Promise> { + // if (no_cache) { + // return (await this.getGroupMemberAll(groupQQ, true)).result.infos; + // } + // let res = await this.GetGroupMembersV3(groupQQ, num); + // let ret = res.infos; + // if (res.infos.size === 0 && !res.listenerMode) { + // res = await this.GetGroupMembersV3(groupQQ, num); + // ret = res.infos; + // } + // if (res.infos.size === 0) { + // ret = (await this.getGroupMemberAll(groupQQ)).result.infos; + // } + // return ret; + // } - async getGroupMembers(groupQQ: string, num = 3000): Promise> { - const groupService = this.context.session.getGroupService(); - const sceneId = groupService.createMemberListScene(groupQQ, 'groupMemberList_MainWindow'); - const result = await groupService.getNextMemberList(sceneId, undefined, num); - if (result.errCode !== 0) { - throw new Error('获取群成员列表出错,' + result.errMsg); - } - this.context.logger.logDebug(`获取群(${groupQQ})成员列表结果:`, `members: ${result.result.infos.size}`); - return result.result.infos; - } + // async getGroupMembers(groupQQ: string, num = 3000): Promise> { + // const groupService = this.context.session.getGroupService(); + // const sceneId = groupService.createMemberListScene(groupQQ, 'groupMemberList_MainWindow'); + // const result = await groupService.getNextMemberList(sceneId, undefined, num); + // if (result.errCode !== 0) { + // throw new Error('获取群成员列表出错,' + result.errMsg); + // } + // this.context.logger.logDebug(`获取群(${groupQQ})成员列表结果:`, `members: ${result.result.infos.size}`); + // return result.result.infos; + // } async getGroupFileCount(group_ids: Array) { return this.context.session.getRichMediaService().batchGetGroupFileCount(group_ids); diff --git a/src/core/index.ts b/src/core/index.ts index 3b318054..3cdf6158 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -24,10 +24,10 @@ import path from 'node:path'; import fs from 'node:fs'; import { hostname, systemName, systemVersion } from '@/common/system'; import { NTEventWrapper } from '@/common/event'; -import { DataSource, GroupMember, KickedOffLineInfo, SelfInfo, SelfStatusInfo } from '@/core/types'; +import { GroupMember, KickedOffLineInfo, SelfInfo, SelfStatusInfo } from '@/core/types'; import { NapCatConfigLoader } from '@/core/helper/config'; import os from 'node:os'; -import { NodeIKernelGroupListener, NodeIKernelMsgListener, NodeIKernelProfileListener } from '@/core/listeners'; +import { NodeIKernelMsgListener, NodeIKernelProfileListener } from '@/core/listeners'; import { proxiedListenerOf } from '@/common/proxy-handler'; import { NTQQPacketApi } from './apis/packet'; export * from './wrapper'; @@ -163,7 +163,6 @@ export class NapCatCore { msgListener.onAddSendMsg = (msg) => { this.context.logger.logMessage(msg, this.selfInfo); }; - //await sleep(2500); this.context.session.getMsgService().addKernelMsgListener( proxiedListenerOf(msgListener, this.context.logger), ); @@ -185,92 +184,6 @@ export class NapCatCore { this.context.session.getProfileService().addKernelProfileListener( proxiedListenerOf(profileListener, this.context.logger), ); - - // 群相关 - const groupListener = new NodeIKernelGroupListener(); - groupListener.onGroupListUpdate = (updateType, groupList) => { - // console.log("onGroupListUpdate", updateType, groupList) - groupList.map(g => { - const existGroup = this.apis.GroupApi.groupCache.get(g.groupCode); - //群成员数量变化 应该刷新缓存 - if (existGroup && g.memberCount === existGroup.memberCount) { - Object.assign(existGroup, g); - } else { - this.apis.GroupApi.groupCache.set(g.groupCode, g); - // 获取群成员 - } - const sceneId = this.context.session.getGroupService().createMemberListScene(g.groupCode, 'groupMemberList_MainWindow'); - this.context.session.getGroupService().getNextMemberList(sceneId, undefined, 3000).then( /* r => { - // console.log(`get group ${g.groupCode} members`, r); - // r.result.infos.forEach(member => { - // }); - // groupMembers.set(g.groupCode, r.result.infos); - } */); - this.context.session.getGroupService().destroyMemberListScene(sceneId); - }); - }; - groupListener.onMemberListChange = (arg) => { - // TODO: 应该加一个内部自己维护的成员变动callback,用于判断成员变化通知 - const groupCode = arg.sceneId.split('_')[0]; - if (this.apis.GroupApi.groupMemberCache.has(groupCode)) { - const existMembers = this.apis.GroupApi.groupMemberCache.get(groupCode)!; - arg.infos.forEach((member, uid) => { - //console.log('onMemberListChange', member); - const existMember = existMembers.get(uid); - if (existMember) { - Object.assign(existMember, member); - } else { - existMembers.set(uid, member); - } - //移除成员 - if (member.isDelete) { - existMembers.delete(uid); - } - }); - } else { - this.apis.GroupApi.groupMemberCache.set(groupCode, arg.infos); - } - }; - groupListener.onMemberInfoChange = (groupCode, dataSource, members) => { - if (dataSource === DataSource.LOCAL && members.get(this.selfInfo.uid)?.isDelete) { - // 自身退群或者被踢退群 5s用于Api操作 之后不再出现 - setTimeout(() => { - this.apis.GroupApi.groupCache.delete(groupCode); - }, 5000); - - } - const existMembers = this.apis.GroupApi.groupMemberCache.get(groupCode); - if (existMembers) { - members.forEach((member, uid) => { - const existMember = existMembers.get(uid); - if (existMember) { - // 检查管理变动 - member.isChangeRole = this.checkAdminEvent(groupCode, member, existMember); - // 更新成员信息 - Object.assign(existMember, member); - } else { - existMembers.set(uid, member); - } - //移除成员 - if (member.isDelete) { - existMembers.delete(uid); - } - }); - } else { - this.apis.GroupApi.groupMemberCache.set(groupCode, members); - } - }; - this.context.session.getGroupService().addKernelGroupListener( - proxiedListenerOf(groupListener, this.context.logger), - ); - } - - checkAdminEvent(groupCode: string, memberNew: GroupMember, memberOld: GroupMember | undefined): boolean { - if (memberNew.role !== memberOld?.role) { - this.context.logger.logDebug(`群 ${groupCode} ${memberNew.nick} 角色变更为 ${memberNew.role === 3 ? '管理员' : '群员'}`); - return true; - } - return false; } } diff --git a/src/onebot/action/group/GetGroupMemberList.ts b/src/onebot/action/group/GetGroupMemberList.ts index 451ae6e1..0f26d325 100644 --- a/src/onebot/action/group/GetGroupMemberList.ts +++ b/src/onebot/action/group/GetGroupMemberList.ts @@ -19,11 +19,10 @@ export class GetGroupMemberList extends OneBotAction const groupIdStr = payload.group_id.toString(); const noCache = payload.no_cache ? this.stringToBoolean(payload.no_cache) : false; const memberCache = this.core.apis.GroupApi.groupMemberCache; - let groupMembers; - try { - groupMembers = await this.core.apis.GroupApi.getGroupMembersV2(groupIdStr, 3000, noCache); - } catch (error) { - groupMembers = memberCache.get(groupIdStr) ?? await this.core.apis.GroupApi.getGroupMembersV2(groupIdStr); + let groupMembers = memberCache.get(groupIdStr); + if (noCache || !groupMembers) { + groupMembers = (await this.core.apis.GroupApi.getGroupMemberAll(groupIdStr)).result.infos; + memberCache.set(groupIdStr, groupMembers); } const memberPromises = Array.from(groupMembers.values()).map(item => OB11Construct.groupMember(groupIdStr, item) diff --git a/src/onebot/api/group.ts b/src/onebot/api/group.ts index c760dfd9..0a57086d 100644 --- a/src/onebot/api/group.ts +++ b/src/onebot/api/group.ts @@ -7,15 +7,10 @@ import { MessageElement, NapCatCore, NTGrayTipElementSubTypeV2, - NTMsgType, RawMessage, - TipGroupElement, - TipGroupElementType, } from '@/core'; import { NapCatOneBot11Adapter } from '@/onebot'; import { OB11GroupBanEvent } from '@/onebot/event/notice/OB11GroupBanEvent'; -import { OB11GroupIncreaseEvent } from '@/onebot/event/notice/OB11GroupIncreaseEvent'; -import { OB11GroupDecreaseEvent } from '@/onebot/event/notice/OB11GroupDecreaseEvent'; import fastXmlParser from 'fast-xml-parser'; import { OB11GroupMsgEmojiLikeEvent } from '@/onebot/event/notice/OB11MsgEmojiLikeEvent'; import { MessageUnique } from '@/common/message-unique'; @@ -66,67 +61,6 @@ export class OneBotGroupApi { return undefined; } - // async parseGroupIncreaseEvent(GroupCode: string, grayTipElement: GrayTipElement) { - // this.core.context.logger.logDebug('收到新人被邀请进群消息', grayTipElement); - // const xmlElement = grayTipElement.xmlElement; - // if (xmlElement?.content) { - // const regex = /jp="(\d+)"/g; - - // const matches = []; - // let match = null; - - // while ((match = regex.exec(xmlElement.content)) !== null) { - // matches.push(match[1]); - // } - // if (matches.length === 2) { - // const [inviter, invitee] = matches; - // return new OB11GroupIncreaseEvent( - // this.core, - // parseInt(GroupCode), - // parseInt(invitee), - // parseInt(inviter), - // 'invite', - // ); - // } - // } - // return undefined; - // } - - // async parseGroupMemberIncreaseEvent(GroupCode: string, grayTipElement: GrayTipElement) { - // const groupElement = grayTipElement?.groupElement; - // if (!groupElement) return undefined; - // const member = await this.core.apis.UserApi.getUserDetailInfo(groupElement.memberUid); - // const memberUin = member?.uin; - // const adminMember = await this.core.apis.GroupApi.getGroupMember(GroupCode, groupElement.adminUid); - // if (memberUin) { - // const operatorUin = adminMember?.uin ?? memberUin; - // return new OB11GroupIncreaseEvent( - // this.core, - // parseInt(GroupCode), - // parseInt(memberUin), - // parseInt(operatorUin), - // ); - // } else { - // return undefined; - // } - // } - - // async parseGroupKickEvent(GroupCode: string, grayTipElement: GrayTipElement) { - // const groupElement = grayTipElement?.groupElement; - // if (!groupElement) return undefined; - // const adminUin = (await this.core.apis.GroupApi.getGroupMember(GroupCode, groupElement.adminUid))?.uin ?? (await this.core.apis.UserApi.getUidByUinV2(groupElement.adminUid)); - // if (adminUin) { - // return new OB11GroupDecreaseEvent( - // this.core, - // parseInt(GroupCode), - // parseInt(this.core.selfInfo.uin), - // parseInt(adminUin), - // 'kick_me', - // ); - // } - // return undefined; - // } - async parseGroupEmojiLikeEventByGrayTip( groupCode: string, grayTipElement: GrayTipElement @@ -187,31 +121,6 @@ export class OneBotGroupApi { return undefined; } - // async parseGroupElement(msg: RawMessage, groupElement: TipGroupElement, elementWrapper: GrayTipElement) { - // if (groupElement.type == TipGroupElementType.KMEMBERADD) { - // const MemberIncreaseEvent = await this.obContext.apis.GroupApi.parseGroupMemberIncreaseEvent(msg.peerUid, elementWrapper); - // if (MemberIncreaseEvent) return MemberIncreaseEvent; - // } else if (groupElement.type === TipGroupElementType.KSHUTUP) { - // const BanEvent = await this.obContext.apis.GroupApi.parseGroupBanEvent(msg.peerUid, elementWrapper); - // if (BanEvent) return BanEvent; - // } else if (groupElement.type == TipGroupElementType.KQUITTE) { - // this.core.apis.GroupApi.quitGroup(msg.peerUid).then(); - // try { - // const KickEvent = await this.obContext.apis.GroupApi.parseGroupKickEvent(msg.peerUid, elementWrapper); - // if (KickEvent) return KickEvent; - // } catch (e) { - // return new OB11GroupDecreaseEvent( - // this.core, - // parseInt(msg.peerUid), - // parseInt(this.core.selfInfo.uin), - // 0, - // 'leave', - // ); - // } - // } - // return undefined; - // } - async parsePaiYiPai(msg: RawMessage, jsonStr: string) { const json = JSON.parse(jsonStr); diff --git a/src/onebot/api/msg.ts b/src/onebot/api/msg.ts index bf8f790c..1ff5ae8d 100644 --- a/src/onebot/api/msg.ts +++ b/src/onebot/api/msg.ts @@ -969,7 +969,7 @@ export class OneBotMsgApi { const SysMessage = new NapProtoMsg(PushMsgBody).decode(Uint8Array.from(msg)); if (SysMessage.contentHead.type == 33 && SysMessage.body?.msgContent) { const groupChange = new NapProtoMsg(GroupChange).decode(SysMessage.body.msgContent); - console.log(JSON.stringify(groupChange)); + await this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString()); return new OB11GroupIncreaseEvent( this.core, groupChange.groupUin, @@ -979,6 +979,7 @@ export class OneBotMsgApi { ); } else if (SysMessage.contentHead.type == 34 && SysMessage.body?.msgContent) { const groupChange = new NapProtoMsg(GroupChange).decode(SysMessage.body.msgContent); + await this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString()); return new OB11GroupDecreaseEvent( this.core, groupChange.groupUin, diff --git a/src/onebot/index.ts b/src/onebot/index.ts index 9d858d74..1eed43da 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -413,104 +413,73 @@ export class NapCatOneBot11Adapter { this.core.apis.GroupApi.getGroup(notify.group.groupCode) ); } - } else - // if ( - // notify.type == GroupNotifyMsgType.MEMBER_LEAVE_NOTIFY_ADMIN || - // notify.type == GroupNotifyMsgType.KICK_MEMBER_NOTIFY_ADMIN - // ) { - // this.context.logger.logDebug('有成员退出通知', notify); - // const member1Uin = await this.core.apis.UserApi.getUinByUidV2(notify.user1.uid); - // let operatorId = member1Uin; - // let subType: GroupDecreaseSubType = 'leave'; - // if (notify.user2.uid) { - // // 是被踢的 - // const member2Uin = await this.core.apis.UserApi.getUinByUidV2(notify.user2.uid); - // if (member2Uin) { - // operatorId = member2Uin; - // } - // subType = 'kick'; - // } - // const groupDecreaseEvent = new OB11GroupDecreaseEvent( - // this.core, - // parseInt(notify.group.groupCode), - // parseInt(member1Uin), - // parseInt(operatorId), - // subType - // ); - // this.networkManager - // .emitEvent(groupDecreaseEvent) - // .catch((e) => - // this.context.logger.logError('处理群成员退出失败', e) - // ); - // // notify.status == 1 表示未处理 2表示处理完成 - // } else - if ( - [GroupNotifyMsgType.REQUEST_JOIN_NEED_ADMINI_STRATOR_PASS].includes(notify.type) && - notify.status == GroupNotifyMsgStatus.KUNHANDLE - ) { - this.context.logger.logDebug('有加群请求'); - try { - let requestUin = await this.core.apis.UserApi.getUinByUidV2(notify.user1.uid); - if (isNaN(parseInt(requestUin))) { - requestUin = (await this.core.apis.UserApi.getUserDetailInfo(notify.user1.uid)).uin; - } - const groupRequestEvent = new OB11GroupRequestEvent( - this.core, - parseInt(notify.group.groupCode), - parseInt(requestUin), - 'add', - notify.postscript, - flag - ); - this.networkManager - .emitEvent(groupRequestEvent) - .catch((e) => - this.context.logger.logError('处理加群请求失败', e) - ); - } catch (e) { - this.context.logger.logError( - '获取加群人QQ号失败 Uid:', - notify.user1.uid, - e - ); + } else if ( + [GroupNotifyMsgType.REQUEST_JOIN_NEED_ADMINI_STRATOR_PASS].includes(notify.type) && + notify.status == GroupNotifyMsgStatus.KUNHANDLE + ) { + this.context.logger.logDebug('有加群请求'); + try { + let requestUin = await this.core.apis.UserApi.getUinByUidV2(notify.user1.uid); + if (isNaN(parseInt(requestUin))) { + requestUin = (await this.core.apis.UserApi.getUserDetailInfo(notify.user1.uid)).uin; } - } else if ( - notify.type == GroupNotifyMsgType.INVITED_BY_MEMBER && - notify.status == GroupNotifyMsgStatus.KUNHANDLE - ) { - this.context.logger.logDebug(`收到邀请我加群通知:${notify}`); - const groupInviteEvent = new OB11GroupRequestEvent( + const groupRequestEvent = new OB11GroupRequestEvent( this.core, parseInt(notify.group.groupCode), - parseInt(await this.core.apis.UserApi.getUinByUidV2(notify.user2.uid)), - 'invite', - notify.postscript, - flag - ); - this.networkManager - .emitEvent(groupInviteEvent) - .catch((e) => - this.context.logger.logError('处理邀请本人加群失败', e) - ); - } else if ( - notify.type == GroupNotifyMsgType.INVITED_NEED_ADMINI_STRATOR_PASS && - notify.status == GroupNotifyMsgStatus.KUNHANDLE - ) { - this.context.logger.logDebug(`收到群员邀请加群通知:${notify}`); - const groupInviteEvent = new OB11GroupRequestEvent( - this.core, - parseInt(notify.group.groupCode), - parseInt(await this.core.apis.UserApi.getUinByUidV2(notify.user1.uid)), + parseInt(requestUin), 'add', notify.postscript, flag ); this.networkManager - .emitEvent(groupInviteEvent) + .emitEvent(groupRequestEvent) .catch((e) => - this.context.logger.logError('处理邀请本人加群失败', e) + this.context.logger.logError('处理加群请求失败', e) ); + } catch (e) { + this.context.logger.logError( + '获取加群人QQ号失败 Uid:', + notify.user1.uid, + e + ); } + } else if ( + notify.type == GroupNotifyMsgType.INVITED_BY_MEMBER && + notify.status == GroupNotifyMsgStatus.KUNHANDLE + ) { + this.context.logger.logDebug(`收到邀请我加群通知:${notify}`); + const groupInviteEvent = new OB11GroupRequestEvent( + this.core, + parseInt(notify.group.groupCode), + parseInt(await this.core.apis.UserApi.getUinByUidV2(notify.user2.uid)), + 'invite', + notify.postscript, + flag + ); + this.networkManager + .emitEvent(groupInviteEvent) + .catch((e) => + this.context.logger.logError('处理邀请本人加群失败', e) + ); + } else if ( + notify.type == GroupNotifyMsgType.INVITED_NEED_ADMINI_STRATOR_PASS && + notify.status == GroupNotifyMsgStatus.KUNHANDLE + ) { + this.context.logger.logDebug(`收到群员邀请加群通知:${notify}`); + const groupInviteEvent = new OB11GroupRequestEvent( + this.core, + parseInt(notify.group.groupCode), + parseInt(await this.core.apis.UserApi.getUinByUidV2(notify.user1.uid)), + 'add', + notify.postscript, + flag + ); + this.networkManager + .emitEvent(groupInviteEvent) + .catch((e) => + this.context.logger.logError('处理邀请本人加群失败', e) + ); + } } } };