Skip to content

Commit 9ad6f7c

Browse files
committed
feat: 自动推送新版本
1 parent c1d1d29 commit 9ad6f7c

File tree

6 files changed

+150
-43
lines changed

6 files changed

+150
-43
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## [0.1.3-dev](https://github.com/TomyJan/Yunzai-Kuro-Plugin/compare/v0.1.2-rel...v0.1.3-dev) (2023-07-29)
2+
3+
14
## [0.1.2-rel](https://github.com/TomyJan/Yunzai-Kuro-Plugin/compare/v0.1.1-rel...v0.1.2-rel) (2023-07-28)
25

36

README.md

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,46 @@
1010

1111
> js真你妈难写, 操
1212
13-
## 安装教程
14-
15-
1. 下载插件压缩包, 解压至Yunzai `./plugin` 目录并重命名文件夹为 `Yunzai-Kuro-Plugin`
16-
17-
(推荐) 或通过 Git 在 Yunzai 根目录运行命令拉取插件:
18-
```shell
19-
git clone https://github.com/TomyJan/Yunzai-Kuro-Plugin.git ./plugins/Yunzai-Kuro-Plugin/
20-
```
21-
22-
也可使用 Gitee 镜像(可能会滞后):
23-
```shell
24-
git clone https://gitee.com/TomyJan/Yunzai-Kuro-Plugin.git ./plugins/Yunzai-Kuro-Plugin/
25-
```
26-
27-
2. 安装依赖
28-
```shell
29-
pnpm install
30-
```
13+
## 安装与维护
14+
15+
### 安装插件
16+
17+
插件更新强依赖 Git, 建议通过 Git 安装
18+
19+
#### 通过 Git 安装
20+
21+
在 Yunzai 根目录运行命令拉取插件:
22+
```shell
23+
git clone https://github.com/TomyJan/Yunzai-Kuro-Plugin.git ./plugins/Yunzai-Kuro-Plugin/
24+
```
25+
26+
也可使用 Gitee 镜像(可能会滞后):
27+
```shell
28+
git clone https://gitee.com/TomyJan/Yunzai-Kuro-Plugin.git ./plugins/Yunzai-Kuro-Plugin/
29+
```
30+
31+
#### 自行下载安装
32+
33+
下载插件包, 解压至 Yunzai `./plugins` 目录内并重命名文件夹为 `Yunzai-Kuro-Plugin`
34+
35+
### 安装依赖
36+
37+
```shell
38+
pnpm install
39+
```
40+
### 更新插件
41+
42+
如是通过 Git 安装, 在 Yunzai 根目录运行以下命令即可
43+
44+
```shell
45+
git -C ./plugins/Yunzai-Kuro-Plugin/ pull
46+
```
47+
48+
如为手动安装, 需要先备份插件用户数据目录, 删除插件并解压新的插件后, 再将插件用户数据目录恢复进去
49+
50+
### 用户数据目录
51+
52+
`./data` 为插件数据目录. 其中, `./data/system` 为插件系统数据, 不用理会, 其他目录和文件为插件的用户数据, 迁移/更新时备份这些目录即可
3153

3254
## 功能介绍
3355

@@ -59,13 +81,25 @@
5981

6082
- [x] 代码重构: 将所有fetch请求提取到一个方法
6183
- [ ] 代码重构: logger 套娃
84+
- [x] 检查更新通知
85+
- [ ] 部分项目可配置化, 适配锅巴
6286

6387
## 关于
6488

89+
### 免责声明
90+
91+
- 功能仅限内部交流与小范围使用,请勿将 Yunzai-Kuro-Plugin 用于以盈利为目的的场景
92+
- 图片与其他素材均来自于网络,仅供交流学习使用,如有侵权请联系处理
93+
6594
### 贡献/帮助
6695

