refactor: lib&core&mys

This commit is contained in:
ningmengchongshui 2024-06-09 01:31:31 +08:00
parent 0693ec7998
commit 2962a58d34
10 changed files with 81 additions and 129 deletions

3
.gitignore vendored
View File

@ -145,3 +145,6 @@ yunzai
/temp/ /temp/
/pnpm-lock.yaml /pnpm-lock.yaml
/entrypoint.sh /entrypoint.sh
dist

View File

@ -46,5 +46,7 @@ if (executablePath || arch === 'arm64' || arch === 'aarch64') {
) )
skipDownload = true skipDownload = true
} }
/**
* @type {import("puppeteer").Configuration}
*/
module.exports = { skipDownload, executablePath } module.exports = { skipDownload, executablePath }

View File

@ -1,4 +1,4 @@
# Miao-Yunzai v3 # Miao-Yunzai
这里是Miao-Yunzai V4 测试仓库, 这里是Miao-Yunzai V4 测试仓库,

View File

@ -13,6 +13,7 @@
"restart": "pm2 restart ./config/pm2/pm2.json", "restart": "pm2 restart ./config/pm2/pm2.json",
"ts:app": "ts-node src/main.ts", "ts:app": "ts-node src/main.ts",
"ts:login": "ts-node src/main.ts login", "ts:login": "ts-node src/main.ts login",
"ts:build": "rollup --config rollup.config.js",
"format": "prettier --write .", "format": "prettier --write .",
"prepare": "husky" "prepare": "husky"
}, },

20
rollup.config.js Normal file
View File

@ -0,0 +1,20 @@
import typescript from '@rollup/plugin-typescript'
/**
* @type {import("rollup").RollupOptions}
*/
export default [
{
input: 'src/main.ts',
output: {
// file: 'index.js',
dir: 'dist',
format: 'module',
sourcemap: false
},
plugins: [typescript()],
onwarn: (warning, warn) => {
if (warning.code === 'UNRESOLVED_IMPORT') return
warn(warning)
}
}
]

View File

