From c7a7494d7eeb8835d06e4bb3614217cccd01c4e3 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: Sun, 28 Jul 2024 22:33:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=9D=E8=AF=81NC=E5=9B=9E=E5=A4=8D?= =?UTF-8?q?=E7=9A=84=E6=B6=88=E6=81=AF=E4=B8=80=E8=87=B4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/src/apis/msg.ts | 13 +++++++++++++ src/core/src/entities/msg.ts | 2 ++ src/onebot11/constructor.ts | 21 ++++++++++++++------- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/core/src/apis/msg.ts b/src/core/src/apis/msg.ts index e637d259..907614a0 100644 --- a/src/core/src/apis/msg.ts +++ b/src/core/src/apis/msg.ts @@ -96,6 +96,19 @@ export class NTQQMsgApi { static async getMsgsByMsgId(peer: Peer, msgIds: string[]) { return await napCatCore.session.getMsgService().getMsgsByMsgId(peer, msgIds); } + static async queryMsgsWithFilterExWithSeq(peer: Peer, msgSeq: string, msgTime: string, senderUid: string) { + let ret = await napCatCore.session.getMsgService().queryMsgsWithFilterEx('0', msgTime, msgSeq, { + chatInfo: peer, + filterMsgType: [], + filterSendersUid: [senderUid], + filterMsgToTime: '0', + filterMsgFromTime: '0', + isReverseOrder: false, + isIncludeCurrent: true, + pageLimit: 1, + }); + return ret; + } static async getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, z: boolean) { return await napCatCore.session.getMsgService().getMsgsBySeqAndCount(peer, seq, count, desc, z); } diff --git a/src/core/src/entities/msg.ts b/src/core/src/entities/msg.ts index bf19ad28..c79a5be4 100644 --- a/src/core/src/entities/msg.ts +++ b/src/core/src/entities/msg.ts @@ -752,10 +752,12 @@ export interface RawMessage { chatType: ChatType; sendStatus?: number; // 消息状态,别人发的2是已撤回,自己发的2是已发送 recallTime: string; // 撤回时间, "0"是没有撤回 + records: RawMessage[]; elements: { elementId: string; elementType: ElementType; replyElement: { + sourceMsgIdInRecords: string; senderUid: string; // 原消息发送者QQ号 sourceMsgIsIncPic: boolean; // 原消息是否有图片 sourceMsgText: string; diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts index 9d1cd148..5f9d6cd4 100644 --- a/src/onebot11/constructor.ts +++ b/src/onebot11/constructor.ts @@ -135,21 +135,28 @@ export class OB11Constructor { } else if (element.replyElement) { message_data['type'] = 'reply'; - // log("收到回复消息", element.replyElement.replayMsgSeq) + //log("收到回复消息", element.replyElement); try { - let replyMsg = await NTQQMsgApi.getMsgsBySeqAndCount( + //做这么多都是因为NC速度太快 可能nt还没有写入数据库 + let records = msg.records.find(msgRecord => msgRecord.msgId === element.replyElement.sourceMsgIdInRecords); + if (!records) { + throw new Error('Record筛选失败'); + } + let replyMsg = await NTQQMsgApi.queryMsgsWithFilterExWithSeq( { chatType: msg.chatType, peerUid: msg.peerUid, guildId: '', }, element.replyElement.replayMsgSeq, - 1, - true, - true + records.msgTime, + records.senderUid ); - // console.log(JSON.stringify(retData, null, 2)); - // const replyMsg = await NTQQMsgApi.getMsgsBySeqAndCount({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, element.replyElement.replayMsgSeq, 1, true, true); + if (replyMsg.msgList.length === 0 || replyMsg.msgList[0].msgRandom !== records.msgRandom) { + await sleep(300); + replyMsg = await NTQQMsgApi.getMsgsBySeqAndCount({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, element.replyElement.replayMsgSeq, 1, true, true); + } + if (replyMsg) { message_data['data']['id'] = MessageUnique.createMsg({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, replyMsg.msgList[0].msgId)?.toString(); }