提交更新
This commit is contained in:
@@ -9,11 +9,11 @@ Yenai-Plugin是一个Yunzai-Bot的升级插件,提供对bot的一些便携操
|
||||
|
||||
请将Yenai-Plugin放置在Yunzai-Bot的plugins目录下,重启Yunzai-Bot后即可使用。
|
||||
|
||||
推荐使用git进行安装,以方便后续升级。在Yunzai/plugins目录打开终端,运行
|
||||
推荐使用git进行安装,以方便后续升级。在Yunzai目录打开终端,运行
|
||||
|
||||
```
|
||||
// 使用gitee
|
||||
git clone https://gitee.com/yeyang52/yenai-plugin.git
|
||||
git clone https://gitee.com/yeyang52/yenai-plugin.git ./plugins/yenai-plugin
|
||||
```
|
||||
|
||||
#### 功能介绍
|
||||
|
||||
124
apps/admin.js
Normal file
124
apps/admin.js
Normal file
@@ -0,0 +1,124 @@
|
||||
import plugin from '../../../lib/plugins/plugin.js'
|
||||
import { createRequire } from "module"
|
||||
|
||||
/**
|
||||
* 全局
|
||||
*/
|
||||
const require = createRequire(import.meta.url)
|
||||
const { exec } = require("child_process")
|
||||
const _path = process.cwd()
|
||||
let timer
|
||||
/**
|
||||
* 管理员
|
||||
*/
|
||||
export class admin extends plugin {
|
||||
constructor() {
|
||||
super({
|
||||
name: "管理|更新插件",
|
||||
dsc: "管理和更新代码",
|
||||
event: "message",
|
||||
priority: 400,
|
||||
rule: [
|
||||
{
|
||||
reg: "^#椰奶(插件)?(强制)?更新",
|
||||
fnc: "checkout",
|
||||
}
|
||||
],
|
||||
});
|
||||
this.key = "yenai:restart";
|
||||
}
|
||||
|
||||
|
||||
async init() {
|
||||
let restart = await redis.get(this.key);
|
||||
if (restart) {
|
||||
restart = JSON.parse(restart);
|
||||
if (restart.isGroup) {
|
||||
Bot.pickGroup(restart.id).sendMsg("重启成功,新版椰奶插件已经生效");
|
||||
} else {
|
||||
Bot.pickUser(restart.id).sendMsg("重启成功,新版椰奶插件已经生效");
|
||||
}
|
||||
redis.del(this.key);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async checkout() {
|
||||
if (!this.e.isMaster) {
|
||||
return;
|
||||
}
|
||||
let e = this.e;
|
||||
const isForce = this.e.msg.includes("强制");
|
||||
let command = "git pull";
|
||||
if (isForce) {
|
||||
command = "git fetch --all && git reset --hard master && git pull";
|
||||
e.reply("正在执行强制更新操作,请稍等");
|
||||
} else {
|
||||
e.reply("正在执行更新操作,请稍等");
|
||||
}
|
||||
const that = this;
|
||||
exec(
|
||||
command,
|
||||
{ cwd: `${_path}/plugins/yenai-plugin/` },
|
||||
function (error, stdout, stderr) {
|
||||
if (/(Already up[ -]to[ -]date|已经是最新的)/.test(stdout)) {
|
||||
e.reply("目前已经是最新版椰奶插件了~");
|
||||
return;
|
||||
}
|
||||
if (error) {
|
||||
e.reply(
|
||||
"椰奶插件更新失败!\nError code: " +
|
||||
error.code +
|
||||
"\n" +
|
||||
error.stack +
|
||||
"\n 请稍后重试。"
|
||||
);
|
||||
return;
|
||||
}
|
||||
e.reply("椰奶插件更新成功,正在尝试重新启动Yunzai以应用更新...");
|
||||
timer && clearTimeout(timer);
|
||||
timer = setTimeout(async () => {
|
||||
try {
|
||||
let data = JSON.stringify({
|
||||
isGroup: !!that.e.isGroup,
|
||||
id: that.e.isGroup ? that.e.group_id : that.e.user_id,
|
||||
});
|
||||
await redis.set(that.key, data, { EX: 120 });
|
||||
let cm = "npm run start";
|
||||
if (process.argv[1].includes("pm2")) {
|
||||
cm = "npm run restart";
|
||||
} else {
|
||||
e.reply("当前为前台运行,重启将转为后台...");
|
||||
}
|
||||
|
||||
exec(cm, (error, stdout, stderr) => {
|
||||
if (error) {
|
||||
redis.del(that.key);
|
||||
e.reply(
|
||||
"自动重启失败,请手动重启以应用新版椰奶插件。\nError code: " +
|
||||
error.code +
|
||||
"\n" +
|
||||
error.stack +
|
||||
"\n"
|
||||
);
|
||||
logger.error(`重启失败\n${error.stack}`);
|
||||
} else if (stdout) {
|
||||
logger.mark("重启成功,运行已转为后台");
|
||||
logger.mark("查看日志请用命令:npm run log");
|
||||
logger.mark("停止后台运行命令:npm stop");
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
redis.del(this.key);
|
||||
let err = error.stack ?? error;
|
||||
e.reply("重启云崽操作失败!\n" + err);
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,8 +43,7 @@ export class Help extends plugin {
|
||||
'#好友列表变动通知 (开启|关闭)\n',
|
||||
'#群聊列表变动通知 (开启|关闭)\n',
|
||||
'#设置删除缓存时间 <时间>(s)\n',
|
||||
'#查看通知设置\n',
|
||||
'#刷新通知设置'
|
||||
'#通知设置\n',
|
||||
]
|
||||
this.e.reply(msg)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user