From 8256942a3d49750a37808382eedb307816685543 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: Tue, 10 Jun 2025 14:27:50 +0800 Subject: [PATCH] fix: #1051 --- src/core/types/element.ts | 1 + src/onebot/index.ts | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/core/types/element.ts b/src/core/types/element.ts index dd417b13..00d94b78 100644 --- a/src/core/types/element.ts +++ b/src/core/types/element.ts @@ -58,6 +58,7 @@ export interface GrayTipRovokeElement { operatorUid: string; operatorNick: string; operatorRemark: string; + isSelfOperate: boolean; // 是否是自己撤回的 operatorMemRemark?: string; wording: string; // 自定义的撤回提示语 } diff --git a/src/onebot/index.ts b/src/onebot/index.ts index f5af0dd4..1cacec7c 100644 --- a/src/onebot/index.ts +++ b/src/onebot/index.ts @@ -270,7 +270,6 @@ export class NapCatOneBot11Adapter { ); } }; - msgListener.onAddSendMsg = async (msg) => { try { if (msg.sendStatus == SendStatusType.KSEND_STATUS_SENDING) { @@ -305,8 +304,18 @@ export class NapCatOneBot11Adapter { peerUid: uid, guildId: '' }; - const msg = (await this.core.apis.MsgApi.queryMsgsWithFilterExWithSeq(peer, msgSeq)).msgList.find(e => e.msgType == NTMsgType.KMSGTYPEGRAYTIPS); + let msg = (await this.core.apis.MsgApi.queryMsgsWithFilterExWithSeq(peer, msgSeq)).msgList.find(e => e.msgType == NTMsgType.KMSGTYPEGRAYTIPS); const element = msg?.elements.find(e => !!e.grayTipElement?.revokeElement); + if (element?.grayTipElement?.revokeElement.isSelfOperate && msg) { + await this.core.eventWrapper.registerListen('NodeIKernelMsgListener/onMsgRecall', + (chatType: ChatType, uid: string, msgSeq: string) => { + return chatType === msg?.chatType && uid === msg?.peerUid && msgSeq === msg?.msgSeq; + } + ).catch(() => { + msg = undefined; + this.context.logger.logDebug('自操作消息撤回事件'); + }); + } if (msg && element) { const recallEvent = await this.emitRecallMsg(msg, element); try { @@ -317,6 +326,7 @@ export class NapCatOneBot11Adapter { this.context.logger.logError('处理消息撤回失败', e); } } + }; msgListener.onKickedOffLine = async (kick) => { const event = new BotOfflineEvent(this.core, kick.tipsTitle, kick.tipsDesc);