koishi-plugin-cfmrmod 1.0.8 → 1.0.9
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/notify.js +47 -4
- package/package.json +7 -4
package/dist/notify.js
CHANGED
|
@@ -513,10 +513,53 @@ function apply(ctx, config, options) {
|
|
|
513
513
|
await updateState(sub.channelId, sub.platform, sub.projectId, latest.version || '');
|
|
514
514
|
return { sent: true, updated: true };
|
|
515
515
|
};
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
516
|
+
// 自动检查更新定时器
|
|
517
|
+
const startAutoCheck = async () => {
|
|
518
|
+
// 首先加载配置文件
|
|
519
|
+
await loadConfigFromFile();
|
|
520
|
+
// 计算轮询间隔:取所有订阅中最小的 interval,最小不低于 1 分钟
|
|
521
|
+
const getMinInterval = () => {
|
|
522
|
+
const subs = getConfigSubs();
|
|
523
|
+
if (!subs.length)
|
|
524
|
+
return Number(config.interval) || 30 * 60 * 1000;
|
|
525
|
+
const intervals = subs.map(s => s.interval);
|
|
526
|
+
return Math.min(...intervals);
|
|
527
|
+
};
|
|
528
|
+
// 使用较短的基准轮询间隔(1分钟),让 checkOnce 内部判断每个订阅是否到期
|
|
529
|
+
// 这样可以支持每个订阅的独立 interval
|
|
530
|
+
const baseTick = 60 * 1000; // 1 分钟基准轮询
|
|
531
|
+
// 自动轮询函数:每次都检查 config.enabled
|
|
532
|
+
const autoCheckLoop = async () => {
|
|
533
|
+
try {
|
|
534
|
+
await loadConfigFromFile();
|
|
535
|
+
if (config.enabled) {
|
|
536
|
+
const subs = getConfigSubs();
|
|
537
|
+
if (subs.length > 0) {
|
|
538
|
+
logger.debug(`自动检查更新开始,共 ${subs.length} 个订阅...`);
|
|
539
|
+
const stats = await checkOnce();
|
|
540
|
+
if (stats) {
|
|
541
|
+
logger.debug(`自动检查完成: checked=${stats.checked}, updated=${stats.updated}, skipped=${stats.skipped}, failed=${stats.failed}`);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
catch (e) {
|
|
547
|
+
logger.warn(`自动检查更新失败: ${e.message}`);
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
// 启动时延迟执行一次初始检查(给 bot 连接时间)
|
|
551
|
+
ctx.setTimeout(async () => {
|
|
552
|
+
await autoCheckLoop();
|
|
553
|
+
}, 10 * 1000);
|
|
554
|
+
// 设置定时器,每分钟轮询一次,由 checkOnce 内部判断哪些订阅到期
|
|
555
|
+
ctx.setInterval(autoCheckLoop, baseTick);
|
|
556
|
+
const minInterval = getMinInterval();
|
|
557
|
+
logger.info(`自动更新检查已启动,基准轮询间隔: 1 分钟,最短订阅间隔: ${Math.round(minInterval / 60000)} 分钟`);
|
|
558
|
+
};
|
|
559
|
+
// 使用 ctx.on('ready') 确保在 Koishi 完全就绪后启动
|
|
560
|
+
ctx.on('ready', () => {
|
|
561
|
+
startAutoCheck().catch(e => logger.warn(`启动自动检查失败: ${e.message}`));
|
|
562
|
+
});
|
|
520
563
|
ctx.command('notify.add <platform> <projectId>', '添加更新订阅')
|
|
521
564
|
.action(async ({ session }, platform, projectId) => {
|
|
522
565
|
await loadConfigFromFile();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-cfmrmod",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "Koishi 插件:搜索 CurseForge/Modrinth/MCMod 并渲染图片卡片",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"pub": "npm run build && npm publish --access public"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"koishi": "^
|
|
43
|
-
"
|
|
42
|
+
"@ltxhhz/koishi-plugin-skia-canvas": "^0.0.10",
|
|
43
|
+
"koishi": "^4.0.0"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"cheerio": "^1.0.0-rc.12",
|
|
@@ -55,7 +55,10 @@
|
|
|
55
55
|
"zh": "从 CurseForge/Modrinth/MCMod 搜索模组/整合包/光影等内容,并生成图片卡片。"
|
|
56
56
|
},
|
|
57
57
|
"service": {
|
|
58
|
-
"required": [
|
|
58
|
+
"required": [
|
|
59
|
+
"skia",
|
|
60
|
+
"database"
|
|
61
|
+
]
|
|
59
62
|
}
|
|
60
63
|
}
|
|
61
64
|
}
|