From fffa664400fb6acd8a4e62c151b93a27a4bbcc6c Mon Sep 17 00:00:00 2001 From: idranme Date: Wed, 4 Sep 2024 16:18:48 +0800 Subject: [PATCH] fix: reply message segment --- src/ntqqapi/api/msg.ts | 18 ++++++++++++++++++ src/ntqqapi/types/msg.ts | 2 ++ src/onebot11/entities.ts | 11 ++++++----- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/ntqqapi/api/msg.ts b/src/ntqqapi/api/msg.ts index 65e46d8..ef0ace3 100644 --- a/src/ntqqapi/api/msg.ts +++ b/src/ntqqapi/api/msg.ts @@ -290,4 +290,22 @@ export class NTQQMsgApi extends Service { } }, null]) } + + async queryMsgsWithFilterExBySeq(peer: Peer, msgSeq: string, filterMsgTime: string, filterSendersUid: string[]) { + return await invoke('nodeIKernelMsgService/queryMsgsWithFilterEx', [{ + msgId: '0', + msgTime: '0', + msgSeq, + params: { + chatInfo: peer, + filterMsgType: [], + filterSendersUid, + filterMsgToTime: filterMsgTime, + filterMsgFromTime: filterMsgTime, + isReverseOrder: true, + isIncludeCurrent: true, + pageLimit: 1, + } + }, null]) + } } diff --git a/src/ntqqapi/types/msg.ts b/src/ntqqapi/types/msg.ts index 8a7abfc..fb5387f 100644 --- a/src/ntqqapi/types/msg.ts +++ b/src/ntqqapi/types/msg.ts @@ -480,6 +480,8 @@ export interface RawMessage { sourceMsgIsIncPic: boolean // 原消息是否有图片 sourceMsgText: string replayMsgSeq: string // 源消息的msgSeq,可以通过这个找到源消息的msgId + senderUidStr: string + replyMsgTime: string } textElement: { atType: AtType diff --git a/src/onebot11/entities.ts b/src/onebot11/entities.ts index 047e168..3e5c916 100644 --- a/src/onebot11/entities.ts +++ b/src/onebot11/entities.ts @@ -155,13 +155,14 @@ export namespace OB11Entities { } try { const records = msg.records.find(msgRecord => msgRecord.msgId === replyElement.sourceMsgIdInRecords) - if (!records) throw new Error('找不到回复消息') - let replyMsg = (await ctx.ntMsgApi.getMsgsBySeqAndCount(peer, replyElement.replayMsgSeq, 1, true, true)).msgList[0] - if (!replyMsg || records.msgRandom !== replyMsg.msgRandom) { - replyMsg = (await ctx.ntMsgApi.getSingleMsg(peer, replyElement.replayMsgSeq)).msgList[0] + if (!records || !replyElement.replyMsgTime || !replyElement.senderUidStr) { + throw new Error('找不到回复消息') } + const replyMsg = (await ctx.ntMsgApi.queryMsgsWithFilterExBySeq(peer, replyElement.replayMsgSeq, replyElement.replyMsgTime, [replyElement.senderUidStr])) + .msgList.find(msg => msg.msgRandom === records.msgRandom) + // 284840486: 合并消息内侧 消息具体定位不到 - if ((!replyMsg || records.msgRandom !== replyMsg.msgRandom) && msg.peerUin !== '284840486') { + if (!replyMsg && msg.peerUin !== '284840486') { throw new Error('回复消息消息验证失败') } messageSegment = {