diff --git a/src/core/plugins.loader.ts b/src/core/plugins.loader.ts index 95d6e33..aaa55ae 100644 --- a/src/core/plugins.loader.ts +++ b/src/core/plugins.loader.ts @@ -152,18 +152,11 @@ class PluginsLoader { */ #importPlugin = async (file, packageErr?: any) => { try { - // 应该去去印插件的路径。 - // 才能确定是谁的插件 - const app = await import(`file://${join(process.cwd(), file.path)}`) - const pluginArray = [] - for (const key in app.apps) { - // console.log('key', key) pluginArray.push(this.loadPlugin(file, app.apps[key], key)) } - for (const i of await Promise.allSettled(pluginArray)) if (i?.status && i.status != 'fulfilled') { logger.error(`加载插件错误:${logger.red(file.name)}`) diff --git a/src/core/plugins/runtime.ts b/src/core/plugins/runtime.ts index 57114d6..7c8aa7a 100644 --- a/src/core/plugins/runtime.ts +++ b/src/core/plugins/runtime.ts @@ -1,7 +1,5 @@ -import * as common from '../../utils/common.js' -import cfg from '../../config/config.js' -import Handler from './handler.js' - +import lodash from 'lodash' +import fs from 'node:fs' import { gsCfg, mysApi as MysApi, @@ -9,21 +7,14 @@ import { NoteUser, MysUser } from '../../mys/index.js' - import puppeteer from '../../utils/puppeteer/puppeteer.js' - - -import lodash from 'lodash' -import fs from 'node:fs' +import * as common from '../../utils/common.js' +import cfg from '../../config/config.js' +import Handler from './handler.js' import { Version } from '../../miao.js' - /** - * ******************** - * 对e进行重构的危险代码 - * ******************** - * tudo - * 写法混乱,需要重构 + * @deprecated 已废弃 */ export default class Runtime { e = null @@ -121,7 +112,7 @@ export default class Runtime { */ static async init(e) { await MysInfo.initCache() - let runtime = new Runtime(e) + const runtime = new Runtime(e) e.runtime = runtime await runtime.initUser() return runtime @@ -239,7 +230,7 @@ export default class Runtime { /** * @deprecated 不符合架构设计,已废弃 - * @param plugin plugin key + * @param plugin_name plugin key * @param path html文件路径,相对于plugin resources目录 * @param data 渲染数据 * @param cfg 渲染配置 @@ -250,77 +241,91 @@ export default class Runtime { * @param cfg.beforeRender({data}) 可改写渲染的data数据 * @returns {Promise} */ - async render (plugin, path, data = {}, cfg = {}) { - // 处理传入的path - 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/' - // 渲染data - data = { - sys: { - scale: 1 - }, - /** miao 相关参数 **/ - copyright: `Created By Miao-Yunzai${Version.yunzai} `, - _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 + async render( + plugin_name: string, + path: string, + data: { + [key: string]: any + saveId?: any, + save_id?: any, + _htmlPath?: any, + } = {}, cfg: { + [key: string]: any + retType?: any, + recallMsg?: any + beforeRender?: any + } = {} + ) { + // 处理传入的path + 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_name}/${path}`) + // 自动计算pluResPath + let pluResPath = `../../../${lodash.repeat('../', paths.length)}plugins/${plugin_name}/resources/` + let miaoResPath = `../../../${lodash.repeat('../', paths.length)}plugins/miao-plugin/resources/` + const layoutPath = process.cwd() + '/plugins/miao-plugin/resources/common/layout/' + // 渲染data + data = { + sys: { + scale: 1 + }, + /** miao 相关参数 **/ + copyright: `Created By Miao-Yunzai${Version.yunzai} `, + _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_name, + _htmlPath: path, + pluResPath, + tplFile: `./plugins/${plugin_name}/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_name}`) + let file = `${saveDir}/${data._htmlPath.split('/').join('_')}.json` + fs.writeFileSync(file, JSON.stringify(data)) + } + // 截图 + let base64 = await puppeteer.screenshot(`${plugin_name}/${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 } -} +} \ No newline at end of file diff --git a/src/core/plugins/types.ts b/src/core/plugins/types.ts index e878722..8a0c5b1 100644 --- a/src/core/plugins/types.ts +++ b/src/core/plugins/types.ts @@ -1,28 +1,38 @@ import { type GroupMessage } from 'icqq' -// import { Client } from 'icqq' -// import { PrivateMessage } from 'oicq' +import Runtime from './runtime' +/** + * 消息事件体 + */ export interface EventType extends GroupMessage { /** - * 是否是主人 + * 是否是机器人主人 */ isMaster: boolean /** - * 是否是管理员 + * 是否是机器人管理员 */ // isAdmin: boolean; /** * 是否是群里 */ isGroup: boolean + /** + * 是否是群管理 + */ + // isGroupAdmin:boolean /** * 是私聊 */ - isPrivate?: any + isPrivate: boolean /** * 是频道 */ - isGuild?: any + isGuild: boolean + /** + * 用户名 + */ + user_id: number /** * 用户名 */ @@ -30,7 +40,7 @@ export interface EventType extends GroupMessage { /** * 用户头像 */ - user_avatar: string | null + user_avatar: string /** * 用户消息 */ @@ -52,9 +62,15 @@ export interface EventType extends GroupMessage { /** * 群头像 */ - group_avatar: string | null + group_avatar: string + /** - * + * @deprecated 已废弃 + */ + runtime: typeof Runtime.prototype + + /** + * @deprecated 已废弃 */ group: { is_owner: any; @@ -62,28 +78,30 @@ export interface EventType extends GroupMessage { getMemberMap: any; quit: any; mute_left: any - pickMember: any - - sendMsg: any }; /** + * @deprecated 已废弃 */ file: any; /** + * @deprecated 已废弃 */ bot: any; /** * + * @deprecated 已废弃 */ approve: any; /** * + * @deprecated 已废弃 */ member: any; /** * + * @deprecated 已废弃 */ logText: any; /** @@ -96,34 +114,41 @@ export interface EventType extends GroupMessage { isGs?: boolean /** * + * @deprecated 已废弃 */ self_id?: any /** * + * @deprecated 已废弃 */ game?: any /** * + * @deprecated 已废弃 */ detail_type?: any /** * + * @deprecated 已废弃 */ at?: any /** * + * @deprecated 已废弃 */ atBot: any; /** * + * @deprecated 已废弃 */ hasAlias?: any /** * + * @deprecated 已废弃 */ replyNew?: any /** - * + * @deprecated 已废弃 */ friend?: any }