refactor: 转发消息修复

This commit is contained in:
手瓜一十雪 2024-07-23 14:54:05 +08:00
parent 5cc5149aed
commit 8db294efe6

View File

@ -163,7 +163,10 @@ export class NTQQMsgApi {
} }
static async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) { static async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) {
let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime()); let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime());
let data = await NTEventDispatch.CallNormalEvent<(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<any, any>) => Promise<unknown>, (msgList: RawMessage[]) => void>( let data = await NTEventDispatch.CallNormalEvent<
(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<any, any>) => Promise<unknown>,
(msgList: RawMessage[]) => void
>(
'NodeIKernelMsgService/sendMsg', 'NodeIKernelMsgService/sendMsg',
'NodeIKernelMsgListener/onMsgInfoListUpdate', 'NodeIKernelMsgListener/onMsgInfoListUpdate',
1, 1,
@ -249,39 +252,79 @@ export class NTQQMsgApi {
static async forwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]) { static async forwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]) {
return napCatCore.session.getMsgService().forwardMsg(msgIds, srcPeer, [destPeer], new Map()); return napCatCore.session.getMsgService().forwardMsg(msgIds, srcPeer, [destPeer], new Map());
} }
static async multiForwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise<RawMessage> { static async multiForwardMsg(srcPeer: Peer, destPeer: Peer, msgIds: string[]): Promise<RawMessage> {
const msgInfos = msgIds.map(id => { const msgInfos = msgIds.map(id => {
return { msgId: id, senderShowName: selfInfo.nick }; return { msgId: id, senderShowName: selfInfo.nick };
}); });
let data = await NTEventDispatch.CallNormalEvent<
return new Promise((resolve, reject) => { (msgInfo: typeof msgInfos, srcPeer: Peer, destPeer: Peer, comment: Array<any>, attr: Map<any, any>,) => Promise<unknown>,
let complete = false; (msgList: RawMessage[]) => void
const onSentCB = (msg: RawMessage) => { >(
const arkElement = msg.elements.find(ele => ele.arkElement); 'NodeIKernelMsgService/multiForwardMsgWithComment',
if (!arkElement) { 'NodeIKernelMsgListener/onMsgInfoListUpdate',
// log("收到的不是转发消息") 1,
return; 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); return false;
if (forwardData.app != 'com.tencent.multimsg') { },
return; msgInfos,
} srcPeer,
if (msg.peerUid == destPeer.peerUid && msg.senderUid == selfInfo.uid) { destPeer,
complete = true; [],
resolve(msg); new Map()
}
};
sentMsgTasks.set(randomUUID(), onSentCB);
setTimeout(() => {
if (!complete) {
reject('转发消息超时');
}
}, 5000);
napCatCore.session.getMsgService().multiForwardMsgWithComment(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<RawMessage> {
// 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() { static async markallMsgAsRead() {
return napCatCore.session.getMsgService().setAllC2CAndGroupMsgRead(); return napCatCore.session.getMsgService().setAllC2CAndGroupMsgRead();
} }