@ -1,37 +1,22 @@
import lodash from 'lodash' import common from '../lib/common/common.js'
import fs from 'node:fs' import cfg from '../lib/config/config.js'
import Handler from '../lib/plugins/handler.js'
import {
gsCfg,
mysApi as MysApi,
mysInfo as MysInfo,
NoteUser,
MysUser
} from '../mys/index.js'
/** /**
* tudo * ********************
*/
import common from '../../lib/common/common.js'
import cfg from '../../lib/config/config.js'
import Handler from '../../lib/plugins/handler.js'
import puppeteer from '../../lib/puppeteer/puppeteer.js'
/**
* tudo
*
*/
import { Version } from './local.js'
/**
* tudo
*
*/
import gsCfg from '../../plugins/genshin/model/gsCfg.js'
//
import MysApi from '../../plugins/genshin/model/mys/mysApi.js'
import MysInfo from '../../plugins/genshin/model/mys/mysInfo.js'
import NoteUser from '../../plugins/genshin/model/mys/NoteUser.js'
import MysUser from '../../plugins/genshin/model/mys/MysUser.js'
/**
* *********************
* e进行重构的危险代码 * e进行重构的危险代码
* ********************
* tudo
*
*/ */
export default class Runtime { export default class Runtime {
e = null e = null
_mysInfo = null _mysInfo = null
@ -72,8 +57,11 @@ export default class Runtime {
return common return common
} }
/**
* @deprecated
*/
get puppeteer() { get puppeteer() {
return puppeteer return null
} }
get MysInfo() { get MysInfo() {
@ -102,12 +90,13 @@ export default class Runtime {
} }
/** /**
* *
*/ */
async initUser() { async initUser() {
let e = this.e let e = this.e
let user = await NoteUser.create(e) let user = await NoteUser.create(e)
if (user) { if (user) {
// 对象代理
e.user = new Proxy(user, { e.user = new Proxy(user, {
get(self, key, receiver) { get(self, key, receiver) {
let game = e.game let game = e.game
@ -123,6 +112,7 @@ export default class Runtime {
if (key === 'uidData') { if (key === 'uidData') {
return self.getUidData('', game) return self.getUidData('', game)
} }
// 不能将类型“symbol”分配给类型“string”。
if ( if (
[ [
'getUid', 'getUid',
@ -131,7 +121,7 @@ export default class Runtime {
'getCkUidList', 'getCkUidList',
'getUidMapList', 'getUidMapList',
'getGameDs' 'getGameDs'
].includes(key) ].includes(key as string)
) { ) {
return (_game, arg2) => { return (_game, arg2) => {
return self[key](_game || game, arg2) return self[key](_game || game, arg2)
@ -145,7 +135,7 @@ export default class Runtime {
'addRegUid', 'addRegUid',
'delRegUid', 'delRegUid',
'setMainUid' 'setMainUid'
].includes(key) ].includes(key as string)
) { ) {
return (uid, _game = '') => { return (uid, _game = '') => {
return self[key](uid, _game || game) return self[key](uid, _game || game)
@ -210,97 +200,9 @@ export default class Runtime {
} }
/** /**
* * @deprecated
* @param plugin plugin key
* @param path html文件路径plugin resources目录
* @param data
* @param cfg
* @param cfg.retType
* * default/true
* * msgIdmsg id
* * base64: 不自动发送图像base64数据
* @param cfg.beforeRender({data}) data数据
* @returns {Promise<boolean>}
*/ */
async render(plugin, path, data = {}, cfg = {}) { async render(plugin, path, data = {}, cfg = {}) {
// 处理传入的path return false
path = path.replace(/.html$/, '')
let paths = lodash.filter(path.split('/'), p => !!p)
path = paths.join('/')
// 创建目录
const mkdir = check => {
let currDir = `${process.cwd()}/temp`
for (let p of check.split('/')) {
currDir = `${currDir}/${p}`
if (!fs.existsSync(currDir)) {
fs.mkdirSync(currDir)
}
}
return currDir
}
mkdir(`html/${plugin}/${path}`)
// 自动计算pluResPath
let pluResPath = `../../../${lodash.repeat('../', paths.length)}plugins/${plugin}/resources/`
let miaoResPath = `../../../${lodash.repeat('../', paths.length)}plugins/miao-plugin/resources/`
const layoutPath =
process.cwd() + '/plugins/miao-plugin/resources/common/layout/'
/**
* tudo
* data重写data
*/
// 渲染data
data = {
sys: {
scale: 1
},
/** miao 相关参数 **/
copyright: `Created By Miao-Yunzai<span class="version">${Version.yunzai}</span> `,
_res_path: pluResPath,
_miao_path: miaoResPath,
_tpl_path: process.cwd() + '/plugins/miao-plugin/resources/common/tpl/',
defaultLayout: layoutPath + 'default.html',
elemLayout: layoutPath + 'elem.html',
...data,
/** 默认参数 **/
_plugin: plugin,
_htmlPath: path,
pluResPath,
tplFile: `./plugins/${plugin}/resources/${path}.html`,
saveId: data.saveId || data.save_id || paths[paths.length - 1],
pageGotoParams: {
waitUntil: 'networkidle2'
}
}
// 处理beforeRender
if (cfg.beforeRender) {
data = cfg.beforeRender({ data }) || data
}
// 保存模板数据
if (process.argv.includes('dev')) {
// debug下保存当前页面的渲染数据方便模板编写与调试
// 由于只用于调试开发者只关注自己当时开发的文件即可暂不考虑app及plugin的命名冲突
let saveDir = mkdir(`ViewData/${plugin}`)
let file = `${saveDir}/${data._htmlPath.split('/').join('_')}.json`
fs.writeFileSync(file, JSON.stringify(data))
}
// 截图
let base64 = await puppeteer.screenshot(`${plugin}/${path}`, data)
if (cfg.retType === 'base64') {
return base64
}
let ret = true
if (base64) {
if (cfg.recallMsg) {
ret = await this.e.reply(base64, false, {})
} else {
ret = await this.e.reply(base64)
}
}
return cfg.retType === 'msgId' ? ret : true
} }
} }

View File

@ -2,5 +2,4 @@ import UserDB from './UserDB.js'
import MysUserDB from './MysUserDB.js' import MysUserDB from './MysUserDB.js'
import UserGameDB from './UserGameDB.js' import UserGameDB from './UserGameDB.js'
import { sequelize } from './BaseModel.js' import { sequelize } from './BaseModel.js'
export { UserDB, MysUserDB, UserGameDB, sequelize } export { UserDB, MysUserDB, UserGameDB, sequelize }

6
src/mys/dev.md Normal file
View File

@ -0,0 +1,6 @@
mys 存在循环引用
(!) Circular dependencies
src/mys/apiTool.ts -> src/mys/mysApi.ts -> src/mys/apiTool.ts
src/mys/gsCfg.ts -> src/mys/mysInfo.ts -> src/mys/gsCfg.ts
src/mys/NoteUser.ts -> src/mys/MysUser.ts -> src/mys/NoteUser.ts

View File

@ -1 +1,20 @@
export {} import apiTool from './apiTool.js'
import BaseModel from './BaseModel.js'
import DailyCache from './DailyCache.js'
import gsCfg from './gsCfg.js'
import mysApi from './mysApi.js'
import mysInfo from './mysInfo.js'
import MysUser from './MysUser.js'
import MysUtil from './MysUtil.js'
import NoteUser from './NoteUser.js'
export {
apiTool,
BaseModel,
DailyCache,
gsCfg,
mysApi,
mysInfo,
MysUser,
MysUtil,
NoteUser
}

View File

@ -1,7 +1,7 @@
import MysApi from './mysApi.js' import MysApi from './mysApi.js'
// tudo // tudo
import GsCfg from '../gsCfg.js' import GsCfg from './gsCfg.js'
import lodash from 'lodash' import lodash from 'lodash'
import NoteUser from './NoteUser.js' import NoteUser from './NoteUser.js'