From 3612098d62b6850880007c9de50387f135977e9f Mon Sep 17 00:00:00 2001 From: Clansty Date: Fri, 25 Oct 2024 02:42:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=87=AA=E5=AE=9A=E4=B9=89=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E8=BD=AC=E5=8F=91=E5=A4=96=E6=98=BE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/forward-msg-builder.ts | 44 ++++++++++++++++++++----------- src/onebot/action/msg/SendMsg.ts | 6 ++--- src/onebot/types/message.ts | 4 +++ 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/common/forward-msg-builder.ts b/src/common/forward-msg-builder.ts index bcd521b0..5a1629ef 100644 --- a/src/common/forward-msg-builder.ts +++ b/src/common/forward-msg-builder.ts @@ -50,9 +50,29 @@ interface ForwardAdaptMsgElement { } export class ForwardMsgBuilder { - private static build(resId: string, msg: ForwardAdaptMsg[]): ForwardMsgJson { + private static build(resId: string, msg: ForwardAdaptMsg[], source?: string, news?: ForwardMsgJsonMetaDetail["news"], summary?: string, prompt?: string): ForwardMsgJson { const id = crypto.randomUUID(); const isGroupMsg = msg.some(m => m.isGroupMsg); + if (!source) { + source = isGroupMsg ? "群聊的聊天记录" : + msg.length + ? Array.from(new Set(msg.map(m => m.senderName))) + .join('和') + '的聊天记录' + : '聊天记录'; + } + if (!news) { + news = msg.length === 0 ? [{ + text: "Nya~ This message is send from NapCat.Packet!", + }] : msg.map(m => ({ + text: `${m.senderName}: ${m.msg?.map(msg => msg.preview).join('')}`, + })); + } + if (!summary) { + summary = `查看${msg.length}条转发消息`; + } + if (!prompt) { + prompt = "[聊天记录]"; + } return { app: "com.tencent.multimsg", config: { @@ -62,29 +82,21 @@ export class ForwardMsgBuilder { type: "normal", width: 300 }, - desc: "[聊天记录]", + desc: prompt, extra: { filename: id, tsum: msg.length, }, meta: { detail: { - news: msg.length === 0 ? [{ - text: "Nya~ This message is send from NapCat.Packet!", - }] : msg.map(m => ({ - text: `${m.senderName}: ${m.msg?.map(msg => msg.preview).join('')}`, - })), + news, resid: resId, - source: isGroupMsg ? "群聊的聊天记录" : - msg.length - ? Array.from(new Set(msg.map(m => m.senderName))) - .join('和') + '的聊天记录' - : '聊天记录', - summary: `查看${msg.length}条转发消息`, + source, + summary, uniseq: id, } }, - prompt: "[聊天记录]", + prompt, ver: "0.0.0.5", view: "contact", }; @@ -94,13 +106,13 @@ export class ForwardMsgBuilder { return this.build(resId, []); } - static fromPacketMsg(resId: string, packetMsg: PacketMsg[]): ForwardMsgJson { + static fromPacketMsg(resId: string, packetMsg: PacketMsg[], source?: string, news?: ForwardMsgJsonMetaDetail["news"], summary?: string, prompt?: string): ForwardMsgJson { return this.build(resId, packetMsg.map(msg => ({ senderName: msg.senderName, isGroupMsg: msg.groupId !== undefined, msg: msg.msg.map(m => ({ preview: m.toPreview(), })) - }))); + })), source, news, summary, prompt); } } diff --git a/src/onebot/action/msg/SendMsg.ts b/src/onebot/action/msg/SendMsg.ts index eab2b2ae..0454cd16 100644 --- a/src/onebot/action/msg/SendMsg.ts +++ b/src/onebot/action/msg/SendMsg.ts @@ -117,7 +117,7 @@ export class SendMsg extends BaseAction { if (getSpecialMsgNum(payload, OB11MessageDataType.node)) { const packetMode = this.core.apis.PacketApi.available; const returnMsgAndResId = packetMode - ? await this.handleForwardedNodesPacket(peer, messages as OB11MessageNode[]) + ? await this.handleForwardedNodesPacket(peer, messages as OB11MessageNode[], payload.source, payload.news, payload.summary, payload.prompt) : await this.handleForwardedNodes(peer, messages as OB11MessageNode[]); if (returnMsgAndResId.message) { const msgShortId = MessageUnique.createUniqueMsgId({ @@ -146,7 +146,7 @@ export class SendMsg extends BaseAction { } // TODO: recursively handle forwarded nodes - private async handleForwardedNodesPacket(msgPeer: Peer, messageNodes: OB11MessageNode[]): Promise<{ + private async handleForwardedNodesPacket(msgPeer: Peer, messageNodes: OB11MessageNode[], source?: string, news?: { text: string }[], summary?: string, prompt?: string): Promise<{ message: RawMessage | null, res_id?: string }> { @@ -172,7 +172,7 @@ export class SendMsg extends BaseAction { } } const resid = await this.core.apis.PacketApi.sendUploadForwardMsg(packetMsg, msgPeer.chatType === ChatType.KCHATTYPEGROUP ? +msgPeer.peerUid : 0); - const forwardJson = ForwardMsgBuilder.fromPacketMsg(resid, packetMsg); + const forwardJson = ForwardMsgBuilder.fromPacketMsg(resid, packetMsg, source, news, summary, prompt); const finallySendElements = { elementType: ElementType.ARK, elementId: "", diff --git a/src/onebot/types/message.ts b/src/onebot/types/message.ts index d4890e34..8921afb3 100644 --- a/src/onebot/types/message.ts +++ b/src/onebot/types/message.ts @@ -221,6 +221,10 @@ export interface OB11PostSendMsg { message: OB11MessageMixType; messages?: OB11MessageMixType; // 兼容 go-cqhttp auto_escape?: boolean | string + source?: string, + news?: { text: string }[], + summary?: string, + prompt?: string } export interface OB11PostContext { message_type?: 'private' | 'group'