6796
[提交 issue](https://github.com/TomyJan/Yunzai-Kuro-Plugin/issues/new) | [提交 pr](https://github.com/TomyJan/Yunzai-Kuro-Plugin/compare)
6897

98+
### 链接
99+
100+
- [Miao-Yunzai](https://github.com/yoimiya-kokomi/Miao-Yunzai)
101+
- [Yunzai-Bot 索引库](https://gitee.com/yhArcadia/Yunzai-Bot-plugins-index)
102+
69103
### 致谢
70104

71105
- [xiaoyao-cvs-plugin](https://github.com/ctrlcvs/xiaoyao-cvs-plugin) 插件部分代码来源

data/system/versionCache.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

index.js

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import chalk from 'chalk'
22
import fs from 'node:fs'
3-
import schedule from 'node-schedule'
43
import { appsPath, pluginVer } from './data/system/pluginConstants.js'
5-
import { gameSignTask, bbsDailyTask } from './model/autoTask.js'
4+
import initAutoTask from './model/autoTask.js'
65

76
logger.info(chalk.rgb(253, 235, 255)('-----------(≧∇≦)ノ-----------'))
87
logger.info(chalk.rgb(134, 142, 204)(`[库洛插件] V${pluginVer} 初始化中~`))
@@ -35,24 +34,6 @@ logger.info(chalk.rgb(134, 142, 204)(`[库洛插件] 载入模块完成!`))
3534
export { apps }
3635

3736
logger.info(chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务中...`))
38-
task()
39-
async function task() {
40-
logger.info(
41-
chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务 gameSignTask:pns`)
42-
)
43-
schedule.scheduleJob('0 2 0 * * ? ', function () {
44-
gameSignTask('pns')
45-
})
46-
logger.info(
47-
chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务 gameSignTask:mc`)
48-
)
49-
schedule.scheduleJob('0 2 0 * * ? ', function () {
50-
gameSignTask('mc')
51-
})
52-
logger.info(chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务 bbsDailyTask`))
53-
schedule.scheduleJob('0 2 0 * * ? ', function () {
54-
bbsDailyTask()
55-
})
56-
}
37+
initAutoTask()
5738

5839
logger.info(chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务完成!`))

model/autoTask.js

Lines changed: 91 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,38 @@
1+
import chalk from 'chalk'
12
import fs from 'node:fs'
3+
import schedule from 'node-schedule'
24
import { doBBSDailyTask } from './bbsTask.js'
35
import { doPnsSignIn } from './gameSignIn.js'
4-
import { dataPath } from '../data/system/pluginConstants.js'
6+
import { dataPath, pluginVer } from '../data/system/pluginConstants.js'
57
import { getRandomInt, sendMsgFriend, sleepAsync } from './utils.js'
68
import { getToken } from '../model/kuroBBSTokenHandler.js'
9+
import cfg from '../../../lib/config/config.js'
710

8-
export async function gameSignTask(gameName) {
11+
export default async function initAutoTask() {
12+
logger.info(
13+
chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务 gameSignTask:pns`)
14+
)
15+
schedule.scheduleJob('0 2 0 * * ? ', function () {
16+
gameSignTask('pns')
17+
})
18+
logger.info(
19+
chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务 gameSignTask:mc`)
20+
)
21+
schedule.scheduleJob('0 2 0 * * ? ', function () {
22+
gameSignTask('mc')
23+
})
24+
logger.info(chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务 bbsDailyTask`))
25+
schedule.scheduleJob('0 2 0 * * ? ', function () {
26+
bbsDailyTask()
27+
})
28+
29+
logger.info(chalk.rgb(134, 142, 204)(`[库洛插件] 载入定时任务 checkUpdateTask`))
30+
schedule.scheduleJob('0 0 6/12 * * ? ', function () {
31+
checkUpdateTask()
32+
})
33+
}
34+
35+
async function gameSignTask(gameName) {
936
if (!gameName || (gameName !== 'pns' && gameName !== 'mc')) {
1037
logger.error(`[库洛插件] 自动游戏签到: 游戏 ${gameName} 未定义!`)
1138
return false
@@ -45,7 +72,7 @@ export async function gameSignTask(gameName) {
4572
}
4673
}
4774

48-
export async function bbsDailyTask() {
75+
async function bbsDailyTask() {
4976
logger.info(`[库洛插件] 自动社区游戏签到开始...`)
5077

5178
const gameSignUins = fs
@@ -74,3 +101,64 @@ export async function bbsDailyTask() {
74101
logger.info(`[库洛插件] 自动社区签到: 任务完成`)
75102
return true
76103
}
104+
105+
async function checkUpdateTask() {
106+
logger.info(`[库洛插件] 检查更新任务开始...`)
107+
let remoteVersion = await getRemoteVersion('GitHub')
108+
if (!remoteVersion) {
109+
remoteVersion = await getRemoteVersion('GHProxy')
110+
if (!remoteVersion) {
111+
logger.warn(`[库洛插件] 检查更新任务失败`)
112+
await sendMsgFriend(cfg.masterQQ[0], `[库洛插件]自动检查更新失败!`)
113+
return false
114+
}
115+
}
116+
logger.info(`[库洛插件] 检查更新任务: 获取到最新版本 ${remoteVersion}, 本地版本 ${pluginVer}`)
117+
if (remoteVersion != pluginVer) {
118+
// 推送并缓存
119+
const cacheFilePath = '../data/system/versionCache.json'
120+
let versionCache = ''
121+
fs.readFile(cacheFilePath, 'utf8', (err, data) => {
122+
if (err) {
123+
logger.error('读取 versionCache.json 时出现错误:', err.message);
124+
} else {
125+
versionCache = data;
126+
logger.mark('versionCache: ', versionCache);
127+
}
128+
});
129+
if (versionCache?.remoteVersion == remoteVersion) {
130+
// 已经推送过了
131+
return false
132+
}
133+
versionCache = {remoteVersion: remoteVersion}
134+
let isCacheSucceed = false
135+
136+
fs.writeFile(cacheFilePath, versionCache, (err) => {
137+
if (err) {
138+
logger.error('写入versionCache.json 时出现错误: ', err.message);
139+
} else {
140+
logger.mark('缓存远程版本成功!');
141+
isCacheSucceed = true
142+
}
143+
});
144+
await sendMsgFriend(cfg.masterQQ[0], `[库洛插件]自动检查更新\n发现新版本: ${remoteVersion}, 本地版本 ${pluginVer}` + (isCacheSucceed ? '' : '\n缓存版本信息失败, 该信息可能会重复推送'))
145+
146+
}
147+
148+
async function getRemoteVersion(type) {
149+
let checkUrl = 'https://github.com/TomyJan/Yunzai-Kuro-Plugin/raw/master/CHANGELOG.md'
150+
if (type == 'GHProxy') checkUrl = 'https://ghproxy.com/' + checkUrl
151+
try {
152+
let rsp = await fetch(checkUrl)
153+
if (!rsp.ok) {
154+
logger.warn(`[库洛插件] 从 ${type} 检查更新失败: ${rsp.status} ${rsp.statusText}`)
155+
return false
156+
}
157+
return await rsp.text()
158+
} catch (error) {
159+
logger.warn(`[库洛插件] 从 ${type} 检查更新失败: ${error.message}`)
160+
return false
161+
}
162+
}
163+
164+
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "Yunzai-Kuro-Plugin",
3-
"version": "0.1.2-rel",
3+
"version": "0.1.3-dev",
44
"author": "TomyJan",
55
"description": "Yunzai-Bot plugin for kuro games.",
66
"type": "module",

0 commit comments

Comments
 (0)