From 62127b6d48dd53e58a3a1a592c3cb1bd16fe33a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Mon, 25 Nov 2024 22:36:07 +0800 Subject: [PATCH] refactor: onMsgRecall --- src/core/listeners/NodeIKernelMsgListener.ts | 2 +- src/core/types/element.ts | 17 +++++++++-------- src/onebot/api/msg.ts | 4 ++-- src/onebot/api/user.ts | 4 ++-- src/onebot/index.ts | 14 ++++++++++---- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/core/listeners/NodeIKernelMsgListener.ts b/src/core/listeners/NodeIKernelMsgListener.ts index bdfcd0a5..379f0289 100644 --- a/src/core/listeners/NodeIKernelMsgListener.ts +++ b/src/core/listeners/NodeIKernelMsgListener.ts @@ -255,7 +255,7 @@ export class NodeIKernelMsgListener { } - onMsgRecall(i2: unknown, str: unknown, j2: unknown): any { + onMsgRecall(chatType: ChatType, uid: string, msgSeq: string): any { } diff --git a/src/core/types/element.ts b/src/core/types/element.ts index 6211650b..579603ba 100644 --- a/src/core/types/element.ts +++ b/src/core/types/element.ts @@ -40,17 +40,18 @@ export interface FaceElement { surpriseId?: string; randomType?: number; } +export interface GrayTipRovokeElement { + operatorRole: string; + operatorUid: string; + operatorNick: string; + operatorRemark: string; + operatorMemRemark?: string; + wording: string; // 自定义的撤回提示语 +} export interface GrayTipElement { subElementType: NTGrayTipElementSubTypeV2; - revokeElement: { - operatorRole: string; - operatorUid: string; - operatorNick: string; - operatorRemark: string; - operatorMemRemark?: string; - wording: string; // 自定义的撤回提示语 - }; + revokeElement: GrayTipRovokeElement; aioOpGrayTipElement: TipAioOpGrayTipElement; groupElement: TipGroupElement; xmlElement: { diff --git a/src/onebot/api/msg.ts b/src/onebot/api/msg.ts index 480ec96a..c987d400 100644 --- a/src/onebot/api/msg.ts +++ b/src/onebot/api/msg.ts @@ -666,10 +666,10 @@ export class OneBotMsgApi { } async parsePrivateMsgEvent(msg: RawMessage, grayTipElement: GrayTipElement) { - if (grayTipElement && grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_JSON) { + if (grayTipElement.subElementType == NTGrayTipElementSubTypeV2.GRAYTIP_ELEMENT_SUBTYPE_JSON) { if (grayTipElement.jsonGrayTipElement.busiId == 1061) { const PokeEvent = await this.obContext.apis.FriendApi.parsePrivatePokeEvent(grayTipElement); - if (PokeEvent) return PokeEvent; + if (PokeEvent) { return PokeEvent }; } else if (grayTipElement.jsonGrayTipElement.busiId == 19324 && msg.peerUid !== '') { return new OB11FriendAddNoticeEvent(this.core, Number(await this.core.apis.UserApi.getUinByUidV2(msg.peerUid))); } diff --git a/src/onebot/api/user.ts b/src/onebot/api/user.ts index eeb1fcc2..68a7a295 100644 --- a/src/onebot/api/user.ts +++ b/src/onebot/api/user.ts @@ -1,4 +1,4 @@ -import { NapCatCore } from '@/core'; +import { GrayTipRovokeElement, NapCatCore, RawMessage } from '@/core'; import { NapCatOneBot11Adapter } from '@/onebot'; import { OB11ProfileLikeEvent } from '@/onebot/event/notice/OB11ProfileLikeEvent'; import { decodeProfileLikeTip } from "@/core/helper/adaptDecoder"; @@ -11,7 +11,7 @@ export class OneBotUserApi { this.obContext = obContext; this.core = core; } - + async parseLikeEvent(wrappedBody: Uint8Array): Promise { const likeTip = decodeProfileLikeTip(Uint8Array.from(wrappedBody)); if (likeTip?.msgType !== 0 || likeTip?.subType !== 203) return; diff --git a/src/onebot/index.ts b/src/onebot/index.ts index 6b32ad95..3b655b26 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -265,16 +265,22 @@ export class NapCatOneBot11Adapter { }; const msgIdSend = new LRUCache(100); - const recallMsgs = new LRUCache(100); + msgListener.onAddSendMsg = async (msg) => { if (msg.sendStatus == SendStatusType.KSEND_STATUS_SENDING) { msgIdSend.put(msg.msgId, 0); } }; + msgListener.onMsgRecall = async (chatType: ChatType, uid: string, msgSeq: string) => { + const peer: Peer = { + chatType: chatType, + peerUid: uid, + guildId: '' + }; + let msg = (await this.core.apis.MsgApi.queryMsgsWithFilterExWithSeq(peer, msgSeq)).msgList; + console.log(JSON.stringify(msg)); + } msgListener.onMsgInfoListUpdate = async (msgList) => { - this.emitRecallMsg(msgList, recallMsgs).catch((e) => - this.context.logger.logError.bind(this.context.logger)('处理消息失败', e) - ); for (const msg of msgList.filter((e) => e.senderUin == this.core.selfInfo.uin)) { if (msg.sendStatus == SendStatusType.KSEND_STATUS_SUCCESS && msgIdSend.get(msg.msgId) == 0) { msgIdSend.put(msg.msgId, 1);