From 7188946d7af070a6a715c9727696ed4aa11cc696 Mon Sep 17 00:00:00 2001 From: linyuchen Date: Sat, 9 Mar 2024 22:30:16 +0800 Subject: [PATCH] refactor: try to refactor forward msg --- src/onebot11/action/SendMsg.ts | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/onebot11/action/SendMsg.ts b/src/onebot11/action/SendMsg.ts index 7a1bf90..4828746 100644 --- a/src/onebot11/action/SendMsg.ts +++ b/src/onebot11/action/SendMsg.ts @@ -14,7 +14,7 @@ import {uri2local} from "../utils"; import BaseAction from "./BaseAction"; import {ActionName, BaseCheckResult} from "./types"; import * as fs from "node:fs"; -import {log} from "../../common/utils"; +import {log, sleep} from "../../common/utils"; import {decodeCQCode} from "../cqcode"; import {dbUtil} from "../../common/db"; import {ALLOW_SEND_TEMP_MSG} from "../../common/config"; @@ -195,8 +195,9 @@ export class SendMsg extends BaseAction { chatType: ChatType.friend, peerUid: selfInfo.uid } - let selfNodeMsgList: RawMessage[] = []; + let selfNodeMsgList: RawMessage[] = []; // 自己给自己发的消息 let originalNodeMsgList: RawMessage[] = []; + let sendForwardElements: SendMessageElement[] = [] for (const messageNode of messageNodes) { // 一个node表示一个人的消息 let nodeId = messageNode.data.id; @@ -215,9 +216,11 @@ export class SendMsg extends BaseAction { deleteAfterSentFiles } = await this.createSendElements(this.convertMessage2List(messageNode.data.content), group); log("开始生成转发节点", sendElements); + sendForwardElements.push(...sendElements); const nodeMsg = await this.send(selfPeer, sendElements, deleteAfterSentFiles, true); selfNodeMsgList.push(nodeMsg); log("转发节点生成成功", nodeMsg.msgId); + await sleep(500); } catch (e) { log("生效转发消息节点失败", e) } @@ -227,27 +230,28 @@ export class SendMsg extends BaseAction { let nodeIds: string[] = [] // 检查是否需要克隆直接引用消息id的节点 let needSendSelf = false; - if (selfNodeMsgList.length) { + if (sendForwardElements.length) { needSendSelf = true } else { needSendSelf = !originalNodeMsgList.every((msg, index) => msg.peerUid === originalNodeMsgList[0].peerUid && msg.recallTime.length < 2) } if (needSendSelf) { nodeIds = selfNodeMsgList.map(msg => msg.msgId); + let sendElements: SendMessageElement[] = []; for (const originalNodeMsg of originalNodeMsgList) { if (originalNodeMsg.peerUid === selfInfo.uid && originalNodeMsg.recallTime.length < 2) { nodeIds.push(originalNodeMsg.msgId) } else { // 需要进行克隆 - let sendElements: SendMessageElement[] = [] Object.keys(originalNodeMsg.elements).forEach((eleKey) => { if (eleKey !== "elementId") { + sendForwardElements.push(originalNodeMsg.elements[eleKey]) sendElements.push(originalNodeMsg.elements[eleKey]) } }) try { const nodeMsg = await NTQQApi.sendMsg(selfPeer, sendElements, true); nodeIds.push(nodeMsg.msgId) - log("克隆转发消息成功") + log("克隆转发消息到节点") } catch (e) { log("克隆转发消息失败", e) } @@ -264,6 +268,15 @@ export class SendMsg extends BaseAction { peerUid: originalNodeMsgList[0].peerUid } } + // elements之间用换行符分隔 + // let _sendForwardElements: SendMessageElement[] = [] + // for(let i = 0; i < sendForwardElements.length; i++){ + // _sendForwardElements.push(sendForwardElements[i]) + // _sendForwardElements.push(SendMsgElementConstructor.text("\n\n")) + // } + // const nodeMsg = await NTQQApi.sendMsg(selfPeer, _sendForwardElements, true); + // nodeIds.push(nodeMsg.msgId) + // await sleep(500); // 开发转发 try { return await NTQQApi.multiForwardMsg(srcPeer, destPeer, nodeIds)