diff --git a/src/onebot/api/msg.ts b/src/onebot/api/msg.ts index a9b24cb6..7c2dbe7c 100644 --- a/src/onebot/api/msg.ts +++ b/src/onebot/api/msg.ts @@ -33,7 +33,6 @@ import { uri2local } from '@/common/file'; import { RequestUtil } from '@/common/request'; import fs from 'node:fs'; import fsPromise from 'node:fs/promises'; -import { OB11FriendAddNoticeEvent } from '@/onebot/event/notice/OB11FriendAddNoticeEvent'; import { SysMessage, SysMessageType } from '@/core/proto/ProfileLike'; type RawToOb11Converters = { @@ -632,18 +631,10 @@ export class OneBotMsgApi { return; } for (const element of msg.elements) { - if (element.grayTipElement) { - if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_JSON) { - if (element.grayTipElement.jsonGrayTipElement.busiId == 1061) { - const PokeEvent = await this.obContext.apis.FriendApi.parsePrivatePokeEvent(element.grayTipElement); - if (PokeEvent) return PokeEvent; - } - } - if (element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_XMLMSG) { - //好友添加成功事件 - if (element.grayTipElement.xmlElement.templId === '10229' && msg.peerUin !== '') { - return new OB11FriendAddNoticeEvent(this.core, parseInt(msg.peerUin) || Number(await this.core.apis.UserApi.getUinByUidV2(msg.peerUid))); - } + if (element.grayTipElement && element.grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_JSON) { + if (element.grayTipElement.jsonGrayTipElement.busiId == 1061) { + const PokeEvent = await this.obContext.apis.FriendApi.parsePrivatePokeEvent(element.grayTipElement); + if (PokeEvent) return PokeEvent; } } } diff --git a/src/onebot/index.ts b/src/onebot/index.ts index b21f0060..47b29e2d 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -40,6 +40,7 @@ import { OB11GroupAdminNoticeEvent } from '@/onebot/event/notice/OB11GroupAdminN import { GroupDecreaseSubType, OB11GroupDecreaseEvent } from '@/onebot/event/notice/OB11GroupDecreaseEvent'; import { OB11GroupRequestEvent } from '@/onebot/event/request/OB11GroupRequest'; import { OB11FriendRecallNoticeEvent } from '@/onebot/event/notice/OB11FriendRecallNoticeEvent'; +import { OB11FriendAddNoticeEvent } from '@/onebot/event/notice/OB11FriendAddNoticeEvent'; import { OB11GroupRecallNoticeEvent } from '@/onebot/event/notice/OB11GroupRecallNoticeEvent'; import { LRUCache } from '@/common/lru-cache'; import { NodeIKernelRecentContactListener } from '@/core/listeners/NodeIKernelRecentContactListener'; @@ -310,8 +311,16 @@ export class NapCatOneBot11Adapter { private initBuddyListener() { const buddyListener = new NodeIKernelBuddyListener(); + const buddyPendingReqs: string[] = []; buddyListener.onBuddyReqChange = async reqs => { + for (const buddyUid of buddyPendingReqs) { + if (this.context.session.getBuddyService().isBuddy(buddyUid)) { + buddyPendingReqs.splice(buddyPendingReqs.indexOf(buddyUid), 1); + await this.networkManager.emitEvent(new OB11FriendAddNoticeEvent(this.core, Number(await this.core.apis.UserApi.getUinByUidV2(buddyUid)))); + } + } + this.core.apis.FriendApi.clearBuddyReqUnreadCnt(); for (let i = 0; i < reqs.unreadNums; i++) { const req = reqs.buddyReqs[i]; @@ -320,6 +329,7 @@ export class NapCatOneBot11Adapter { } try { const requesterUin = await this.core.apis.UserApi.getUinByUidV2(req.friendUid); + buddyPendingReqs.push(req.friendUid); await this.networkManager.emitEvent(new OB11FriendRequestEvent( this.core, parseInt(requesterUin!),