From 50295ed36bdca5e92aa6fc4de2c98d3cab5f00da Mon Sep 17 00:00:00 2001 From: yeyang <746659424@qq.com> Date: Thu, 6 Oct 2022 14:49:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- apps/admin.js | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++ apps/help.js | 3 +- 3 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 apps/admin.js diff --git a/README.md b/README.md index 0cc2af6..b25ba6f 100644 --- a/README.md +++ b/README.md @@ -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 ``` #### 功能介绍 diff --git a/apps/admin.js b/apps/admin.js new file mode 100644 index 0000000..bf8b7ae --- /dev/null +++ b/apps/admin.js @@ -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; + } +} + + diff --git a/apps/help.js b/apps/help.js index 43b0e30..e3697ea 100644 --- a/apps/help.js +++ b/apps/help.js @@ -43,8 +43,7 @@ export class Help extends plugin { '#好友列表变动通知 (开启|关闭)\n', '#群聊列表变动通知 (开启|关闭)\n', '#设置删除缓存时间 <时间>(s)\n', - '#查看通知设置\n', - '#刷新通知设置' + '#通知设置\n', ] this.e.reply(msg) }