From cd256235daf17da918b9330bd5a32918c7bf2476 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, 29 Jul 2024 00:16:24 +0800 Subject: [PATCH] refactor: selfMsgPost --- src/core/src/apis/msg.ts | 3 +++ .../src/services/NodeIKernelMsgService.ts | 2 +- src/onebot11/constructor.ts | 14 ++------------ src/onebot11/main.ts | 19 +++++++++++-------- 4 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/core/src/apis/msg.ts b/src/core/src/apis/msg.ts index 907614a0..9fb304db 100644 --- a/src/core/src/apis/msg.ts +++ b/src/core/src/apis/msg.ts @@ -96,6 +96,9 @@ export class NTQQMsgApi { static async getMsgsByMsgId(peer: Peer, msgIds: string[]) { return await napCatCore.session.getMsgService().getMsgsByMsgId(peer, msgIds); } + static async getSingleMsg(peer: Peer, seq: string) { + return await napCatCore.session.getMsgService().getSingleMsg(peer, seq); + } static async queryMsgsWithFilterExWithSeq(peer: Peer, msgSeq: string, msgTime: string, senderUid: string) { let ret = await napCatCore.session.getMsgService().queryMsgsWithFilterEx('0', msgTime, msgSeq, { chatInfo: peer, diff --git a/src/core/src/services/NodeIKernelMsgService.ts b/src/core/src/services/NodeIKernelMsgService.ts index 91479207..d06a87d0 100644 --- a/src/core/src/services/NodeIKernelMsgService.ts +++ b/src/core/src/services/NodeIKernelMsgService.ts @@ -176,7 +176,7 @@ export interface NodeIKernelMsgService { getMsgsBySeqList(peer: Peer, seqList: string[]): Promise; - getSingleMsg(Peer: Peer, msgSeq: string): unknown; + getSingleMsg(Peer: Peer, msgSeq: string): Promise; getSourceOfReplyMsg(...args: unknown[]): unknown; diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index ca9019ba..e88dce70 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -139,6 +139,7 @@ export class OB11Constructor { try { //做这么多都是因为NC速度太快 可能nt还没有写入数据库 let records = msg.records.find(msgRecord => msgRecord.msgId === element.replyElement.sourceMsgIdInRecords); + if (!records) { throw new Error('Record筛选失败'); } @@ -147,18 +148,12 @@ export class OB11Constructor { peerUid: msg.peerUid, guildId: '', }; - let replyMsg: RawMessage | undefined; replyMsg = (await NTQQMsgApi.getMsgsBySeqAndCount({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, element.replyElement.replayMsgSeq, 1, true, true)).msgList[0]; - if (!replyMsg || replyMsg.msgRandom !== records.msgRandom) { - //logWarn(`消息比对失败,准备重新尝试 Info: CurrentMsgRandom:${replyMsg?.msgRandom}/TargetMsgRandom:${records.msgRandom}`); - await sleep(700); replyMsg = (await NTQQMsgApi.getMsgsByMsgId(peer, MessageUnique.getRecentMsgIds(peer, 50))).msgList.find((msg) => msg.msgRandom == records.msgRandom && msg.msgSeq == element.replyElement.replayMsgSeq); } if (!replyMsg || replyMsg.msgRandom !== records.msgRandom) { - //logWarn(`消息比对失败,准备重新尝试 Info: CurrentMsgRandom:${replyMsg?.msgRandom}/TargetMsgRandom:${records.msgRandom}`); - await sleep(700); replyMsg = (await NTQQMsgApi.queryMsgsWithFilterExWithSeq( peer, element.replyElement.replayMsgSeq, @@ -166,15 +161,10 @@ export class OB11Constructor { records.senderUid )).msgList[0]; } - - // 最后尝试第一次的方法 if (!replyMsg || replyMsg.msgRandom !== records.msgRandom) { - //logWarn(`消息比对失败,准备重新尝试 Info: CurrentMsgRandom:${replyMsg?.msgRandom}/TargetMsgRandom:${records.msgRandom}`); - await sleep(700); - replyMsg = (await NTQQMsgApi.getMsgsBySeqAndCount({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, element.replyElement.replayMsgSeq, 1, true, true)).msgList[0]; + replyMsg = (await NTQQMsgApi.getSingleMsg(peer, element.replyElement.replayMsgSeq)).msgList[0]; } if (!replyMsg || replyMsg.msgRandom !== records.msgRandom) { - //logWarn(`消息比对失败,准备重新尝试 Info: CurrentMsgRandom:${replyMsg?.msgRandom}/TargetMsgRandom:${records.msgRandom}`); throw new Error('回复消息消息验证失败') } if (replyMsg) { diff --git a/src/onebot11/main.ts b/src/onebot11/main.ts index 80b621f3..073cb965 100644 --- a/src/onebot11/main.ts +++ b/src/onebot11/main.ts @@ -240,16 +240,19 @@ export class NapCatOnebot11 { }; msgListener.onMsgInfoListUpdate = (msgList) => { this.postRecallMsg(msgList).then().catch(logError); + for (const msg of msgList.filter(e => e.senderUin == selfInfo.uin)) { + OB11Constructor.message(msg).then((_msg) => { + _msg.target_id = parseInt(msg.peerUin); + logMessage(_msg as OB11Message).then().catch(logError); + }).catch(logError); + if (ob11Config.reportSelfMessage) { + msg.id = MessageUnique.createMsg({ chatType: msg.chatType, peerUid: msg.peerUid, guildId: '' }, msg.msgId); + this.postReceiveMsg([msg]).then().catch(logError); + } + } }; msgListener.onAddSendMsg = (msg) => { - OB11Constructor.message(msg).then((_msg) => { - _msg.target_id = parseInt(msg.peerUin); - logMessage(_msg as OB11Message).then().catch(logError); - }).catch(logError); - if (ob11Config.reportSelfMessage) { - msg.id = MessageUnique.createMsg({ chatType: msg.chatType, peerUid: msg.peerUid, guildId: '' }, msg.msgId); - this.postReceiveMsg([msg]).then().catch(logError); - } + }; napCatCore.addListener(msgListener); logDebug('ob11 msg listener added');