diff --git a/.gitignore b/.gitignore index 6b14ce4..ff3ac18 100644 --- a/.gitignore +++ b/.gitignore @@ -142,3 +142,4 @@ redis yunzai /.idea/ /data/ +/temp/ diff --git a/README.md b/README.md index aae9ec8..399afed 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ * 使用icqq登录,防止oicq可能出现的低版本问题(如只需要此特性,可使用[Yunzai-V3](https://gitee.com/yoimiya-kokomi/Yunzai-Bot) ) * 基础功能会保持与Yunzai同步迭代更新,如只需原版Yunzai无需切换 -## Miao-Yunzai后续计划 +## Miao-Yunzai后续计划no 先刨坑,但也许会咕咕咕 diff --git a/lib/plugins/runtime.js b/lib/plugins/runtime.js index 28f1075..d7a0003 100644 --- a/lib/plugins/runtime.js +++ b/lib/plugins/runtime.js @@ -23,12 +23,6 @@ export default class Runtime { this._mysInfo = {} } - static async init (e) { - e.runtime = new Runtime(e) - e.user = await MysInfo.getNoteUser(e) - return e.runtime - } - get uid () { return this.user?.uid } @@ -61,6 +55,12 @@ export default class Runtime { return MysInfo } + static async init (e) { + e.runtime = new Runtime(e) + e.user = await MysInfo.getNoteUser(e) + return e.runtime + } + /** * 获取MysInfo实例 * @@ -128,7 +128,7 @@ export default class Runtime { path = paths.join('/') // 创建目录 const mkdir = (check) => { - let currDir = `${process.cwd()}/data` + let currDir = `${process.cwd()}/temp` for (let p of check.split('/')) { currDir = `${currDir}/${p}` if (!fs.existsSync(currDir)) { @@ -157,7 +157,8 @@ export default class Runtime { data = cfg.beforeRender({ data }) || data } // 保存模板数据 - if (process.argv.includes('web-debug')) { + console.log(process.argv) + if (process.argv.includes('dev')) { // debug下保存当前页面的渲染数据,方便模板编写与调试 // 由于只用于调试,开发者只关注自己当时开发的文件即可,暂不考虑app及plugin的命名冲突 let saveDir = mkdir(`ViewData/${plugin}`) diff --git a/lib/puppeteer/puppeteer.js b/lib/puppeteer/puppeteer.js index 629c574..1bdd1d2 100644 --- a/lib/puppeteer/puppeteer.js +++ b/lib/puppeteer/puppeteer.js @@ -37,7 +37,8 @@ class Puppeteer { this.html = {} this.watcher = {} - this.createDir('./data/html') + this.createDir('./temp') + this.createDir('./temp/html') } async initPupp () { @@ -166,11 +167,11 @@ class Puppeteer { /** 模板 */ dealTpl (name, data) { let { tplFile, saveId = name } = data - let savePath = `./data/html/${name}/${saveId}.html` + let savePath = `./temp/html/${name}/${saveId}.html` /** 读取html模板 */ if (!this.html[tplFile]) { - this.createDir(`./data/html/${name}`) + this.createDir(`./temp/html/${name}`) try { this.html[tplFile] = fs.readFileSync(tplFile, 'utf8') diff --git a/lib/tools/web.js b/lib/tools/web.js new file mode 100644 index 0000000..aedb808 --- /dev/null +++ b/lib/tools/web.js @@ -0,0 +1,76 @@ +import express from 'express' +import template from 'express-art-template' +import fs from 'fs' +import lodash from 'lodash' + +/* +* npm run app web-debug开启Bot后 +* 可另外通过 npm run web 开启浏览器调试 +* 访问 http://localhost:8000/ 即可看到对应页面 +* 页面内的资源需使用 {{_res_path}}来作为resources目录的根目录 +* 可编辑模板与页面查看效果 +* todo: 预览页面的热更 +* +* */ + +let app = express() + +let _path = process.cwd() + +app.engine('html', template) +app.set('views', _path + '/resources/') +app.set('view engine', 'art') +app.use(express.static(_path + '/resources')) +app.use('/plugins', express.static('plugins')) + +app.get('/', function (req, res) { + let pluginList = fs.readdirSync(_path + '/temp/ViewData/') || [] + let html = [ + '在npm run web-dev模式下触发截图消息后,可在下方选择页面进行调试', + '如果页面内资源路径不正确请使用{{_res_path}}作为根路径,对应之前的../../../../', + '可直接修改模板html或css刷新查看效果' + ] + let li = {} + for (let pIdx in pluginList) { + const plugin = pluginList[pIdx] + let fileList = fs.readdirSync(_path + `/temp/ViewData/${plugin}/`) || [] + for (let idx in fileList) { + let ret = /(.+)\.json$/.exec(fileList[idx]) + if (ret && ret[1]) { + let text = [plugin, ...ret[1].split('_')] + li[text.join('')] = (`
  • ${text.join(' / ')}
  • `) + } + } + } + res.send(html.join('
    ') + '') +}) + +app.get('/:page', function (req, res) { + let [plugin, app, page] = req.params.page.split('_') + if (plugin == 'favicon.ico') { + return res.send('') + } + let data = JSON.parse(fs.readFileSync(_path + `/temp/ViewData/${plugin}/${app}_${page}.json`, 'utf8')) + data = data || {} + data._res_path = '' + data._sys_res_path = data._res_path + + if (data._plugin) { + data._res_path = `/plugins/${data._plugin}/resources/` + data.pluResPath = data._res_path + } + let htmlPath = '' + if (data._plugin === 'genshin') { + htmlPath = 'html/' + } + let tplPath = `${app}/${htmlPath}${page}/${page}.html` + if (data._plugin) { + tplPath = `../plugins/${data._plugin}/resources/${htmlPath}/${app}/${page}.html` + } else if (data._no_type_path) { + tplPath = `${app}/${page}.html` + } + res.render(tplPath, data) +}) + +app.listen(8000) +console.log('页面服务已启动,触发消息图片后访问 http://localhost:8000/ 调试页面') diff --git a/package.json b/package.json index 9e40ddb..f94d745 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,11 @@ "type": "module", "scripts": { "app": "node app.js", + "web-debug": "node app.js --web-debug", + "dev": "node app.js dev", + "web": "node ./lib/tools/web.js", "test": "node ./lib/tools/test.js", "login": "node app.js login", - "dev": "node app.js dev", "start": "pm2 start ./config/pm2/pm2.json", "stop": "pm2 stop ./config/pm2/pm2.json", "restart": "pm2 restart ./config/pm2/pm2.json", diff --git a/plugins/genshin/apps/material.js b/plugins/genshin/apps/material.js index bceb353..2b7f87c 100644 --- a/plugins/genshin/apps/material.js +++ b/plugins/genshin/apps/material.js @@ -21,8 +21,8 @@ export class material extends plugin { ] }) - this.path = './data/material_友人A' - this.pathOther = './data/material_other' + this.path = './temp/material/友人A' + this.pathOther = './temp/material/other' this.url = 'https://bbs-api.mihoyo.com/post/wapi/getPostFullInCollection?&gids=2&order_type=2&collection_id=' this.collection_id = [428421, 1164644, 1362644] @@ -34,11 +34,10 @@ export class material extends plugin { /** 初始化创建配置文件 */ async init () { - if (!fs.existsSync(this.path)) { - fs.mkdirSync(this.path) - } - if (!fs.existsSync(this.pathOther)) { - fs.mkdirSync(this.pathOther) + for (let dir of ['./temp', './temp/material', this.path, this.pathOther]) { + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir) + } } } diff --git a/plugins/genshin/apps/strategy.js b/plugins/genshin/apps/strategy.js index 26abcfd..096dfbe 100644 --- a/plugins/genshin/apps/strategy.js +++ b/plugins/genshin/apps/strategy.js @@ -41,7 +41,7 @@ export class strategy extends plugin { this.set = gsCfg.getConfig('mys', 'set') - this.path = './data/strategy' + this.path = './temp/strategy' this.url = 'https://bbs-api.mihoyo.com/post/wapi/getPostFullInCollection?&gids=2&order_type=2&collection_id=' this.collection_id = [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13c33b2..2303aa6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,6 +63,12 @@ importers: express: 4.18.1 express-art-template: 1.0.1_art-template@4.13.2 + plugins/miao-plugin: + specifiers: + image-size: ^1.0.2 + dependencies: + image-size: registry.npmmirror.com/image-size/1.0.2 + packages: /@eslint/eslintrc/1.3.0: @@ -441,7 +447,7 @@ packages: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 - inherits: 2.0.4 + inherits: registry.npmmirror.com/inherits/2.0.4 readable-stream: 3.6.0 dev: false @@ -1533,7 +1539,7 @@ packages: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 - inherits: 2.0.4 + inherits: registry.npmmirror.com/inherits/2.0.4 minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 @@ -1601,7 +1607,7 @@ packages: engines: {node: '>= 0.8'} dependencies: depd: 2.0.0 - inherits: 2.0.4 + inherits: registry.npmmirror.com/inherits/2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 @@ -1661,9 +1667,6 @@ packages: once: 1.4.0 wrappy: 1.0.2 - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: false @@ -2622,7 +2625,7 @@ packages: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} dependencies: core-util-is: 1.0.3 - inherits: 2.0.4 + inherits: registry.npmmirror.com/inherits/2.0.4 isarray: 0.0.1 string_decoder: 0.10.31 dev: false @@ -2631,7 +2634,7 @@ packages: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: - inherits: 2.0.4 + inherits: registry.npmmirror.com/inherits/2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 dev: false @@ -3000,7 +3003,7 @@ packages: bl: 4.1.0 end-of-stream: 1.4.4 fs-constants: 1.0.0 - inherits: 2.0.4 + inherits: registry.npmmirror.com/inherits/2.0.4 readable-stream: 3.6.0 dev: false @@ -3604,7 +3607,6 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz} name: inherits version: 2.0.4 - dev: false registry.npmmirror.com/jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz}