karin-plugin-qgroup-file2openlist 0.0.19 → 0.0.22

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/README.md CHANGED
@@ -55,7 +55,7 @@ TypeScript 插件开发流程现在更加简单,无需手动克隆模板仓库
55
55
 
56
56
  群聊命令(简化):
57
57
 
58
- - `#同步群文件`:默认同步本群(建议先在 WebUI 配置 `groupSyncTargets`)
58
+ - 默认不响应(所有指令请私聊触发,避免群内刷屏)
59
59
 
60
60
  群同步配置命令(主人权限):
61
61
 
@@ -66,4 +66,4 @@ TypeScript 插件开发流程现在更加简单,无需手动克隆模板仓库
66
66
  - `#群同步配置 <群号> 计划 <cron>`:设置定时同步(例:`0 0 3 * * *`)
67
67
  - `#群同步配置 <群号> 时段 00:00-06:00,23:00-23:59`:限制定时同步时间段(空=不限制)
68
68
 
69
- ## 🚀 快速开始
69
+ ## 🚀 快速开始
@@ -1,12 +1,25 @@
1
1
  // src/apps/example.ts
2
2
  import { karin, segment } from "node-karin";
3
- var hello = karin.command("^(#)?\u4F60\u597D$", async (e) => {
3
+ var hello = karin.command("^(#)?\u4F60pijpoewjc\u597D$", async (e) => {
4
+ if (!e.isPrivate) return false;
4
5
  await e.reply("\u4F60\u597D\u554A\uFF01\u6211\u662FKarin\uFF0C\u5F88\u9AD8\u5174\u8BA4\u8BC6\u4F60~ (\u3002\u30FB\u2200\u30FB)\u30CE", { at: false, recallMsg: 0, reply: true });
5
6
  return true;
6
7
  });
7
- var test = karin.command("^(#)?\u6D4B\u8BD5$", "\u8BA9\u6211\u6765\u5C55\u793A\u4E00\u4E0B\u6211\u7684\u529F\u80FD\u5427\uFF01\u2728");
8
- var text = karin.command("^(#)?\u6253\u62DB\u547C$", segment.text("\u5927\u5BB6\u597D\u5440\uFF01\u4ECA\u5929\u4E5F\u8981\u5143\u6C14\u6EE1\u6EE1\u54E6\uFF01\u2570(*\xB0\u25BD\xB0*)\u256F"), { name: "\u6253\u62DB\u547C" });
9
- var test2 = karin.command("^(#)?\u83DC\u5355$", "\u6765\u770B\u770B\u6211\u90FD\u4F1A\u4E9B\u4EC0\u4E48\u5427~\n- #\u4F60\u597D\uFF1A\u6253\u4E2A\u62DB\u547C\n- #\u6D4B\u8BD5\uFF1A\u529F\u80FD\u5C55\u793A\n- #\u6253\u62DB\u547C\uFF1A\u5143\u6C14\u95EE\u5019\n(\uFF61\uFF65\u03C9\uFF65\uFF61)\uFF89\u2661", {
8
+ var test = karin.command("^(#)?\u6D4Bnjnon\u8BD5$", async (e) => {
9
+ if (!e.isPrivate) return false;
10
+ await e.reply("\u8BA9\u6211\u6765\u5C55\u793A\u4E00\u4E0B\u6211\u7684\u529F\u80FD\u5427\uFF01\u2728");
11
+ return true;
12
+ });
13
+ var text = karin.command("^(#)?\u6253cewwce\u62DB\u547C$", async (e) => {
14
+ if (!e.isPrivate) return false;
15
+ await e.reply(segment.text("\u5927\u5BB6\u597D\u5440\uFF01\u4ECA\u5929\u4E5F\u8981\u5143\u6C14\u6EE1\u6EE1\u54E6\uFF01\u2570(*\xB0\u25BD\xB0*)\u256F"));
16
+ return true;
17
+ }, { name: "\u6253\u62DB\u547C" });
18
+ var test2 = karin.command("^(#)?\u83DC sdvwe\u5355$", async (e) => {
19
+ if (!e.isPrivate) return false;
20
+ await e.reply("\u6765\u770B\u770B\u6211\u90FD\u4F1A\u4E9B\u4EC0\u4E48\u5427~\n- #\u4F60\u597D\uFF1A\u6253\u4E2A\u62DB\u547C\n- #\u6D4B\u8BD5\uFF1A\u529F\u80FD\u5C55\u793A\n- #\u6253\u62DB\u547C\uFF1A\u5143\u6C14\u95EE\u5019\n(\uFF61\uFF65\u03C9\uFF65\uFF61)\uFF89\u2661", { at: false, reply: false, recallMsg: 0 });
21
+ return false;
22
+ }, {
10
23
  event: "message",
11
24
  // 监听的事件
12
25
  name: "\u83DC\u5355",
@@ -1,12 +1,16 @@
1
1
  import {
2
+ backupOpenListToOpenList,
2
3
  exportGroupFiles,
4
+ groupFileUploadedAutoBackup,
3
5
  syncGroupFilesToOpenList,
4
6
  syncGroupFilesToOpenListCore
5
- } from "../chunk-QVWWPGHK.js";
7
+ } from "../chunk-AWSGUQPA.js";
6
8
  import "../chunk-5WVKHIPK.js";
7
9
  import "../chunk-IZS467MR.js";
8
10
  export {
11
+ backupOpenListToOpenList,
9
12
  exportGroupFiles,
13
+ groupFileUploadedAutoBackup,
10
14
  syncGroupFilesToOpenList,
11
15
  syncGroupFilesToOpenListCore
12
16
  };
@@ -58,7 +58,8 @@ var formatTargetLine = (t) => {
58
58
  const enabled = t.enabled ?? true ? "\u542F\u7528" : "\u505C\u7528";
59
59
  const cron = t.schedule?.enabled ? t.schedule?.cron || "(\u672A\u586Bcron)" : "\u5173\u95ED";
60
60
  const targetDir = t.targetDir ? t.targetDir : "(\u9ED8\u8BA4)";
61
- return `- ${t.groupId} | ${enabled} | ${mode} | \u8BA1\u5212:${cron} | \u76EE\u5F55:${targetDir}`;
61
+ const uploadBackup = t.uploadBackup ?? false ? "on" : "off";
62
+ return `- ${t.groupId} | ${enabled} | ${mode} | uploadBackup:${uploadBackup} | \u8BA1\u5212:${cron} | \u76EE\u5F55:${targetDir}`;
62
63
  };
63
64
  var upsertTarget = (cfg, groupId, patch) => {
64
65
  const list = getTargets(cfg);
@@ -114,6 +115,7 @@ var cfgHelp = [
114
115
  "- #\u7FA4\u540C\u6B65\u914D\u7F6E <\u7FA4\u53F7> \u6A21\u5F0F \u5168\u91CF|\u589E\u91CF",
115
116
  "- #\u7FA4\u540C\u6B65\u914D\u7F6E <\u7FA4\u53F7> \u76EE\u5F55 /\u6302\u8F7D/QQ\u7FA4\u6587\u4EF6/123456",
116
117
  "- #\u7FA4\u540C\u6B65\u914D\u7F6E <\u7FA4\u53F7> \u5E73\u94FA \u5F00|\u5173",
118
+ "- #\u7FA4\u540C\u6B65\u914D\u7F6E <\u7FA4\u53F7> uploadBackup on|off\uFF08\u76D1\u542C\u7FA4\u6587\u4EF6\u4E0A\u4F20\u81EA\u52A8\u5907\u4EFD\uFF09",
117
119
  "- #\u7FA4\u540C\u6B65\u914D\u7F6E <\u7FA4\u53F7> \u5E76\u53D1 <n>\uFF08\u4E0B\u8F7D/\u4E0A\u4F20\u5E76\u53D1\uFF09",
118
120
  "- #\u7FA4\u540C\u6B65\u914D\u7F6E <\u7FA4\u53F7> url\u5E76\u53D1 <n>\uFF08\u89E3\u6790URL\u5E76\u53D1\uFF09",
119
121
  "- #\u7FA4\u540C\u6B65\u914D\u7F6E <\u7FA4\u53F7> \u8D85\u65F6 <sec>\uFF08\u5355\u6587\u4EF6\u8D85\u65F6\uFF09",
@@ -123,6 +125,7 @@ var cfgHelp = [
123
125
  "- #\u7FA4\u540C\u6B65\u914D\u7F6E <\u7FA4\u53F7> \u8BA1\u5212 \u5F00\u542F|\u5173\u95ED"
124
126
  ].join("\n");
125
127
  var groupSyncConfig = karin.command(/^#?(群同步配置|同步群配置|群文件同步配置)(.*)$/i, async (e) => {
128
+ if (!e.isPrivate) return false;
126
129
  const raw = e.msg.replace(/^#?(群同步配置|同步群配置|群文件同步配置)/i, "").trim();
127
130
  if (!raw || /^(help|帮助|\?)$/i.test(raw)) {
128
131
  await e.reply(cfgHelp);
@@ -173,6 +176,9 @@ var groupSyncConfig = karin.command(/^#?(群同步配置|同步群配置|群文
173
176
  ["to", "dir"],
174
177
  ["\u5E73\u94FA", "flat"],
175
178
  ["flat", "flat"],
179
+ ["\u4E0A\u4F20\u5907\u4EFD", "uploadBackup"],
180
+ ["uploadBackup", "uploadBackup"],
181
+ ["uploadbackup", "uploadBackup"],
176
182
  ["\u5E76\u53D1", "concurrency"],
177
183
  ["\u7EBF\u7A0B", "concurrency"],
178
184
  ["concurrency", "concurrency"],
@@ -311,6 +317,19 @@ ${cfgHelp}`);
311
317
  await e.reply(`\u7FA4 ${groupId} \u5E73\u94FA\u4E0A\u4F20\u5DF2\u8BBE\u7F6E\u4E3A\uFF1A${bool ? "\u5F00" : "\u5173"}`);
312
318
  return true;
313
319
  }
320
+ if (action === "uploadBackup") {
321
+ const bool = parseBoolean(rest[0]);
322
+ if (typeof bool === "undefined") {
323
+ await e.reply("uploadBackup \u53C2\u6570\u9519\u8BEF\uFF0C\u8BF7\u4F7F\u7528\uFF1Aon/off \u6216 \u5F00/\u5173 \u6216 true/false");
324
+ return true;
325
+ }
326
+ updateConfigFile((next) => {
327
+ next.groupSyncTargets = upsertTarget(next, groupId, { uploadBackup: bool });
328
+ return next;
329
+ });
330
+ await e.reply(`\u7FA4 ${groupId} uploadBackup \u5DF2\u8BBE\u7F6E\u4E3A\uFF1A${bool ? "on" : "off"}`);
331
+ return true;
332
+ }
314
333
  if (action === "concurrency" || action === "urlConcurrency") {
315
334
  const value = parseIntSafe(rest[0]);
316
335
  if (!value || value <= 0) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  syncGroupFilesToOpenListCore
3
- } from "../chunk-QVWWPGHK.js";
3
+ } from "../chunk-AWSGUQPA.js";
4
4
  import {
5
5
  config
6
6
  } from "../chunk-5WVKHIPK.js";
@@ -4,6 +4,7 @@ var test = karin.handler("test.image", (args, reject) => {
4
4
  return "Handler\u5904\u7406\u5B8C\u6210";
5
5
  });
6
6
  var testHandler = karin.command(/^#?测试handler$/, async (e) => {
7
+ if (!e.isPrivate) return false;
7
8
  const msg = "\u6D4B\u8BD5handler";
8
9
  const res = await handler.call("test.image", { e, msg });
9
10
  await e.reply(res);
package/lib/apps/help.js CHANGED
@@ -23,6 +23,7 @@ var formatDateTime = (date) => {
23
23
  }
24
24
  };
25
25
  var helpImage = karin.command(/^#?(群文件帮助|同步群文件帮助|openlist帮助)$/i, async (e) => {
26
+ if (!e.isPrivate) return false;
26
27
  try {
27
28
  await ensurePluginResources();
28
29
  const html = path.join(dir.defResourcesDir, "template", "help.html");
@@ -37,8 +38,9 @@ var helpImage = karin.command(/^#?(群文件帮助|同步群文件帮助|openlis
37
38
  generatedAt: formatDateTime(/* @__PURE__ */ new Date())
38
39
  },
39
40
  setViewport: {
40
- width: 900,
41
- height: 720,
41
+ /** 竖版输出 1080x1920(通过 2x DPR 达到更清晰的字体/边缘) */
42
+ width: 540,
43
+ height: 960,
42
44
  deviceScaleFactor: 2
43
45
  },
44
46
  pageGotoParams: {
@@ -10,7 +10,8 @@ import {
10
10
 
11
11
  // src/apps/render.ts
12
12
  import { karin, render, segment, logger } from "node-karin";
13
- var image = karin.command(/^#?测试渲染$/, async (e) => {
13
+ var image = karin.command(/^#?测试oniubhjk渲染$/, async (e) => {
14
+ if (!e.isPrivate) return false;
14
15
  try {
15
16
  await ensurePluginResources();
16
17
  const html = dir.defResourcesDir + "/template/test.html";
@@ -45,6 +46,7 @@ var image = karin.command(/^#?测试渲染$/, async (e) => {
45
46
  permission: "all"
46
47
  });
47
48
  var renderUrl = karin.command(/^#?渲染/, async (e) => {
49
+ if (!e.isPrivate) return false;
48
50
  const file = e.msg.replace(/^#?渲染/, "").trim();
49
51
  try {
50
52
  await ensurePluginResources();
@@ -80,6 +82,7 @@ var renderUrl = karin.command(/^#?渲染/, async (e) => {
80
82
  permission: "master"
81
83
  });
82
84
  var screenshot = karin.command("^#\u6D4B\u8BD5\u622A\u56FE$", async (e) => {
85
+ if (!e.isPrivate) return false;
83
86
  const { screenshotUrl } = config();
84
87
  const img = await karin.render(screenshotUrl);
85
88
  await e.reply(segment.image(`base64://${img}`));
@@ -6,12 +6,14 @@ import "../chunk-IZS467MR.js";
6
6
  // src/apps/sendMsg.ts
7
7
  import { karin, segment, common } from "node-karin";
8
8
  var yiyanApi = karin.command(/^#一言$/, async (e) => {
9
+ if (!e.isPrivate) return false;
9
10
  const { yiyanApi: yiyanApi2 } = config();
10
11
  await e.reply(segment.image(yiyanApi2));
11
12
  }, {
12
13
  name: "\u4E00\u8A00api"
13
14
  });
14
- var sendMsg = karin.command(/^#测试主动消息$/, async (e) => {
15
+ var sendMsg = karin.command(/^#测试njkj bolj主动消息$/, async (e) => {
16
+ if (!e.isPrivate) return false;
15
17
  const selfId = e.selfId;
16
18
  const contact = e.contact;
17
19
  const messages = [
@@ -37,6 +39,7 @@ ${randomMsg}`;
37
39
  permission: "all"
38
40
  });
39
41
  var forwardMessage = karin.command(/^#测试转发$/, async (e) => {
42
+ if (!e.isPrivate) return false;
40
43
  const message = [
41
44
  segment.text("\u{1F31F} \u8FD9\u662F\u8F6C\u53D1\u7684\u7B2C\u4E00\u6761\u6D88\u606F \u{1F31F}"),
42
45
  segment.text("\u2728 \u8FD9\u662F\u8F6C\u53D1\u7684\u7B2C\u4E8C\u6761\u6D88\u606F \u2728"),
@@ -56,6 +59,7 @@ var forwardMessage = karin.command(/^#测试转发$/, async (e) => {
56
59
  permission: "all"
57
60
  });
58
61
  var randomEmoji = karin.command(/^#随机表情$/, async (e) => {
62
+ if (!e.isPrivate) return false;
59
63
  const emojiUrls = [
60
64
  "https://i.imgur.com/XaUdU2C.gif",
61
65
  "https://i.imgur.com/wF2RkHB.gif",
@@ -77,6 +81,7 @@ var randomEmoji = karin.command(/^#随机表情$/, async (e) => {
77
81
  permission: "all"
78
82
  });
79
83
  var dailyQuote = karin.command(/^#每日一言$/, async (e) => {
84
+ if (!e.isPrivate) return false;
80
85
  const quotes = [
81
86
  "\u4ECA\u5929\u4E5F\u662F\u5145\u6EE1\u5E0C\u671B\u7684\u4E00\u5929\uFF01\u52A0\u6CB9\uFF01\u2728",
82
87
  "\u4EBA\u751F\u5C31\u50CF\u4E00\u76D2\u5DE7\u514B\u529B\uFF0C\u4F60\u6C38\u8FDC\u4E0D\u77E5\u9053\u4E0B\u4E00\u5757\u662F\u4EC0\u4E48\u5473\u9053\u3002\u{1F36B}",
@@ -99,6 +104,7 @@ var dailyQuote = karin.command(/^#每日一言$/, async (e) => {
99
104
  permission: "all"
100
105
  });
101
106
  var weatherForecast = karin.command(/^#今日天气$/, async (e) => {
107
+ if (!e.isPrivate) return false;
102
108
  const weathers = [
103
109
  "\u2600\uFE0F \u6674\u5929\uFF0C\u6E29\u5EA625\xB0C\uFF0C\u9002\u5408\u51FA\u95E8\u73A9\u800D~",
104
110
  "\u{1F327}\uFE0F \u5C0F\u96E8\uFF0C\u6E29\u5EA618\xB0C\uFF0C\u8BB0\u5F97\u5E26\u4F1E\u54E6\uFF01",