From 0e0c0512ce7272ef9f7940031d0654a9c5279ffe Mon Sep 17 00:00:00 2001 From: zhaoyingbo Date: Wed, 16 Oct 2024 12:14:05 +0000 Subject: [PATCH] =?UTF-8?q?feat(lark-msg):=20=E4=BF=AE=E6=94=B9=E6=B3=A8?= =?UTF-8?q?=E5=85=A5=E5=8F=98=E9=87=8F=E7=9A=84=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/lark-msg-tool/src/larkCard/index.ts | 30 ++++++++---- test/inject.ts | 51 ++++++++++++++++++++ 2 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 test/inject.ts diff --git a/packages/lark-msg-tool/src/larkCard/index.ts b/packages/lark-msg-tool/src/larkCard/index.ts index 5cc97aa..ba44082 100644 --- a/packages/lark-msg-tool/src/larkCard/index.ts +++ b/packages/lark-msg-tool/src/larkCard/index.ts @@ -100,23 +100,35 @@ class LarkCard< } else if (_.isArray(obj)) { return obj.map(traverseAndReplace) } else if (_.isObject(obj)) { - // 给 value 字段注入公共变量 - if ((obj as any).value) { - ;(obj as any).value = { - ...variables, - ...((obj as any).value || {}), - } - } return _.mapValues(obj, traverseAndReplace) } return obj } const content = traverseAndReplace(card) + + // 递归遍历content,遇到key是"value"的Object,将variables注入 + const injectVariables = (obj: { value: any }): any => { + if (_.isObject(obj) && !_.isArray(obj)) { + if (_.has(obj, "value") && _.isObject(obj.value)) { + return { + ...obj, + value: { ...obj.value, ...finalVariables }, + } + } + return _.mapValues(obj, injectVariables) + } else if (_.isArray(obj)) { + return obj.map(injectVariables) + } + return obj + } + + const finalContent = injectVariables(content) + this.logger.debug( - `Card ${String(cardKey)} final content: ${JSON.stringify(content)}` + `Card ${String(cardKey)} final content: ${JSON.stringify(finalContent)}` ) - return this.stringify ? JSON.stringify(content) : content + return this.stringify ? JSON.stringify(finalContent) : finalContent } genSuccessCard(content: any) { diff --git a/test/inject.ts b/test/inject.ts new file mode 100644 index 0000000..898502a --- /dev/null +++ b/test/inject.ts @@ -0,0 +1,51 @@ +import { has, isArray, isObject, mapValues } from "lodash" + +const variables = { + content: "分析中,请稍等...", + requestId: "1988fcc0-6ca8-4015-b256-b19945c33117", + xName: "Group Agent", + xAuthor: "AI创新应用组", + xIcon: "🔥", +} + +const content = { + config: { update_multi: true }, + elements: [ + { tag: "markdown", content: "分析中,请稍等..." }, + { tag: "hr" }, + { + tag: "note", + elements: [ + { + tag: "plain_text", + content: + "💡 功能由AI创新应用组提供支持,Rid:1988fcc0-6ca8-4015-b256-b19945c33117", + }, + ], + }, + ], + header: { + template: "purple", + title: { content: "🔥 感谢使用 Group Agent", tag: "plain_text" }, + }, +} + +const injectVariables = (obj: any): any => { + type Obj = { value: any } + console.log("🚀 ~ obj:", obj) + if (isObject(obj) && !isArray((obj as Obj))) { + if (has(obj, "value") && isObject(obj.value)) { + return { + ...obj, + value: { ...(obj as Obj).value, ...variables }, + } + } + return mapValues(obj, injectVariables) + } else if (isArray(obj)) { + return obj.map(injectVariables) + } + return obj +} + +const finalContent = injectVariables(content) +console.log("🚀 ~ finalContent:", finalContent)