diff --git a/src/core/types/element.ts b/src/core/types/element.ts index 8a848876..be9eec2d 100644 --- a/src/core/types/element.ts +++ b/src/core/types/element.ts @@ -56,6 +56,7 @@ export interface GrayTipElement { aioOpGrayTipElement: TipAioOpGrayTipElement; groupElement: TipGroupElement; xmlElement: { + busiId: string; content: string; templId: string; }; diff --git a/src/onebot/api/group.ts b/src/onebot/api/group.ts index fd58456d..870b0268 100644 --- a/src/onebot/api/group.ts +++ b/src/onebot/api/group.ts @@ -24,6 +24,7 @@ import { OB11GroupUploadNoticeEvent } from '../event/notice/OB11GroupUploadNotic import { OB11GroupNameEvent } from '../event/notice/OB11GroupNameEvent'; import { pathToFileURL } from 'node:url'; import { FileNapCatOneBotUUID } from '@/common/helper'; +import { OB11GroupIncreaseEvent } from '../event/notice/OB11GroupIncreaseEvent'; export class OneBotGroupApi { obContext: NapCatOneBot11Adapter; @@ -219,16 +220,51 @@ export class OneBotGroupApi { } else if (element.type === TipGroupElementType.KSHUTUP) { let event = await this.parseGroupBanEvent(msg.peerUid, elementWrapper); return event; + } else if (element.type === TipGroupElementType.KMEMBERADD) { + // 自己的通知 协议推送为type->85 在这里实现为了避免邀请出现问题 + if (element.memberUid == this.core.selfInfo.uid) { + this.core.apis.GroupApi.refreshGroupMemberCache(msg.peerUid).then().catch(); + return new OB11GroupIncreaseEvent( + this.core, + parseInt(msg.peerUid), + +this.core.selfInfo.uin, + element.adminUid ? +await this.core.apis.UserApi.getUinByUidV2(element.adminUid) : 0, + 'approve' + ); + } } } + + async parseSelfInviteEvent(msg: RawMessage, inviterUin: string, inviteeUin: string) { + return new OB11GroupIncreaseEvent( + this.core, + parseInt(msg.peerUid), + +inviteeUin, + +inviterUin, + 'invite' + ); + } async parseGrayTipElement(msg: RawMessage, grayTipElement: GrayTipElement) { if (grayTipElement.subElementType === NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_GROUP) { // 解析群组事件 由sysmsg解析 return await this.parseGroupElement(msg, grayTipElement.groupElement, grayTipElement); } else if (grayTipElement.subElementType === NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) { - // 筛选出表情回应 事件 - if (grayTipElement.xmlElement?.templId === '10382') { + // 筛选自身入群情况 + // if (grayTipElement.xmlElement.busiId === '10145') { + // const inviteData = new fastXmlParser.XMLParser({ + // ignoreAttributes: false, + // attributeNamePrefix: '', + // }).parse(grayTipElement.xmlElement.content); + + // const inviterUin: string = inviteData.gtip.qq[0].jp; + // const inviteeUin: string = inviteData.gtip.qq[1].jp; + // //刷新群缓存 + // if (inviteeUin === this.core.selfInfo.uin) { + // this.core.apis.GroupApi.refreshGroupMemberCache(msg.peerUid).then().catch(); + // return this.parseSelfInviteEvent(msg, inviterUin, inviteeUin); + // } + } else if (grayTipElement.xmlElement?.templId === '10382') { return await this.obContext.apis.GroupApi.parseGroupEmojiLikeEventByGrayTip(msg.peerUid, grayTipElement); } else { //return await this.obContext.apis.GroupApi.parseGroupIncreaseEvent(msg.peerUid, grayTipElement); diff --git a/src/onebot/api/msg.ts b/src/onebot/api/msg.ts index 5fe5c2ea..5cca3c86 100644 --- a/src/onebot/api/msg.ts +++ b/src/onebot/api/msg.ts @@ -1012,16 +1012,8 @@ export class OneBotMsgApi { async parseSysMessage(msg: number[]) { const SysMessage = new NapProtoMsg(PushMsgBody).decode(Uint8Array.from(msg)); - if (SysMessage.contentHead.type == 85 && SysMessage.body?.msgContent) { - const groupChange = new NapProtoMsg(GroupChange).decode(SysMessage.body.msgContent); - return new OB11GroupIncreaseEvent( - this.core, - groupChange.groupUin, - +this.core.selfInfo.uin, - groupChange.memberUid ? +await this.core.apis.UserApi.getUinByUidV2(groupChange.memberUid) : 0, - 'approve' - ); - } else if (SysMessage.contentHead.type == 33 && SysMessage.body?.msgContent) { + // 邀请需要解grayTipElement + if (SysMessage.contentHead.type == 33 && SysMessage.body?.msgContent) { const groupChange = new NapProtoMsg(GroupChange).decode(SysMessage.body.msgContent); this.core.apis.GroupApi.refreshGroupMemberCache(groupChange.groupUin.toString()).then().catch(); let operatorUid = await this.waitGroupNotify(