chattercatcher 0.1.11 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +22 -7
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -8,7 +8,7 @@ import fs13 from "fs/promises";
|
|
|
8
8
|
// package.json
|
|
9
9
|
var package_default = {
|
|
10
10
|
name: "chattercatcher",
|
|
11
|
-
version: "0.1.
|
|
11
|
+
version: "0.1.12",
|
|
12
12
|
description: "\u672C\u5730\u4F18\u5148\u7684\u98DE\u4E66/Lark \u5BB6\u5EAD\u7FA4\u77E5\u8BC6\u5E93\u673A\u5668\u4EBA",
|
|
13
13
|
type: "module",
|
|
14
14
|
main: "dist/index.js",
|
|
@@ -88,6 +88,7 @@ var appConfigSchema = z.object({
|
|
|
88
88
|
feishu: z.object({
|
|
89
89
|
domain: z.enum(["feishu", "lark"]).default("feishu"),
|
|
90
90
|
appId: z.string().default(""),
|
|
91
|
+
botOpenId: z.string().default(""),
|
|
91
92
|
groupPolicy: z.enum(["open", "allowlist", "disabled"]).default("open"),
|
|
92
93
|
requireMention: z.boolean().default(true)
|
|
93
94
|
}),
|
|
@@ -2106,12 +2107,22 @@ function stripMentions(text, mentions) {
|
|
|
2106
2107
|
}
|
|
2107
2108
|
return result.replace(/@/g, " ").replace(/\s+/g, " ").trim();
|
|
2108
2109
|
}
|
|
2109
|
-
function
|
|
2110
|
+
function isMentionForBot(mention, config) {
|
|
2111
|
+
if (!config.feishu.botOpenId) {
|
|
2112
|
+
return false;
|
|
2113
|
+
}
|
|
2114
|
+
return mention.id?.open_id === config.feishu.botOpenId;
|
|
2115
|
+
}
|
|
2116
|
+
function getBotMentions(payload, config) {
|
|
2117
|
+
const message = payload.event?.message;
|
|
2118
|
+
return (message?.mentions ?? []).filter((mention) => isMentionForBot(mention, config));
|
|
2119
|
+
}
|
|
2120
|
+
function isFeishuMessageAddressedToBot(payload, config) {
|
|
2110
2121
|
const message = payload.event?.message;
|
|
2111
2122
|
if (!message || message.message_type !== "text") {
|
|
2112
2123
|
return false;
|
|
2113
2124
|
}
|
|
2114
|
-
return (
|
|
2125
|
+
return getBotMentions(payload, config).length > 0;
|
|
2115
2126
|
}
|
|
2116
2127
|
function getFeishuQuestionDecision(payload, config) {
|
|
2117
2128
|
const message = payload.event?.message;
|
|
@@ -2121,9 +2132,9 @@ function getFeishuQuestionDecision(payload, config) {
|
|
|
2121
2132
|
reason: "\u4E0D\u662F\u53EF\u56DE\u7B54\u7684\u6587\u672C\u6D88\u606F\u3002"
|
|
2122
2133
|
};
|
|
2123
2134
|
}
|
|
2124
|
-
const mentions =
|
|
2135
|
+
const mentions = getBotMentions(payload, config);
|
|
2125
2136
|
const text = parseTextContent(message.content);
|
|
2126
|
-
const hasMention = isFeishuMessageAddressedToBot(payload);
|
|
2137
|
+
const hasMention = isFeishuMessageAddressedToBot(payload, config);
|
|
2127
2138
|
if (config.feishu.requireMention && !hasMention) {
|
|
2128
2139
|
return {
|
|
2129
2140
|
shouldAnswer: false,
|
|
@@ -2300,7 +2311,7 @@ function createFeishuEventDispatcher(options) {
|
|
|
2300
2311
|
return new lark2.EventDispatcher({}).register({
|
|
2301
2312
|
"im.message.receive_v1": async (data2) => {
|
|
2302
2313
|
const payload = { event: data2 };
|
|
2303
|
-
if (options.questionHandler && isFeishuMessageAddressedToBot(payload)) {
|
|
2314
|
+
if (options.questionHandler && isFeishuMessageAddressedToBot(payload, options.config)) {
|
|
2304
2315
|
const platformMessageId = data2?.message?.message_id;
|
|
2305
2316
|
if (platformMessageId && answeredMessageIds.has(platformMessageId)) {
|
|
2306
2317
|
console.log("\u98DE\u4E66\u63D0\u95EE\u91CD\u590D\u6295\u9012\uFF1A\u5DF2\u8DF3\u8FC7\u56DE\u7B54\u3002");
|
|
@@ -3580,6 +3591,10 @@ async function promptForConfiguration(config, secrets) {
|
|
|
3580
3591
|
default: config.feishu.domain
|
|
3581
3592
|
});
|
|
3582
3593
|
config.feishu.appId = await input({ message: "\u98DE\u4E66 App ID", default: config.feishu.appId });
|
|
3594
|
+
config.feishu.botOpenId = await input({
|
|
3595
|
+
message: "\u98DE\u4E66\u673A\u5668\u4EBA Open ID\uFF08\u5FC5\u586B\uFF0C\u7528\u4E8E\u533A\u5206 @ \u673A\u5668\u4EBA\u548C @ \u5176\u4ED6\u4EBA\uFF09",
|
|
3596
|
+
default: config.feishu.botOpenId
|
|
3597
|
+
});
|
|
3583
3598
|
secrets.feishu.appSecret = applySecretInput(
|
|
3584
3599
|
secrets.feishu.appSecret,
|
|
3585
3600
|
await password({ message: secrets.feishu.appSecret ? "\u98DE\u4E66 App Secret\uFF08\u7559\u7A7A\u4FDD\u7559\uFF09" : "\u98DE\u4E66 App Secret", mask: "*" })
|
|
@@ -3611,7 +3626,7 @@ async function promptForConfiguration(config, secrets) {
|
|
|
3611
3626
|
config.embedding.dimension = dimension ?? null;
|
|
3612
3627
|
config.web.port = await number({ message: "Web UI \u7AEF\u53E3", default: config.web.port, required: true }) ?? config.web.port;
|
|
3613
3628
|
config.feishu.requireMention = await confirm({
|
|
3614
|
-
message: "\u7FA4\u804A\u56DE\u7B54\u662F\u5426\u8981\u6C42 @
|
|
3629
|
+
message: "\u7FA4\u804A\u56DE\u7B54\u662F\u5426\u8981\u6C42 @ \u673A\u5668\u4EBA\uFF1F",
|
|
3615
3630
|
default: config.feishu.requireMention
|
|
3616
3631
|
});
|
|
3617
3632
|
}
|