UNPKG

yunzai-micro-plugin

Version:

Yunzai开发管理面板

267 lines (264 loc) 9.44 kB
import { readdirSync, statSync, existsSync } from 'fs'; import '../../../config/index.js'; import { botInfo, pluginInfo } from '../../../env.js'; import { join } from 'path'; import { pathToFileURL } from 'url'; import { getNestedProperty } from './tools.js'; import { Result } from '../../utils/result.js'; import { bot, notice, other, puppeteer, qq, redis, renderer, group } from './botCfgMap.js'; import { stdin, onebotv11 } from './protocolCfgMap.js'; import { userInfo } from './plugins/microCfgMap.js'; import Cfg from '../../../config/config.js'; import YamlHandler from '../../../config/yamlHandler.js'; class ConfigController { async getBotConfig(ctx) { const { name } = ctx.request.query; const botCfg = await Cfg.getBotConfig(name); const defCfg = { bot, notice, other, puppeteer, qq, redis, renderer }; let res; if (name == 'group') { for (const groupKey in botCfg) { if (!group[groupKey]) { group[groupKey] = group.default; } for (const key in botCfg[groupKey]) { if (group[groupKey].hasOwnProperty(key)) { group[groupKey][key].value = botCfg[groupKey][key]; } } res = group; } } else { for (const key in botCfg) { if (defCfg[name] && defCfg[name].hasOwnProperty(key)) { defCfg[name][key].value = botCfg[key]; } } res = defCfg[name]; } ctx.body = { code: 200, message: 'success', data: res }; } async setBotConfig(ctx) { const { name } = ctx.request.query; const data = ctx.request.body; const botCfg = new YamlHandler(join(botInfo.WORK_PATH, 'config', 'config', name + '.yaml')); const cfgJson = botCfg.jsonData; if (name == 'group') { for (const groupKey in data) { if (!cfgJson[groupKey]) { cfgJson[groupKey] = cfgJson.default; } for (const key in data[groupKey]) { botCfg.document.setIn([isNaN(Number(groupKey)) ? groupKey : Number(groupKey), key], data[groupKey][key].value); } botCfg.save(); } } else { for (const key in data) { if (cfgJson.hasOwnProperty(key)) { if (data[key].value === "") { data[key].value = null; } botCfg.set(key, data[key].value); } } botCfg.save(); } ctx.body = { code: 200, message: 'success', data: 'ok' }; } async getUserConfig(ctx) { const userCfg = (await Cfg.getConfig('server')).userInfo; const defCfg = userInfo; let res = []; for (const user of userCfg) { for (const key in user) { if (defCfg.hasOwnProperty(key)) { defCfg[key].value = user[key]; } } res.push(JSON.parse(JSON.stringify(defCfg))); } ctx.body = { code: 200, message: 'success', data: res }; } async setUserConfig(ctx) { const data = ctx.request.body; const serverCfg = new YamlHandler(join(pluginInfo.ROOT_PATH, 'config', 'config', 'server.yaml')); const originalUserInfo = (serverCfg.jsonData).userInfo; let userList = data.map((item) => item.username.value); originalUserInfo.forEach((user, index) => { if (!userList.includes(user.username)) { serverCfg.document.deleteIn(['userInfo', index]); } }); data.forEach((user, index) => { for (const key in user) { serverCfg.document.setIn(['userInfo', index, key], user[key].value); } }); serverCfg.save(); ctx.body = { code: 200, message: 'success', data: 'ok' }; } async getProtocolConfig(ctx) { const protocolCfg = Cfg.getConfig('protocol'); const defCfg = { stdin, onebotv11 }; for (const groupKey in protocolCfg) { for (const key in protocolCfg[groupKey]) { if (defCfg[groupKey].hasOwnProperty(key)) { defCfg[groupKey][key].value = protocolCfg[groupKey][key]; } } } ctx.body = { code: 200, message: 'success', data: defCfg }; } async setProtocolConfig(ctx) { const data = ctx.request.body; const protocolCfg = new YamlHandler(join(pluginInfo.ROOT_PATH, 'config', 'config', 'protocol.yaml')); for (const groupKey in data) { for (const key in data[groupKey]) { protocolCfg.document.setIn([groupKey, key], data[groupKey][key].value); } } protocolCfg.save(); ctx.body = { code: 200, message: 'success', data: protocolCfg }; } async getPluginsInfoList(ctx) { const { source } = ctx.request.query; const pluginInfoArr = []; if (source == 'guoba') { const pluginsPath = join(botInfo.WORK_PATH, 'plugins'); const packages = readdirSync(pluginsPath); for (let pkg of packages) { const pkgPath = join(pluginsPath, pkg); if (statSync(pkgPath).isDirectory()) { const guobaSupportPath = join(pkgPath, 'guoba.support.js'); if (existsSync(guobaSupportPath)) { const guobaCfg = await import(pathToFileURL(guobaSupportPath).toString()); const pkgCfg = await guobaCfg.supportGuoba(); pluginInfoArr.push(Object.assign(pkgCfg.pluginInfo || {}, { pluginName: pkg })); } } } } ctx.body = { code: 200, message: 'success', data: pluginInfoArr }; } async getPluginConfig(ctx) { const { pluginName, source } = ctx.request.query; let pluginCfg = { pluginInfo: {}, configInfo: { schemas: [{ field: 'nana', label: '呐呐~', bottomHelpMessage: '咪', component: 'InputTextArea' }], getConfigData: () => { }, setConfigData: (data, { Result }) => { console.log(data, Result); } }, }; let res = []; if (source == 'guoba') { const guobaSupportPath = join(botInfo.WORK_PATH, 'plugins', pluginName, 'guoba.support.js'); const { supportGuoba } = await import(pathToFileURL(guobaSupportPath).toString()); pluginCfg = await supportGuoba(); const cfgSets = await pluginCfg.configInfo.getConfigData(); res = pluginCfg.configInfo.schemas.map((cfg) => { if (cfg.field) { const NestedProperty = getNestedProperty(cfgSets, cfg.field); if (NestedProperty.isTrue) { return Object.assign(cfg, { value: NestedProperty.value }); } else { return cfg; } } else { return cfg; } }); } ctx.body = { code: 200, message: 'success', data: res }; } async setPluginConfig(ctx) { const { pluginName, source } = ctx.request.query; const data = ctx.request.body; let pluginCfg = { pluginInfo: {}, configInfo: { schemas: [{ field: 'nana', label: '呐呐~', bottomHelpMessage: '咪', component: 'InputTextArea' }], getConfigData: () => { }, setConfigData: (data, { Result }) => { console.log(data, Result); } }, }; const dataParams = {}; data.forEach(cfg => { if (('value' in cfg) && cfg.field) { dataParams[cfg.field] = cfg.value; } }); let res; if (source == 'guoba') { const guobaSupportPath = join(botInfo.WORK_PATH, 'plugins', pluginName, 'guoba.support.js'); const { supportGuoba } = await import(pathToFileURL(guobaSupportPath).toString()); pluginCfg = await supportGuoba(); res = await pluginCfg.configInfo.setConfigData(dataParams, { Result }); } ctx.body = { code: 200, message: res.message, data: res.httpStatus }; } } var ConfigController$1 = new ConfigController(); export { ConfigController$1 as default };