From b18dfdb9ba5191c684d0530be85f7df9b2d0536b 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: Fri, 9 Aug 2024 18:23:37 +0800 Subject: [PATCH] chore: sendMsg --- .../action/msg/SendMsg/handle-forward-node.ts | 51 +++++++++---------- src/onebot/action/msg/SendMsg/index.ts | 2 +- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/onebot/action/msg/SendMsg/handle-forward-node.ts b/src/onebot/action/msg/SendMsg/handle-forward-node.ts index c01c26e0..d29f8e36 100644 --- a/src/onebot/action/msg/SendMsg/handle-forward-node.ts +++ b/src/onebot/action/msg/SendMsg/handle-forward-node.ts @@ -1,18 +1,15 @@ -import { ChatType, ElementType, Group, NTQQMsgApi, Peer, RawMessage, SendMessageElement } from '@/core'; -import { OB11MessageDataType, OB11MessageNode } from '@/onebot11/types'; -import { selfInfo } from '@/core/data'; -import createSendElements from '@/onebot11/action/msg/SendMsg/create-send-elements'; -import { logDebug, logError } from '@/common/utils/log'; -import { sleep } from '@/common/utils/helper'; -import { normalize, sendMsg } from '@/onebot11/action/msg/SendMsg/index'; +import { ChatType, ElementType, NapCatCore, Peer, RawMessage, SendMessageElement } from '@/core'; import { MessageUnique } from '@/common/utils/MessageUnique'; - -async function cloneMsg(msg: RawMessage): Promise { +import { OB11MessageDataType, OB11MessageNode } from '@/onebot/types'; +import createSendElements from './create-send-elements'; +import { normalize, sendMsg } from "../SendMsg/index" +async function cloneMsg(coreContext: NapCatCore, msg: RawMessage): Promise { const selfPeer = { chatType: ChatType.friend, - peerUid: selfInfo.uid + peerUid: coreContext.selfInfo.uid }; - + const logger = coreContext.context.logger; + const NTQQMsgApi = coreContext.getApiContext().MsgApi; //logDebug('克隆的目标消息', msg); const sendElements: SendMessageElement[] = []; @@ -22,29 +19,31 @@ async function cloneMsg(msg: RawMessage): Promise { } if (sendElements.length === 0) { - logDebug('需要clone的消息无法解析,将会忽略掉', msg); + logger.logDebug('需要clone的消息无法解析,将会忽略掉', msg); } try { const nodeMsg = await NTQQMsgApi.sendMsg(selfPeer, sendElements, true); return nodeMsg; } catch (e) { - logError(e, '克隆转发消息失败,将忽略本条消息', msg); + logger.logError(e, '克隆转发消息失败,将忽略本条消息', msg); } } -export async function handleForwardNode(destPeer: Peer, messageNodes: OB11MessageNode[]): Promise { +export async function handleForwardNode(coreContext: NapCatCore, destPeer: Peer, messageNodes: OB11MessageNode[]): Promise { + const NTQQMsgApi = coreContext.getApiContext().MsgApi; const selfPeer = { chatType: ChatType.friend, - peerUid: selfInfo.uid + peerUid: coreContext.selfInfo.uid }; let nodeMsgIds: string[] = []; + const logger = coreContext.context.logger; for (const messageNode of messageNodes) { const nodeId = messageNode.data.id; if (nodeId) { //对Mgsid和OB11ID混用情况兜底 const nodeMsg = MessageUnique.getMsgIdAndPeerByShortId(parseInt(nodeId)) || MessageUnique.getPeerByMsgId(nodeId); if (!nodeMsg) { - logError('转发消息失败,未找到消息', nodeId); + logger.logError('转发消息失败,未找到消息', nodeId); continue; } nodeMsgIds.push(nodeMsg.MsgId); @@ -55,20 +54,20 @@ export async function handleForwardNode(destPeer: Peer, messageNodes: OB11Messag //筛选node消息 let isNodeMsg = OB11Data.filter(e => e.type === OB11MessageDataType.node).length;//找到子转发消息 if (isNodeMsg !== 0) { - if (isNodeMsg !== OB11Data.length) { logError('子消息中包含非node消息 跳过不合法部分'); continue; } - const nodeMsg = await handleForwardNode(selfPeer, OB11Data.filter(e => e.type === OB11MessageDataType.node)); + if (isNodeMsg !== OB11Data.length) { logger.logError('子消息中包含非node消息 跳过不合法部分'); continue; } + const nodeMsg = await handleForwardNode(coreContext, selfPeer, OB11Data.filter(e => e.type === OB11MessageDataType.node)); if (nodeMsg) { nodeMsgIds.push(nodeMsg.msgId); MessageUnique.createMsg(selfPeer, nodeMsg.msgId) }; //完成子卡片生成跳过后续 continue; } - const { sendElements } = await createSendElements(OB11Data, destPeer); + const { sendElements } = await createSendElements(coreContext,OB11Data, destPeer); //拆分消息 let MixElement = sendElements.filter(element => element.elementType !== ElementType.FILE && element.elementType !== ElementType.VIDEO); let SingleElement = sendElements.filter(element => element.elementType === ElementType.FILE || element.elementType === ElementType.VIDEO).map(e => [e]); let AllElement: SendMessageElement[][] = [MixElement, ...SingleElement].filter(e => e !== undefined && e.length !== 0); const MsgNodeList: Promise[] = []; for (const sendElementsSplitElement of AllElement) { - MsgNodeList.push(sendMsg(selfPeer, sendElementsSplitElement, [], true).catch(e => new Promise((resolve, reject) => { resolve(undefined) }))); + MsgNodeList.push(sendMsg(coreContext,selfPeer, sendElementsSplitElement, [], true).catch(e => new Promise((resolve, reject) => { resolve(undefined) }))); } (await Promise.allSettled(MsgNodeList)).map((result) => { if (result.status === 'fulfilled' && result.value) { @@ -77,7 +76,7 @@ export async function handleForwardNode(destPeer: Peer, messageNodes: OB11Messag } }); } catch (e) { - logDebug('生成转发消息节点失败', e); + logger.logDebug('生成转发消息节点失败', e); } } } @@ -88,7 +87,7 @@ export async function handleForwardNode(destPeer: Peer, messageNodes: OB11Messag for (let msgId of nodeMsgIds) { const nodeMsgPeer = MessageUnique.getPeerByMsgId(msgId); if (!nodeMsgPeer) { - logError('转发消息失败,未找到消息', msgId); + logger.logError('转发消息失败,未找到消息', msgId); continue; } const nodeMsg = (await NTQQMsgApi.getMsgsByMsgId(nodeMsgPeer.Peer, [msgId])).msgList[0]; @@ -102,8 +101,8 @@ export async function handleForwardNode(destPeer: Peer, messageNodes: OB11Messag let retMsgIds: string[] = []; if (needSendSelf) { for (const [index, msg] of nodeMsgArray.entries()) { - if (msg.peerUid === selfInfo.uid) continue; - const ClonedMsg = await cloneMsg(msg); + if (msg.peerUid === coreContext.selfInfo.uid) continue; + const ClonedMsg = await cloneMsg(coreContext, msg); if (ClonedMsg) retMsgIds.push(ClonedMsg.msgId); } } else { @@ -111,10 +110,10 @@ export async function handleForwardNode(destPeer: Peer, messageNodes: OB11Messag } if (nodeMsgIds.length === 0) throw Error('转发消息失败,生成节点为空'); try { - logDebug('开发转发', srcPeer, destPeer, nodeMsgIds); + logger.logDebug('开发转发', srcPeer, destPeer, nodeMsgIds); return await NTQQMsgApi.multiForwardMsg(srcPeer!, destPeer, nodeMsgIds); } catch (e) { - logError('forward failed', e); + logger.logError('forward failed', e); return null; } } diff --git a/src/onebot/action/msg/SendMsg/index.ts b/src/onebot/action/msg/SendMsg/index.ts index ec6c9816..e0e64da8 100644 --- a/src/onebot/action/msg/SendMsg/index.ts +++ b/src/onebot/action/msg/SendMsg/index.ts @@ -146,7 +146,7 @@ export class SendMsg extends BaseAction { ); if (getSpecialMsgNum(payload, OB11MessageDataType.node)) { - const returnMsg = await handleForwardNode(peer, messages as OB11MessageNode[]); + const returnMsg = await handleForwardNode(this.CoreContext,peer, messages as OB11MessageNode[]); if (returnMsg) { const msgShortId = MessageUnique.createMsg({ guildId: '', peerUid: peer.peerUid, chatType: peer.chatType }, returnMsg!.msgId); return { message_id: msgShortId! };