Compare commits

...

8 Commits

Author SHA1 Message Date
cd6a2023dc v0.9.7 2020-09-25 10:13:59 +08:00
498b0ee017 fix: config inject error
Signed-off-by: MiaoWoo <admin@yumc.pw>
2020-09-25 10:12:28 +08:00
9bfaf984c1 v0.9.6 2020-09-24 19:26:04 +08:00
3c33ebf4e6 feat: add sender check & add prun subcommand
Signed-off-by: MiaoWoo <admin@yumc.pw>
2020-09-24 18:36:53 +08:00
8af69c98f3 refactor: plugin system & config manager
Signed-off-by: MiaoWoo <admin@yumc.pw>
2020-09-24 18:36:10 +08:00
72277f4d1a v0.9.5 2020-09-24 15:36:45 +08:00
d85f75ba1f fix: plugin bug
Signed-off-by: MiaoWoo <admin@yumc.pw>
2020-09-24 15:32:05 +08:00
ed14d317f4 fix: command tab complate error
Signed-off-by: MiaoWoo <admin@yumc.pw>
2020-09-24 15:27:34 +08:00
27 changed files with 160 additions and 116 deletions

View File

@@ -1,5 +1,5 @@
{
"version": "0.9.4",
"version": "0.9.7",
"useWorkspaces": true,
"npmClient": "yarn",
"packages": [

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/amqp",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript amqp package",
"keywords": [
"miaoscript",
@@ -19,7 +19,7 @@
"test": "echo \"Error: run tests from root\" && exit 1"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/common": "^0.9.4",
"@ccms/container": "^0.9.4"
},

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/api",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript api package",
"keywords": [
"miaoscript",

View File

@@ -13,7 +13,7 @@ export namespace command {
*/
on(plugin: plugin.Plugin, name: string, exec: { cmd: Function, tab?: Function }) {
var cmd = this.create(plugin, name)
if (!cmd) { throw Error("") }
if (!cmd) { throw Error(`Plugin ${plugin.description.name} can't create Command ${name}!`) }
console.debug(i18n.translate("ms.api.command.register", { plugin: plugin.description.name, name, cmd }))
if (exec.cmd && typeof exec.cmd === "function") {
this.onCommand(plugin, cmd, exec.cmd)

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/bukkit",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript bukkit package",
"keywords": [
"miaoscript",
@@ -25,7 +25,7 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/common": "^0.9.4",
"@ccms/container": "^0.9.4"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/bungee",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript bungee package",
"keywords": [
"miaoscript",
@@ -25,7 +25,7 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/common": "^0.9.4",
"@ccms/container": "^0.9.4"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/core",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript api package",
"keywords": [
"miaoscript",
@@ -24,7 +24,7 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/container": "^0.9.4"
},
"gitHead": "781524f83e52cad26d7c480513e3c525df867121"

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/database",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript database package",
"keywords": [
"miaoscript",
@@ -25,7 +25,7 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/container": "^0.9.4"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/keyvalue",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript keyvalue package",
"keywords": [
"miaoscript",
@@ -19,7 +19,7 @@
"test": "echo \"Error: run tests from root\" && exit 1"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/common": "^0.9.4",
"@ccms/container": "^0.9.4"
},

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/nukkit",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript nukkit package",
"keywords": [
"miaoscript",
@@ -25,7 +25,7 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/common": "^0.9.4",
"@ccms/container": "^0.9.4"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/plugin",
"version": "0.9.4",
"version": "0.9.7",
"description": "MiaoScript api package",
"keywords": [
"miaoscript",
@@ -25,7 +25,7 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/common": "^0.9.4",
"@ccms/container": "^0.9.4",
"@ccms/i18n": "^0.9.4",

View File

@@ -1,34 +1,34 @@
import { command, plugin, server } from '@ccms/api'
import { provideSingleton, inject } from '@ccms/container'
import { provideSingleton, inject, Autowired } from '@ccms/container'
import { getPluginCommandMetadata, getPluginTabCompleterMetadata } from './utils'
@provideSingleton(PluginCommandManager)
export class PluginCommandManager {
@inject(server.ServerChecker)
private ServerChecker: server.ServerChecker
@inject(command.Command)
@Autowired()
private CommandManager: command.Command
@Autowired()
private ServerChecker: server.ServerChecker
constructor() {
process.on('plugin.before.enable', (plugin: plugin.Plugin) => this.registryCommand(plugin))
process.on('plugin.after.disable', (plugin: plugin.Plugin) => this.unregistryCommand(plugin))
process.on('plugin.before.enable', this.registryCommand.bind(this))
process.on('plugin.after.disable', this.unregistryCommand.bind(this))
}
private registryCommand(pluginInstance: plugin.Plugin) {
let cmds = getPluginCommandMetadata(pluginInstance)
let tabs = getPluginTabCompleterMetadata(pluginInstance)
for (const cmd of cmds) {
let tab = tabs.get(cmd.name)
if (!this.ServerChecker.check(cmd.servers)) {
console.debug(`[${pluginInstance.description.name}] ${cmd.target.constructor.name} incompatible command ${cmd.name} server(${cmd.servers}) ignore.`)
continue
}
let exec = {
cmd: pluginInstance[cmd.executor].bind(pluginInstance),
tab: tab ? pluginInstance[tab.executor].bind(pluginInstance) : undefined
}
for (let command of [cmd.name, ...cmd.alias]) {
this.CommandManager.on(pluginInstance, command, exec)
this.CommandManager.on(pluginInstance, command, {
cmd: pluginInstance[cmd.executor].bind(pluginInstance),
tab: tabs.has(command) ?
pluginInstance[tabs.get(command).executor].bind(pluginInstance) :
console.debug(`[${pluginInstance.description.name}] command ${cmd.name} is not registry tabCompleter`)
})
}
}
}

View File

@@ -1,6 +1,9 @@
import * as yaml from 'js-yaml'
import * as fs from '@ccms/common/dist/fs'
import { plugin } from '@ccms/api'
import { provideSingleton } from '@ccms/container'
import { interfaces } from './interfaces'
import { getPluginConfigMetadata } from './utils'
export interface PluginConfigLoader {
@@ -13,7 +16,7 @@ export class YamlPluginConfig implements PluginConfigLoader {
return yaml.safeLoad(content)
}
dump(variable: any): string {
return yaml.safeDump(variable, { skipInvalid: true })
return yaml.safeDump(variable, { skipInvalid: true, lineWidth: 120 })
}
}
@@ -22,63 +25,68 @@ export class JsonPluginConfig implements PluginConfigLoader {
return JSON.parse(content)
}
dump(variable: any): string {
return JSON.stringify(variable)
return JSON.stringify(variable, undefined, 4)
}
}
const configLoaderMap = new Map<string, PluginConfigLoader>()
@provideSingleton(PluginConfigManager)
export class PluginConfigManager {
private configLoaderMap = new Map<string, PluginConfigLoader>()
export function getConfigLoader(format: string) {
if (!configLoaderMap.has(format)) { throw new Error(`Unsupport config format ${format} !`) }
return configLoaderMap.get(format)
}
constructor() {
this.configLoaderMap.set("json", new JsonPluginConfig())
let yaml = new YamlPluginConfig()
this.configLoaderMap.set("yml", yaml)
this.configLoaderMap.set("yaml", yaml)
process.on('plugin.before.load', this.loadConfig.bind(this))
process.on('plugin.after.disable', this.saveConfig.bind(this))
}
function loadConfig(plugin: plugin.Plugin) {
let configs = getPluginConfigMetadata(plugin)
for (let [_, config] of configs) {
try {
let configFile = fs.concat(fs.file(plugin.description.loadMetadata.file).parent, plugin.description.name, config.name + '.' + config.format)
let configFactory = getConfigLoader(config.format)
if (!fs.exists(configFile)) {
base.save(configFile, configFactory.dump(plugin[config.variable]))
console.i18n("ms.plugin.manager.config.save.default", { plugin: plugin.description.name, name: config.name, format: config.format })
} else {
Object.defineProperty(plugin, config.variable, { value: configFactory.load(base.read(configFile)) })
plugin[config.variable].save = () => {
let result = configFactory.dump(plugin[config.variable])
base.save(configFile, result)
console.debug(`[${plugin.description.name}] Save Config ${config.variable} to file ${configFile} result ${result}`)
getConfigLoader(format: string) {
if (!this.configLoaderMap.has(format)) { throw new Error(`Unsupport config format ${format} !`) }
return this.configLoaderMap.get(format)
}
loadConfig(plugin: plugin.Plugin) {
let configs = getPluginConfigMetadata(plugin)
for (let [_, config] of configs) {
try {
config.file = fs.concat(fs.file(plugin.description.loadMetadata.file).parent, plugin.description.name, config.filename)
let configLoader = this.getConfigLoader(config.format)
if (!fs.exists(config.file)) {
base.save(config.file, configLoader.dump(plugin[config.variable]))
console.i18n("ms.plugin.manager.config.save.default", { plugin: plugin.description.name, name: config.name, format: config.format })
} else {
Object.defineProperty(plugin, config.variable, { value: configLoader.load(base.read(config.file)) })
plugin[config.variable].save = () => this.saveConfig0(plugin, config)
console.debug(`[${plugin.description.name}] Load Config ${config.variable} from file ${config.file} =>\n${JSON.stringify(plugin[config.variable], undefined, 4)}`)
}
console.debug(`[${plugin.description.name}] Load Config ${config.variable} from file ${configFile} result ${JSON.stringify(plugin[config.variable])}`)
} catch (error) {
console.i18n("ms.plugin.manager.config.load.error", { plugin: plugin.description.name, name: config.name, format: config.format, error })
console.ex(error)
}
} catch (error) {
console.i18n("ms.plugin.manager.config.load.error", { plugin: plugin.description.name, name: config.name, format: config.format, error })
console.ex(error)
}
}
}
function saveConfig(plugin: plugin.Plugin) {
let configs = getPluginConfigMetadata(plugin)
for (let [_, config] of configs) {
saveConfig(plugin: plugin.Plugin) {
let configs = getPluginConfigMetadata(plugin)
for (let [_, config] of configs) {
this.saveConfig0(plugin, config)
}
}
private saveConfig0(plugin: plugin.Plugin, metadata: interfaces.ConfigMetadata) {
try {
let configFile = fs.concat(fs.file(plugin.description.loadMetadata.file).parent, plugin.description.name, config.name + '.' + config.format)
let configFactory = getConfigLoader(config.format)
if (!config.readonly) { base.save(configFile, configFactory.dump(plugin[config.variable])) }
if (metadata.readonly) { console.debug(`[${plugin.description.name}] Skip Save Config ${metadata.variable} Because it's readonly!`) }
metadata.file = fs.concat(fs.file(plugin.description.loadMetadata.file).parent, plugin.description.name, metadata.filename)
let result = this.getConfigLoader(metadata.format).dump(plugin[metadata.variable])
base.save(metadata.file, result)
console.debug(`[${plugin.description.name}] Save Config ${metadata.variable} to file ${metadata.file} =>\n${result}`)
return true
} catch (error) {
console.i18n("ms.plugin.manager.config.save.error", { plugin: plugin.description.name, name: config.name, format: config.format, error })
console.i18n("ms.plugin.manager.config.save.error", { plugin: plugin.description.name, name: metadata.name, format: metadata.format, error })
console.ex(error)
return false
}
}
}
function init() {
configLoaderMap.set("json", new JsonPluginConfig())
let yaml = new YamlPluginConfig()
configLoaderMap.set("yml", yaml)
configLoaderMap.set("yaml", yaml)
process.on('plugin.before.load', loadConfig)
process.on('plugin.after.load', saveConfig)
}
init()

View File

@@ -1,6 +1,6 @@
export const METADATA_KEY = {
plugin: Symbol.for("@ccms/plugin:plugin"),
souece: Symbol.for("@ccms/plugin:souece"),
source: Symbol.for("@ccms/plugin:source"),
cmd: Symbol.for("@ccms/plugin:cmd"),
tab: Symbol.for("@ccms/plugin:tab"),
listener: Symbol.for("@ccms/plugin:listener"),
@@ -10,4 +10,4 @@ export const METADATA_KEY = {
enable: Symbol.for("@ccms/plugin:stage:enable"),
disable: Symbol.for("@ccms/plugin:stage:disable")
}
};
}

View File

@@ -19,7 +19,7 @@ export function plugin(metadata: pluginApi.PluginMetadata | any) {
Reflect.defineMetadata(METADATA_KEY.plugin, previousMetadata, Reflect)
const previousSources: Map<string, pluginApi.PluginMetadata> = getPluginSources()
previousSources.set(metadata.source.toString(), metadata)
Reflect.defineMetadata(METADATA_KEY.souece, previousSources, Reflect)
Reflect.defineMetadata(METADATA_KEY.source, previousSources, Reflect)
}
}
@@ -77,6 +77,7 @@ export function config(metadata: interfaces.ConfigMetadata = {}) {
metadata.variable = key
metadata.version = metadata.version ?? 1
metadata.format = metadata.format ?? 'yml'
metadata.filename = metadata.filename ?? metadata.name + '.' + metadata.format
let previousMetadata = getPluginConfigMetadata(target)
previousMetadata.set(metadata.name, metadata)
Reflect.defineMetadata(METADATA_KEY.config, previousMetadata, target.constructor)

View File

@@ -1,17 +1,21 @@
import { event, plugin, server } from '@ccms/api'
import { provideSingleton, postConstruct, inject } from '@ccms/container'
import { provideSingleton, Autowired } from '@ccms/container'
import { getPluginListenerMetadata } from './utils'
@provideSingleton(PluginEventManager)
export class PluginEventManager {
@inject(server.ServerChecker)
private ServerChecker: server.ServerChecker
@inject(event.Event)
@Autowired()
private EventManager: event.Event
@Autowired()
private ServerChecker: server.ServerChecker
constructor() {
process.on('plugin.before.enable', (plugin: plugin.Plugin) => this.registryListener(plugin))
process.on('plugin.after.disable', (plugin: plugin.Plugin) => this.unregistryListener(plugin))
process.on('plugin.before.enable', this.registryListener.bind(this))
process.on('plugin.after.disable', this.unregistryListener.bind(this))
}
mapEventName() {
return this.EventManager.mapEventName().toFixed(0)
}
private registryListener(pluginInstance: plugin.Plugin) {

View File

@@ -75,5 +75,13 @@ export namespace interfaces {
* 是否为只读(关闭时将不会自动保存)
*/
readonly?: boolean
/**
* 配置文件名称
*/
filename?: string
/**
* 配置文件全路径
*/
file?: any
}
}

View File

@@ -1,5 +1,5 @@
import { plugin, server } from "@ccms/api"
import { inject, ContainerInstance, Container, provideSingletonNamed } from "@ccms/container"
import { inject, ContainerInstance, Container, provideSingletonNamed, Autowired } from "@ccms/container"
import { interfaces } from "../interfaces"
import { getPluginStageMetadata, getPluginSources } from "../utils"
@@ -11,7 +11,7 @@ export class IocLoader implements plugin.PluginLoader {
type: string = LOADER_TYPE_NAME
@inject(ContainerInstance)
private container: Container
@inject(server.ServerChecker)
@Autowired()
private serverChecker: server.ServerChecker
private pluginMetadataMap: Map<string, plugin.PluginMetadata>
@@ -69,7 +69,7 @@ export class IocLoader implements plugin.PluginLoader {
console.i18n('ms.plugin.manager.build.duplicate', { exists: pluginInstance.description.source, source: metadata.source })
}
this.container.rebind(plugin.Plugin).to(metadata.target).inSingletonScope().whenTargetNamed(metadata.name)
} catch{
} catch {
this.container.bind(plugin.Plugin).to(metadata.target).inSingletonScope().whenTargetNamed(metadata.name)
}
}

View File

@@ -1,12 +1,13 @@
import i18n from '@ccms/i18n'
import { plugin, server, event } from '@ccms/api'
import { inject, provideSingleton, Container, ContainerInstance } from '@ccms/container'
import { inject, provideSingleton, Container, ContainerInstance, Autowired } from '@ccms/container'
import './config'
import { interfaces } from './interfaces'
import { PluginTaskManager } from './task'
import { PluginEventManager } from './event'
import { PluginCommandManager } from './command'
import { PluginConfigManager } from './config'
const Thread = Java.type('java.lang.Thread')
@@ -18,16 +19,17 @@ export class PluginManagerImpl implements plugin.PluginManager {
private pluginInstance: any
@inject(server.ServerType)
private serverType: string
@inject(event.Event)
private EventManager: event.Event
@inject(server.ServerChecker)
@Autowired()
private serverChecker: server.ServerChecker
@inject(PluginTaskManager)
@Autowired()
private taskManager: PluginTaskManager
@inject(PluginEventManager)
@Autowired()
private eventManager: PluginEventManager
@inject(PluginCommandManager)
@Autowired()
private configManager: PluginConfigManager
@Autowired()
private commandManager: PluginCommandManager
private initialized: boolean = false
@@ -48,6 +50,7 @@ export class PluginManagerImpl implements plugin.PluginManager {
// ignore unused
this.taskManager
this.eventManager
this.configManager
this.commandManager
}
@@ -55,7 +58,7 @@ export class PluginManagerImpl implements plugin.PluginManager {
if (this.pluginInstance === undefined) { throw new Error("Can't found Plugin Instance!") }
if (this.initialized !== true) {
console.i18n('ms.plugin.initialize', { plugin: this.pluginInstance, loader: Thread.currentThread().contextClassLoader })
console.i18n('ms.plugin.event.map', { count: this.EventManager.mapEventName().toFixed(0), type: this.serverType })
console.i18n('ms.plugin.event.map', { count: this.eventManager.mapEventName(), type: this.serverType })
let pluginScanner = this.container.getAll<plugin.PluginScanner>(plugin.PluginScanner)
pluginScanner.forEach((scanner) => {
console.debug(`loading plugin sacnner ${scanner.type}...`)

View File

@@ -1,9 +1,9 @@
import { plugin, task } from '@ccms/api'
import { provideSingleton, inject } from '@ccms/container'
import { provideSingleton, Autowired } from '@ccms/container'
@provideSingleton(PluginTaskManager)
export class PluginTaskManager {
@inject(task.TaskManager)
@Autowired()
private taskManager: task.TaskManager
constructor() {

View File

@@ -14,7 +14,7 @@ function getPlugin(name: string) {
function getPluginSources() {
let pluginSources: Map<string, plugin.PluginMetadata> = Reflect.getMetadata(
METADATA_KEY.souece,
METADATA_KEY.source,
Reflect
) || pluginSourceCache
return pluginSources

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "@ccms/plugins",
"version": "0.9.4",
"version": "0.9.7",
"description": "MiaoScript plugins package",
"keywords": [
"miaoscript",
@@ -28,8 +28,8 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/container": "^0.9.4",
"@ccms/plugin": "^0.9.4"
"@ccms/plugin": "^0.9.7"
}
}

View File

@@ -197,7 +197,7 @@ export class MiaoReward extends interfaces.Plugin {
}
disable() {
this.server.getOnlinePlayers().forEach(p => this.checkAndClear(p))
Java.from(this.server.getOnlinePlayers()).forEach(p => this.checkAndClear(p))
this.channelOff?.off()
}
@@ -289,6 +289,7 @@ export class MiaoReward extends interfaces.Plugin {
cmdbind(sender: org.bukkit.entity.Player, server: boolean) {
if (this.bindCheck(sender, 60)) return
if (!sender.getItemInHand) { return this.logger.sender(sender, '§c手持物品检测异常 请检查是否在客户端执行命令!') }
if (sender.getItemInHand()?.getType() !== Material.AIR) { return this.logger.sender(sender, "§c请空手执行此命令!") }
if (server) {
if (!sender.isOp()) { return this.logger.sender(sender, '§4您没有配置服务器的权限!') }
@@ -300,6 +301,7 @@ export class MiaoReward extends interfaces.Plugin {
}
cmddraw(sender: org.bukkit.entity.Player, amount: number) {
if (!sender.getItemInHand) { return this.logger.sender(sender, '§c手持物品检测异常 请检查是否在客户端执行命令!') }
amount = Number(amount)
if (!Number.isInteger(amount)) {
return this.logger.sender(sender, '§4金额必须是数字!')
@@ -405,6 +407,7 @@ export class MiaoReward extends interfaces.Plugin {
cmdratio(sender: any, ratioStr: string, confirm: string) {
if (!sender.isOp()) { return this.logger.sender(sender, '§4你没有此命令的权限!') }
if (!sender.getItemInHand) { return this.logger.sender(sender, '§c手持物品检测异常 请检查是否在客户端执行命令!') }
let [ratio, mbr, msg] = this.ratio2string(ratioStr)
if (!confirm) {
return this.logger.sender(sender, [

View File

@@ -54,6 +54,7 @@ let langMap = {
'deploy.token.not.exists': '§4请先配置发布Token!',
'deploy.success': '§6插件 §b{name} §6版本 §3{version} §a发布成功! §6服务器返回: §a{msg}',
'deploy.fail': '§6插件 §b{name} §6版本 §3{version} §c发布失败! §6服务器返回: §c{msg}',
'prun.script': '§6指定插件:§b {name}',
'run.script': '§b运行脚本:§r {script}',
'run.result': '§a返回结果:§r {result}',
'run.noresult': '§4没有返回结果!',
@@ -387,14 +388,27 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
try {
let script = args.join(' ')
this.i18n(sender, 'run.script', { script })
let result = this.runCode(script, sender)
let result = this.runCode(script, sender, this)
this.i18n(sender, 'run.result', { result: result == undefined ? this.translate.translate('run.noresult') : result + '' })
} catch (ex) {
this.logger.sender(sender, this.logger.stack(ex))
}
}
private runCode(code: string, sender: any) {
cmdprun(sender: any, name: string, ...args: any[]) {
try {
if (!this.pluginManager.getPlugins().has(name)) { return this.logger.sender(sender, `§4插件 §c${name} §4不存在!`) }
let script = args.join(' ')
this.i18n(sender, 'prun.script', { name })
this.i18n(sender, 'run.script', { script })
let result = this.runCode(script, sender, this.pluginManager.getPlugins().get(name))
this.i18n(sender, 'run.result', { result: result == undefined ? this.translate.translate('run.noresult') : result + '' })
} catch (ex) {
this.logger.sender(sender, this.logger.stack(ex))
}
}
private runCode(code: string, sender: any, _this: any) {
let paramNames = [
'sender',
'reflect',
@@ -416,7 +430,7 @@ if (this.serverType == "spring") {
var df = base.getInstance().getAutowireCapableBeanFactory()
}
return ''+ eval(${JSON.stringify(code)});`)
return tfunc.apply(this, params) + ''
return tfunc.apply(_this, params) + ''
}
cmddeploy(sender: any, name: any) {
@@ -430,7 +444,7 @@ return ''+ eval(${JSON.stringify(code)});`)
version: plugin.description.version,
source: base.read((plugin.description.source || plugin.description.loadMetadata.file).toString())
})
this.i18n(sender, result.code == 200 ? 'deploy.success' : 'deploy.fail', { name, msg: result.msg })
this.i18n(sender, result.code == 200 ? 'deploy.success' : 'deploy.fail', { name, version: plugin.description.version, msg: result.msg })
}
}).async().submit()
}
@@ -445,8 +459,8 @@ return ''+ eval(${JSON.stringify(code)});`)
}
@Tab({ alias: ['gmspm', 'bungeemspm'] })
tabmspm(args: string | any[]) {
if (args.length === 1) { return ['list', 'install', 'update', 'upgrade', 'reload', 'restart', 'run', 'help', 'create', 'deploy'] }
tabmspm(_sender: any, _command: any, args: string | any[]) {
if (args.length === 1) { return ['list', 'install', 'update', 'upgrade', 'reload', 'restart', 'run', 'prun', 'help', 'create', 'deploy'] }
if (args.length > 1) {
switch (args[0]) {
case "list":
@@ -457,6 +471,9 @@ return ''+ eval(${JSON.stringify(code)});`)
if (args.length == 2) return ["system", ...this.pluginManager.getPlugins().keys()]
if (args.length == 3 && args[1] == "system") return ["confirm"]
return []
case "prun":
if (args.length == 2) return [...this.pluginManager.getPlugins().keys()]
return []
case "update":
case "load":
case "unload":

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/sponge",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript api package",
"keywords": [
"miaoscript",
@@ -25,7 +25,7 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/common": "^0.9.4",
"@ccms/container": "^0.9.4"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/spring",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript spring package",
"keywords": [
"miaoscript",
@@ -24,9 +24,9 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/common": "^0.9.4",
"@ccms/container": "^0.9.4",
"@ccms/database": "^0.9.4"
"@ccms/database": "^0.9.5"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@ccms/web",
"version": "0.9.4",
"version": "0.9.5",
"description": "MiaoScript web package",
"keywords": [
"miaoscript",
@@ -29,7 +29,7 @@
"typescript": "^4.0.3"
},
"dependencies": {
"@ccms/api": "^0.9.4",
"@ccms/api": "^0.9.5",
"@ccms/container": "^0.9.4"
}
}