mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
fix: 保证NC回复的消息一致性
This commit is contained in:
@@ -96,6 +96,19 @@ export class NTQQMsgApi {
|
|||||||
static async getMsgsByMsgId(peer: Peer, msgIds: string[]) {
|
static async getMsgsByMsgId(peer: Peer, msgIds: string[]) {
|
||||||
return await napCatCore.session.getMsgService().getMsgsByMsgId(peer, msgIds);
|
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) {
|
static async getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, z: boolean) {
|
||||||
return await napCatCore.session.getMsgService().getMsgsBySeqAndCount(peer, seq, count, desc, z);
|
return await napCatCore.session.getMsgService().getMsgsBySeqAndCount(peer, seq, count, desc, z);
|
||||||
}
|
}
|
||||||
|
@@ -752,10 +752,12 @@ export interface RawMessage {
|
|||||||
chatType: ChatType;
|
chatType: ChatType;
|
||||||
sendStatus?: number; // 消息状态,别人发的2是已撤回,自己发的2是已发送
|
sendStatus?: number; // 消息状态,别人发的2是已撤回,自己发的2是已发送
|
||||||
recallTime: string; // 撤回时间, "0"是没有撤回
|
recallTime: string; // 撤回时间, "0"是没有撤回
|
||||||
|
records: RawMessage[];
|
||||||
elements: {
|
elements: {
|
||||||
elementId: string;
|
elementId: string;
|
||||||
elementType: ElementType;
|
elementType: ElementType;
|
||||||
replyElement: {
|
replyElement: {
|
||||||
|
sourceMsgIdInRecords: string;
|
||||||
senderUid: string; // 原消息发送者QQ号
|
senderUid: string; // 原消息发送者QQ号
|
||||||
sourceMsgIsIncPic: boolean; // 原消息是否有图片
|
sourceMsgIsIncPic: boolean; // 原消息是否有图片
|
||||||
sourceMsgText: string;
|
sourceMsgText: string;
|
||||||
|
@@ -135,21 +135,28 @@ export class OB11Constructor {
|
|||||||
}
|
}
|
||||||
else if (element.replyElement) {
|
else if (element.replyElement) {
|
||||||
message_data['type'] = 'reply';
|
message_data['type'] = 'reply';
|
||||||
// log("收到回复消息", element.replyElement.replayMsgSeq)
|
//log("收到回复消息", element.replyElement);
|
||||||
try {
|
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,
|
chatType: msg.chatType,
|
||||||
peerUid: msg.peerUid,
|
peerUid: msg.peerUid,
|
||||||
guildId: '',
|
guildId: '',
|
||||||
},
|
},
|
||||||
element.replyElement.replayMsgSeq,
|
element.replyElement.replayMsgSeq,
|
||||||
1,
|
records.msgTime,
|
||||||
true,
|
records.senderUid
|
||||||
true
|
|
||||||
);
|
);
|
||||||
// console.log(JSON.stringify(retData, null, 2));
|
if (replyMsg.msgList.length === 0 || replyMsg.msgList[0].msgRandom !== records.msgRandom) {
|
||||||
// const replyMsg = await NTQQMsgApi.getMsgsBySeqAndCount({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, element.replyElement.replayMsgSeq, 1, true, true);
|
await sleep(300);
|
||||||
|
replyMsg = await NTQQMsgApi.getMsgsBySeqAndCount({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, element.replyElement.replayMsgSeq, 1, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
if (replyMsg) {
|
if (replyMsg) {
|
||||||
message_data['data']['id'] = MessageUnique.createMsg({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, replyMsg.msgList[0].msgId)?.toString();
|
message_data['data']['id'] = MessageUnique.createMsg({ peerUid: msg.peerUid, guildId: '', chatType: msg.chatType }, replyMsg.msgList[0].msgId)?.toString();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user