2022-06-17 14:12:23 +08:00
|
|
|
|
import fs from "fs";
|
|
|
|
|
import lodash from "lodash";
|
2022-06-22 12:51:47 +08:00
|
|
|
|
import {
|
|
|
|
|
createRequire
|
|
|
|
|
} from "module";
|
|
|
|
|
import {
|
|
|
|
|
exec
|
|
|
|
|
} from "child_process";
|
|
|
|
|
import {
|
|
|
|
|
Cfg
|
|
|
|
|
} from "../components/index.js";
|
2022-06-17 14:12:23 +08:00
|
|
|
|
import Common from "../components/Common.js";
|
2022-07-24 11:46:05 +08:00
|
|
|
|
|
2022-06-23 23:06:30 +08:00
|
|
|
|
let cfgMap = {
|
|
|
|
|
"体力": "sys.Note",
|
2022-06-26 19:31:18 +08:00
|
|
|
|
"帮助": "sys.help",
|
|
|
|
|
"匹配": "sys.Atlas",
|
2022-07-07 10:52:17 +08:00
|
|
|
|
"戳一戳":"note.poke",
|
2022-06-28 23:21:06 +08:00
|
|
|
|
"模板": "mb.len",
|
2022-10-31 21:15:24 +08:00
|
|
|
|
"获取sk":"ck.sk",
|
2022-06-28 23:33:05 +08:00
|
|
|
|
"目录":"Atlas.all",
|
2023-04-15 07:38:17 +08:00
|
|
|
|
"扫码绑定":'mhy.qrcode',
|
2023-06-06 12:41:02 +08:00
|
|
|
|
"星铁图鉴":'sr.Search',
|
|
|
|
|
"星铁匹配":'sr.Atlas'
|
2022-06-23 23:06:30 +08:00
|
|
|
|
};
|
|
|
|
|
let sysCfgReg = `^#图鉴设置\s*(${lodash.keys(cfgMap).join("|")})?\s*(.*)$`;
|
2022-06-17 14:12:23 +08:00
|
|
|
|
export const rule = {
|
2022-06-22 12:51:47 +08:00
|
|
|
|
updateRes: {
|
|
|
|
|
hashMark: true,
|
2022-06-26 19:39:27 +08:00
|
|
|
|
reg: "^#图鉴(强制)?更新$",
|
2022-06-22 12:51:47 +08:00
|
|
|
|
describe: "【#管理】更新素材",
|
|
|
|
|
},
|
|
|
|
|
updateMiaoPlugin: {
|
|
|
|
|
hashMark: true,
|
|
|
|
|
reg: "^#图鉴插件(强制)?更新",
|
|
|
|
|
describe: "【#管理】图鉴更新",
|
|
|
|
|
},
|
2022-10-31 13:57:07 +08:00
|
|
|
|
updateTemp:{
|
|
|
|
|
hashMark: true,
|
|
|
|
|
reg: "^#图鉴模板(强制)?更新$",
|
|
|
|
|
describe: "【#管理】更新素材",
|
|
|
|
|
},
|
2022-06-23 23:06:30 +08:00
|
|
|
|
sysCfg: {
|
|
|
|
|
hashMark: true,
|
|
|
|
|
reg: sysCfgReg,
|
|
|
|
|
describe: "【#管理】系统设置"
|
|
|
|
|
}
|
2022-06-17 14:12:23 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const _path = process.cwd();
|
2022-06-19 18:33:42 +08:00
|
|
|
|
const resPath = `${_path}/plugins/xiaoyao-cvs-plugin/resources/`;
|
2022-06-18 21:30:24 +08:00
|
|
|
|
const plusPath = `${resPath}/xiaoyao-plus/`;
|
2022-10-31 14:14:45 +08:00
|
|
|
|
const notePlus=`${resPath}/BJT-Templet/`;
|
2022-06-23 23:06:30 +08:00
|
|
|
|
export async function sysCfg(e, {
|
|
|
|
|
render
|
|
|
|
|
}) {
|
|
|
|
|
if (!await checkAuth(e)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let cfgReg = new RegExp(sysCfgReg);
|
|
|
|
|
let regRet = cfgReg.exec(e.msg);
|
|
|
|
|
|
|
|
|
|
if (!regRet) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2022-10-31 21:15:24 +08:00
|
|
|
|
|
2022-06-23 23:06:30 +08:00
|
|
|
|
if (regRet[1]) {
|
2022-06-28 23:21:06 +08:00
|
|
|
|
|
2022-06-23 23:06:30 +08:00
|
|
|
|
// 设置模式
|
|
|
|
|
let val = regRet[2] || "";
|
2022-06-28 23:21:06 +08:00
|
|
|
|
|
2022-06-23 23:06:30 +08:00
|
|
|
|
let cfgKey = cfgMap[regRet[1]];
|
2022-06-26 19:31:18 +08:00
|
|
|
|
|
2022-06-23 23:06:30 +08:00
|
|
|
|
if (cfgKey === "sys.scale") {
|
|
|
|
|
val = Math.min(200, Math.max(50, val * 1 || 100));
|
2022-06-28 23:21:06 +08:00
|
|
|
|
}else if(cfgKey === "mb.len"){
|
|
|
|
|
val= Math.min(2,Math.max(val,0));
|
2023-04-15 07:38:17 +08:00
|
|
|
|
}else if(cfgKey==='mhy.qrcode'){
|
|
|
|
|
val= Math.min(3,Math.max(val,0));
|
2022-06-23 23:06:30 +08:00
|
|
|
|
} else {
|
|
|
|
|
val = !/关闭/.test(val);
|
|
|
|
|
}
|
2023-06-06 12:41:02 +08:00
|
|
|
|
|
2022-06-23 23:06:30 +08:00
|
|
|
|
if (cfgKey) {
|
|
|
|
|
Cfg.set(cfgKey, val);
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-06-26 19:31:18 +08:00
|
|
|
|
let cfg = {
|
|
|
|
|
help: getStatus("sys.help", false),
|
2022-06-29 12:13:26 +08:00
|
|
|
|
Note: getStatus("sys.Note",false),
|
|
|
|
|
Atlas: getStatus("sys.Atlas",false),
|
2022-06-28 23:21:06 +08:00
|
|
|
|
len:Cfg.get("mb.len", 0),
|
2022-10-31 14:14:45 +08:00
|
|
|
|
poke: getStatus("note.poke",false),
|
2022-10-31 21:15:24 +08:00
|
|
|
|
isSk: getStatus("ck.sk",false),
|
2023-04-15 07:38:17 +08:00
|
|
|
|
qrcode:Cfg.get("mhy.qrcode", 0),
|
2022-06-26 19:31:18 +08:00
|
|
|
|
imgPlus: fs.existsSync(plusPath),
|
2022-10-31 14:14:45 +08:00
|
|
|
|
notePlus: fs.existsSync(notePlus),
|
2022-06-28 23:21:06 +08:00
|
|
|
|
bg: await rodom(), //获取底图
|
2022-06-29 12:13:26 +08:00
|
|
|
|
Atlasall:getStatus("Atlas.all",false),
|
2023-06-06 12:41:02 +08:00
|
|
|
|
srAtlas:getStatus("sr.Atlas",false),
|
|
|
|
|
srSearch:getStatus("sr.Search",false),
|
2022-06-26 19:31:18 +08:00
|
|
|
|
}
|
|
|
|
|
//渲染图像
|
|
|
|
|
return await Common.render("admin/index", {
|
|
|
|
|
...cfg,
|
|
|
|
|
}, {
|
|
|
|
|
e,
|
|
|
|
|
render,
|
|
|
|
|
scale: 1.4
|
|
|
|
|
});
|
2022-06-23 23:06:30 +08:00
|
|
|
|
}
|
2022-06-26 19:31:18 +08:00
|
|
|
|
|
2022-06-28 23:21:06 +08:00
|
|
|
|
const rodom = async function() {
|
2022-06-26 19:31:18 +08:00
|
|
|
|
var image = fs.readdirSync(`./plugins/xiaoyao-cvs-plugin/resources/admin/imgs/bg`);
|
|
|
|
|
var list_img = [];
|
|
|
|
|
for (let val of image) {
|
|
|
|
|
list_img.push(val)
|
|
|
|
|
}
|
|
|
|
|
var imgs = list_img.length == 1 ? list_img[0] : list_img[lodash.random(0, list_img.length - 1)];
|
|
|
|
|
return imgs;
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-22 12:51:47 +08:00
|
|
|
|
const checkAuth = async function(e) {
|
|
|
|
|
return await e.checkAuth({
|
|
|
|
|
auth: "master",
|
2022-06-29 12:13:26 +08:00
|
|
|
|
replyMsg: `只有主人才能命令我哦~
|
2022-06-17 14:12:23 +08:00
|
|
|
|
(*/ω\*)`
|
2022-06-22 12:51:47 +08:00
|
|
|
|
});
|
2022-06-17 14:12:23 +08:00
|
|
|
|
}
|
2022-06-22 12:51:47 +08:00
|
|
|
|
const getStatus = function(rote, def = true) {
|
|
|
|
|
if (Cfg.get(rote, def)) {
|
|
|
|
|
return `<div class="cfg-status" >已开启</div>`;
|
|
|
|
|
} else {
|
|
|
|
|
return `<div class="cfg-status status-off">已关闭</div>`;
|
|
|
|
|
}
|
2022-06-17 14:12:23 +08:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function updateRes(e) {
|
2022-06-22 12:51:47 +08:00
|
|
|
|
if (!await checkAuth(e)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
let command = "";
|
|
|
|
|
if (fs.existsSync(`${resPath}/xiaoyao-plus/`)) {
|
|
|
|
|
e.reply("开始尝试更新,请耐心等待~");
|
|
|
|
|
command = `git pull`;
|
2022-06-26 19:39:27 +08:00
|
|
|
|
let isForce = e.msg.includes("强制");
|
|
|
|
|
if (isForce) {
|
|
|
|
|
command = "git checkout . && git pull";
|
2022-06-28 23:21:06 +08:00
|
|
|
|
// command="git fetch --all && git reset --hard origin/master && git pull "
|
2022-06-26 19:39:27 +08:00
|
|
|
|
e.reply("正在执行强制更新操作,请稍等");
|
|
|
|
|
} else {
|
|
|
|
|
e.reply("正在执行更新操作,请稍等");
|
|
|
|
|
}
|
2022-06-22 12:51:47 +08:00
|
|
|
|
exec(command, {
|
|
|
|
|
cwd: `${resPath}/xiaoyao-plus/`
|
|
|
|
|
}, function(error, stdout, stderr) {
|
|
|
|
|
//console.log(stdout);
|
2022-07-08 21:04:58 +08:00
|
|
|
|
if (/Already up to date/.test(stdout)||stdout.includes("最新")) {
|
2022-06-22 12:51:47 +08:00
|
|
|
|
e.reply("目前所有图片都已经是最新了~");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
let numRet = /(\d*) files changed,/.exec(stdout);
|
|
|
|
|
if (numRet && numRet[1]) {
|
|
|
|
|
e.reply(`报告主人,更新成功,此次更新了${numRet[1]}个图片~`);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (error) {
|
|
|
|
|
e.reply("更新失败!\nError code: " + error.code + "\n" + error.stack + "\n 请稍后重试。");
|
|
|
|
|
} else {
|
|
|
|
|
e.reply("图片加量包更新成功~");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} else {
|
2024-09-18 08:47:02 +08:00
|
|
|
|
//gitea图床
|
2024-12-01 21:26:28 +08:00
|
|
|
|
command = `git clone https://gitea.microgg.cn/ctrlcvs/xiaoyao_plus.git "${resPath}/xiaoyao-plus/"`
|
2024-09-18 08:47:02 +08:00
|
|
|
|
// command = `git clone https://gitee.com/Ctrlcvs/xiaoyao-plus.git "${resPath}/xiaoyao-plus/"`;\n此链接为gitee图床,因仓库过大已被封禁
|
|
|
|
|
// command = `git clone https://github.com/ctrlcvs/xiaoyao_plus.git "${resPath}/xiaoyao-plus/"`;\n此链接为gitub图床,如异常请请求多次
|
2022-06-22 12:51:47 +08:00
|
|
|
|
e.reply("开始尝试安装图鉴加量包,可能会需要一段时间,请耐心等待~");
|
|
|
|
|
exec(command, function(error, stdout, stderr) {
|
|
|
|
|
if (error) {
|
|
|
|
|
e.reply("角色图片加量包安装失败!\nError code: " + error.code + "\n" + error.stack + "\n 请稍后重试。");
|
|
|
|
|
} else {
|
|
|
|
|
e.reply("角色图片加量包安装成功!您后续也可以通过 #图鉴更新 命令来更新图像");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return true;
|
2022-06-17 14:12:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let timer;
|
|
|
|
|
|
|
|
|
|
export async function updateMiaoPlugin(e) {
|
2022-06-22 12:51:47 +08:00
|
|
|
|
if (!await checkAuth(e)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
let isForce = e.msg.includes("强制");
|
|
|
|
|
let command = "git pull";
|
|
|
|
|
if (isForce) {
|
|
|
|
|
command = "git checkout . && git pull";
|
|
|
|
|
e.reply("正在执行强制更新操作,请稍等");
|
|
|
|
|
} else {
|
|
|
|
|
e.reply("正在执行更新操作,请稍等");
|
|
|
|
|
}
|
|
|
|
|
exec(command, {
|
|
|
|
|
cwd: `${_path}/plugins/xiaoyao-cvs-plugin/`
|
|
|
|
|
}, function(error, stdout, stderr) {
|
|
|
|
|
//console.log(stdout);
|
2022-07-08 21:04:58 +08:00
|
|
|
|
if (/Already up[ -]to[ -]date/.test(stdout)||stdout.includes("最新")) {
|
2022-06-22 12:51:47 +08:00
|
|
|
|
e.reply("目前已经是最新版图鉴插件了~");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (error) {
|
|
|
|
|
e.reply("图鉴插件更新失败!\nError code: " + error.code + "\n" + error.stack + "\n 请稍后重试。");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
e.reply("图鉴插件更新成功,尝试重新启动Yunzai以应用更新...");
|
|
|
|
|
timer && clearTimeout(timer);
|
|
|
|
|
redis.set("xiaoyao:restart-msg", JSON.stringify({
|
|
|
|
|
msg: "重启成功,新版图鉴插件已经生效",
|
|
|
|
|
qq: e.user_id
|
|
|
|
|
}), {
|
|
|
|
|
EX: 30
|
|
|
|
|
});
|
2022-06-28 23:21:06 +08:00
|
|
|
|
timer = setTimeout(function() {
|
|
|
|
|
let command = `npm run start`;
|
|
|
|
|
if (process.argv[1].includes("pm2")) {
|
|
|
|
|
command = `npm run restart`;
|
|
|
|
|
}
|
|
|
|
|
exec(command, function(error, stdout, stderr) {
|
|
|
|
|
if (error) {
|
|
|
|
|
e.reply("自动重启失败,请手动重启以应用新版图鉴插件。\nError code: " + error.code + "\n" +
|
|
|
|
|
error.stack + "\n");
|
|
|
|
|
Bot.logger.error('重启失败\n${error.stack}');
|
|
|
|
|
return true;
|
|
|
|
|
} else if (stdout) {
|
|
|
|
|
Bot.logger.mark("重启成功,运行已转为后台,查看日志请用命令:npm run log");
|
|
|
|
|
Bot.logger.mark("停止后台运行命令:npm stop");
|
|
|
|
|
process.exit();
|
|
|
|
|
}
|
|
|
|
|
})
|
2022-06-22 12:51:47 +08:00
|
|
|
|
}, 1000);
|
2022-06-17 14:12:23 +08:00
|
|
|
|
|
2022-06-22 12:51:47 +08:00
|
|
|
|
});
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2022-10-31 13:57:07 +08:00
|
|
|
|
|
|
|
|
|
export async function updateTemp(e){
|
|
|
|
|
if (!await checkAuth(e)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
let command = "";
|
|
|
|
|
let url=`${resPath}/BJT-Templet/`
|
|
|
|
|
if (fs.existsSync(url)) {
|
|
|
|
|
e.reply("开始尝试更新,请耐心等待~");
|
|
|
|
|
command = `git pull`;
|
|
|
|
|
let isForce = e.msg.includes("强制");
|
|
|
|
|
if (isForce) {
|
|
|
|
|
command = "git checkout . && git pull";
|
|
|
|
|
// command="git fetch --all && git reset --hard origin/master && git pull "
|
|
|
|
|
e.reply("正在执行强制更新操作,请稍等");
|
|
|
|
|
} else {
|
|
|
|
|
e.reply("正在执行更新操作,请稍等");
|
|
|
|
|
}
|
|
|
|
|
exec(command, {
|
|
|
|
|
cwd: url
|
|
|
|
|
}, function(error, stdout, stderr) {
|
|
|
|
|
//console.log(stdout);
|
|
|
|
|
if (/Already up to date/.test(stdout)||stdout.includes("最新")) {
|
|
|
|
|
e.reply("目前所有模板都已经是最新了~");
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
let numRet = /(\d*) files changed,/.exec(stdout);
|
|
|
|
|
if (numRet && numRet[1]) {
|
|
|
|
|
e.reply(`报告主人,更新成功,此次更新了${numRet[1]}个图片~`);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (error) {
|
|
|
|
|
e.reply("更新失败!\nError code: " + error.code + "\n" + error.stack + "\n 请稍后重试。");
|
|
|
|
|
} else {
|
|
|
|
|
e.reply("体力扩展包更新成功~");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
//@gitee @SunRyK @diqiushengwu @逍遥
|
|
|
|
|
command = `git clone https://gitee.com/SmallK111407/BJT-Template.git "${url}"`
|
|
|
|
|
// command = `git clone https://github.com/SmallK111407/BJT-Template.git "${resPath}/xiaoyao-plus/"`;\n此链接为github图床,如异常请请求多次
|
|
|
|
|
e.reply("开始尝试安装体力扩展包,可能会需要一段时间,请耐心等待~");
|
|
|
|
|
exec(command, function(error, stdout, stderr) {
|
|
|
|
|
if (error) {
|
|
|
|
|
e.reply("角色体力扩展包安装失败!\nError code: " + error.code + "\n" + error.stack + "\n 请稍后重试。");
|
|
|
|
|
} else {
|
|
|
|
|
e.reply("角色体力扩展包安装成功!您后续也可以通过 #图鉴模板更新 命令来更新图像");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return true;
|
2024-12-01 21:26:28 +08:00
|
|
|
|
}
|