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 +2 -2
- package/lib/apps/example.js +17 -4
- package/lib/apps/groupFiles.js +5 -1
- package/lib/apps/groupSyncConfig.js +20 -1
- package/lib/apps/groupSyncScheduler.js +1 -1
- package/lib/apps/handler.js +1 -0
- package/lib/apps/help.js +4 -2
- package/lib/apps/render.js +4 -1
- package/lib/apps/sendMsg.js +7 -1
- package/lib/chunk-AWSGUQPA.js +2282 -0
- package/lib/web.config.js +124 -196
- package/package.json +1 -1
- package/resources/template/help.html +158 -99
- package/lib/chunk-QVWWPGHK.js +0 -1138
package/README.md
CHANGED
|
@@ -55,7 +55,7 @@ TypeScript 插件开发流程现在更加简单,无需手动克隆模板仓库
|
|
|
55
55
|
|
|
56
56
|
群聊命令(简化):
|
|
57
57
|
|
|
58
|
-
-
|
|
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
|
+
## 🚀 快速开始
|
package/lib/apps/example.js
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
// src/apps/example.ts
|
|
2
2
|
import { karin, segment } from "node-karin";
|
|
3
|
-
var hello = karin.command("^(#)?\
|
|
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("^(#)?\
|
|
8
|
-
|
|
9
|
-
|
|
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",
|
package/lib/apps/groupFiles.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
+
backupOpenListToOpenList,
|
|
2
3
|
exportGroupFiles,
|
|
4
|
+
groupFileUploadedAutoBackup,
|
|
3
5
|
syncGroupFilesToOpenList,
|
|
4
6
|
syncGroupFilesToOpenListCore
|
|
5
|
-
} from "../chunk-
|
|
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
|
-
|
|
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) {
|
package/lib/apps/handler.js
CHANGED
|
@@ -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
|
-
|
|
41
|
-
|
|
41
|
+
/** 竖版输出 1080x1920(通过 2x DPR 达到更清晰的字体/边缘) */
|
|
42
|
+
width: 540,
|
|
43
|
+
height: 960,
|
|
42
44
|
deviceScaleFactor: 2
|
|
43
45
|
},
|
|
44
46
|
pageGotoParams: {
|
package/lib/apps/render.js
CHANGED
|
@@ -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(
|
|
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}`));
|
package/lib/apps/sendMsg.js
CHANGED
|
@@ -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(
|
|
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",
|