@ccms/api
Version:
MiaoScript api package
148 lines • 6.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.command = void 0;
var tslib_1 = require("tslib");
var i18n_1 = require("@ccms/i18n");
var container_1 = require("@ccms/container");
var command;
(function (command_1) {
var Command = /** @class */ (function () {
function Command() {
}
/**
* 注册插件命令
* @param plugin 插件
* @param name 命令
* @param exec 执行器
*/
Command.prototype.on = function (plugin, name, exec) {
var cmd = this.create(plugin, name);
if (!cmd) {
throw Error("Plugin ".concat(plugin.description.name, " can't create Command ").concat(name, "!"));
}
console.debug(i18n_1.default.translate("ms.api.command.register", { plugin: plugin.description.name, name: name, cmd: cmd }));
if (exec.cmd && typeof exec.cmd === "function") {
this.onCommand(plugin, cmd, exec.cmd);
}
else {
throw Error(i18n_1.default.translate("ms.api.command.register.input.error", { exec: exec.cmd }));
}
if (exec.tab && typeof exec.tab === "function") {
this.onTabComplete(plugin, cmd, exec.tab);
}
};
Command.prototype.tabComplete = function (sender, input, index) {
throw new Error("Method not implemented.");
};
/**
* 取消命令注册
* @param plugin 插件
* @param name 命令
*/
Command.prototype.off = function (plugin, name) {
console.debug(i18n_1.default.translate("ms.api.command.unregister", { plugin: plugin.description.name, name: name }));
this.remove(plugin, name);
};
Command.prototype.setExecutor = function (plugin, command, executor) {
return function (sender, _, command, args) {
try {
var time = Date.now();
var result = executor(sender, command, Java.from(args));
var cost = Date.now() - time;
if (cost > global.ScriptSlowExecuteTime) {
console.i18n("ms.api.command.execute.slow", {
player: sender.name,
plugin: plugin.description.name,
command: command,
args: Java.from(args).join(' '),
cost: cost
});
}
return result;
}
catch (ex) {
console.i18n("ms.api.command.execute.error", {
player: sender.name,
plugin: plugin.description.name,
command: command,
args: Java.from(args).join(' '),
ex: ex
});
console.ex(ex);
if (sender.name != 'CONSOLE') {
console.sender(sender, tslib_1.__spreadArray([i18n_1.default.translate("ms.api.command.execute.error", {
player: sender.name,
plugin: plugin.description.name,
command: command,
args: Java.from(args).join(' '),
ex: ex
})], tslib_1.__read(console.stack(ex)), false));
}
return true;
}
};
};
Command.prototype.setTabCompleter = function (plugin, command, tabCompleter) {
var _this = this;
return function (sender, _, command, args) {
try {
var time = Date.now();
var token = args[args.length - 1];
var complete = tabCompleter(sender, command, Java.from(args)) || [];
var result = _this.copyPartialMatches(complete, token);
var cost = Date.now() - time;
if (cost > global.ScriptSlowExecuteTime) {
console.i18n("ms.api.command.tab.completer.slow", {
player: sender.name,
plugin: plugin.description.name,
command: command,
args: Java.from(args).join(' '),
cost: cost
});
}
return result;
}
catch (ex) {
console.i18n("ms.api.command.tab.completer.error", {
player: sender.name,
plugin: plugin.description.name,
command: command,
args: Java.from(args).join(' '),
ex: ex
});
console.ex(ex);
if (sender.name != 'CONSOLE') {
console.sender(sender, tslib_1.__spreadArray([
i18n_1.default.translate("ms.api.command.tab.completer.error", {
player: sender.name,
plugin: plugin.description.name,
command: command,
args: Java.from(args).join(' '),
ex: ex
})
], tslib_1.__read(console.stack(ex)), false));
}
return [];
}
};
};
Command.prototype.copyPartialMatches = function (complete, token, array) {
if (array === void 0) { array = []; }
if (!token) {
return complete;
}
complete.forEach(function (e) {
if (typeof e === "string" && e.toLowerCase().startsWith(token.toLowerCase())) {
array.push(e);
}
});
return array;
};
Command = tslib_1.__decorate([
(0, container_1.injectable)()
], Command);
return Command;
}());
command_1.Command = Command;
})(command = exports.command || (exports.command = {}));
//# sourceMappingURL=command.js.map