From 8db294efe6f463cf8b481f1a423e0b2c675d9542 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: Tue, 23 Jul 2024 14:54:05 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=BD=AC=E5=8F=91=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/src/apis/msg.ts | 97 +++++++++++++++++++++++++++++----------- 1 file changed, 70 insertions(+), 27 deletions(-) diff --git a/src/core/src/apis/msg.ts b/src/core/src/apis/msg.ts index 901e59e4..f2594bdc 100644 --- a/src/core/src/apis/msg.ts +++ b/src/core/src/apis/msg.ts @@ -163,7 +163,10 @@ export class NTQQMsgApi { } static async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) { let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime()); - let data = await NTEventDispatch.CallNormalEvent<(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map) => Promise, (msgList: RawMessage[]) => void>( + let data = await NTEventDispatch.CallNormalEvent< + (msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map) => Promise, + (msgList: RawMessage[]) => void + >( 'NodeIKernelMsgService/sendMsg', 'NodeIKernelMsgListener/onMsgInfoListUpdate', 1, @@ -249,39 +252,79 @@ export class NTQQMsgApi { static async forwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]) { return napCatCore.session.getMsgService().forwardMsg(msgIds, srcPeer, [destPeer], new Map()); } - static async multiForwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise { const msgInfos = msgIds.map(id => { return { msgId: id, senderShowName: selfInfo.nick }; }); - - return new Promise((resolve, reject) => { - let complete = false; - const onSentCB = (msg: RawMessage) => { - const arkElement = msg.elements.find(ele => ele.arkElement); - if (!arkElement) { - // log("收到的不是转发消息") - return; + let data = await NTEventDispatch.CallNormalEvent< + (msgInfo: typeof msgInfos, srcPeer: Peer, destPeer: Peer, comment: Array, attr: Map,) => Promise, + (msgList: RawMessage[]) => void + >( + 'NodeIKernelMsgService/multiForwardMsgWithComment', + 'NodeIKernelMsgListener/onMsgInfoListUpdate', + 1, + 5000, + (msgRecords: RawMessage[]) => { + for (let msgRecord of msgRecords) { + if (msgRecord.peerUid == destPeer.peerUid && msgRecord.senderUid == selfInfo.uid) { + return true; + } } - const forwardData: any = JSON.parse(arkElement.arkElement.bytesData); - if (forwardData.app != 'com.tencent.multimsg') { - return; - } - if (msg.peerUid == destPeer.peerUid && msg.senderUid == selfInfo.uid) { - complete = true; - resolve(msg); - } - }; - sentMsgTasks.set(randomUUID(), onSentCB); - setTimeout(() => { - if (!complete) { - reject('转发消息超时'); - } - }, 5000); - napCatCore.session.getMsgService().multiForwardMsgWithComment(msgInfos, srcPeer, destPeer, [], new Map()); - } + return false; + }, + msgInfos, + srcPeer, + destPeer, + [], + new Map() ); + for (let msg of data[1]) { + const arkElement = msg.elements.find(ele => ele.arkElement); + if (!arkElement) { + continue; + } + const forwardData: any = JSON.parse(arkElement.arkElement.bytesData); + if (forwardData.app != 'com.tencent.multimsg') { + continue; + } + if (msg.peerUid == destPeer.peerUid && msg.senderUid == selfInfo.uid) { + return msg; + } + } + throw new Error('转发消息超时'); } + // static async multiForwardMsg2(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise { + // const msgInfos = msgIds.map(id => { + // return { msgId: id, senderShowName: selfInfo.nick }; + // }); + + // return new Promise((resolve, reject) => { + // let complete = false; + // const onSentCB = (msg: RawMessage) => { + // const arkElement = msg.elements.find(ele => ele.arkElement); + // if (!arkElement) { + // // log("收到的不是转发消息") + // return; + // } + // const forwardData: any = JSON.parse(arkElement.arkElement.bytesData); + // if (forwardData.app != 'com.tencent.multimsg') { + // return; + // } + // if (msg.peerUid == destPeer.peerUid && msg.senderUid == selfInfo.uid) { + // complete = true; + // resolve(msg); + // } + // }; + // sentMsgTasks.set(randomUUID(), onSentCB); + // setTimeout(() => { + // if (!complete) { + // reject('转发消息超时'); + // } + // }, 5000); + // napCatCore.session.getMsgService().multiForwardMsgWithComment(msgInfos, srcPeer, destPeer, [], new Map()); + // } + // ); + // } static async markallMsgAsRead() { return napCatCore.session.getMsgService().setAllC2CAndGroupMsgRead(); }