fix: reply message segment

This commit is contained in:
idranme 2024-09-04 16:18:48 +08:00
parent 02e5222f92
commit fffa664400
No known key found for this signature in database
GPG Key ID: 926F7B5B668E495F
3 changed files with 26 additions and 5 deletions
src
ntqqapi
api
types
onebot11

@ -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])
}
}

@ -480,6 +480,8 @@ export interface RawMessage {
sourceMsgIsIncPic: boolean // 原消息是否有图片
sourceMsgText: string
replayMsgSeq: string // 源消息的msgSeq可以通过这个找到源消息的msgId
senderUidStr: string
replyMsgTime: string
}
textElement: {
atType: AtType

@ -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 = {