@kotori-bot/kotori-plugin-core
Version:
core plugin
227 lines (226 loc) • 9.04 kB
JavaScript
/**
* @Package @kotori-bot/kotori-plugin-core
* @Version 1.4.5
* @Author Hotaru <me@hotaru.icu>
* @Copyright 2024-2025 Hotaru. All rights reserved.
* @License BAN-ZHINESE-USING
* @Link https://github.com/kotorijs/kotori
* @Date 16:12:56
*/
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var src_exports = {};
__export(src_exports, {
lang: () => lang,
main: () => main
});
module.exports = __toCommonJS(src_exports);
var import_kotori_bot = require("kotori-bot");
const lang = [__dirname, "../locales"];
function main(ctx) {
ctx.on("before_command", (data) => {
const quick = data.session.quick.bind(data.session);
if (!(data.result instanceof import_kotori_bot.CommandError)) {
const { scope, access } = data.command.meta;
if (scope && scope !== "all" && data.session.type !== scope) {
quick("corei18n.template.scope");
data.cancel();
} else if (String(data.session.userId) !== String(data.session.api.adapter.config.master)) {
if (access === import_kotori_bot.UserAccess.ADMIN) {
quick("corei18n.template.no_access_admin");
data.cancel();
} else if (access === import_kotori_bot.UserAccess.MANGER && (data.session.type === import_kotori_bot.MessageScope.PRIVATE || data.session.type === import_kotori_bot.MessageScope.GROUP && !["owner", "admin"].includes(data.session.sender.role))) {
quick("corei18n.template.no_access_manger");
data.cancel();
}
}
return;
}
data.cancel();
const { value } = data.result;
switch (value.type) {
case "arg_error":
quick(["corei18n.template.args_error", [value.index, value.expected, value.reality]]);
break;
case "arg_few":
quick(["corei18n.template.args_few", [value.expected, value.reality]]);
break;
case "arg_many":
quick(["corei18n.template.args_many", [value.expected, value.reality]]);
break;
case "option_error":
quick(["corei18n.template.option_error", [value.target, value.expected, value.reality]]);
break;
case "syntax":
quick(["corei18n.template.syntax", [value.index, value.char]]);
break;
default:
}
});
ctx.on("command", ({ result, session }) => {
if (!(result instanceof import_kotori_bot.CommandError)) return;
const { value } = result;
const quick = session.quick.bind(session);
switch (value.type) {
case "unknown":
quick(["corei18n.template.unknown", [value.input]]);
break;
case "res_error":
quick(["corei18n.template.res_error", [value.error.message]]);
break;
case "num_error":
quick("corei18n.template.num_error");
break;
case "no_access_manger":
quick("corei18n.template.no_access_manger");
break;
case "no_access_admin":
quick("corei18n.template.no_access_admin");
break;
case "disable":
quick("corei18n.template.disable");
break;
case "exists":
quick(["corei18n.template.exists", [value.target]]);
break;
case "no_exists":
quick(["corei18n.template.no_exists", [value.target]]);
break;
case "error":
ctx.emit("error", value.error instanceof Error ? value.error : new import_kotori_bot.ModuleError(String(value.error)));
if (value.error instanceof import_kotori_bot.TsuError) {
quick(["corei18n.template.res_error", [value.error.message]]);
return;
}
if (value.error instanceof Error) {
quick(["corei18n.template.error", [`${value.error.name} ${value.error.message}`]]);
return;
}
if (typeof value.error === "object") {
quick(["corei18n.template.error", [JSON.stringify(value.error)]]);
return;
}
quick(["corei18n.template.error", [String(value.error)]]);
break;
case "data_error":
quick([`corei18n.template.data_error.${typeof value.target === "string" ? "options" : "args"}`, [value.target]]);
break;
default:
}
});
ctx.filter({
test: import_kotori_bot.FilterTestList.USER_ID,
operator: "==",
value: "114514"
}).command("core - core.descr.core").action((_, session) => {
const { config, baseDir, options } = session.api.adapter.ctx;
const botsLength = Array.from(ctx[import_kotori_bot.Symbols.bot].values()).map((set) => Array.from(set.values()).length).reduce((a, b) => a + b, 0);
return session.format("core.msg.core", {
lang: config.global.lang,
root: baseDir.root,
mode: options.mode,
modules: ctx[import_kotori_bot.Symbols.modules] ? ctx[import_kotori_bot.Symbols.modules].size : 0,
services: ctx[import_kotori_bot.Symbols.adapter].size,
bots: botsLength,
midwares: ctx[import_kotori_bot.Symbols.midware].size,
commands: ctx[import_kotori_bot.Symbols.command].size,
regexps: ctx[import_kotori_bot.Symbols.regexp].size
});
});
ctx.command("bot - core.descr.bot").action((_, session) => {
const { identity, platform, selfId, config, status } = session.api.adapter;
return session.format("core.msg.bot", {
identity,
lang: config.lang,
platform,
self_id: selfId,
create_time: session.i18n.time(status.createTime),
last_msg_time: status.lastMsgTime ? session.i18n.time(status.lastMsgTime) : "",
received_msg: status.receivedMsg,
sent_msg: status.sentMsg,
offline_times: status.offlineTimes
});
});
ctx.command("bots - core.descr.bots").action(
(_, session) => session.format("core.msg.bots", {
list: Array.from(ctx[import_kotori_bot.Symbols.bot].values()).map(
(bots) => Array.from(bots.values()).map(
({ adapter: { identity, platform, config, status } }) => session.format("core.msg.bots.list", {
identity,
lang: config.lang,
platform,
status: status.value
})
).join("")
).join("")
})
);
ctx.command("about - core.descr.about").alias("version").shortcut(["\u5C0F\u9E1F", "\u5C0F\u9CE5", "\u3053\u3068\u308A", "kotori", "Kotori"]).hide().action((_, session) => {
const { version, license, coreVersion, loaderVersion } = session.api.adapter.ctx.meta;
return session.format("core.msg.about", {
version,
license,
core_version: coreVersion,
loader_version: loaderVersion,
node_version: process.version
});
});
ctx.command("locale <lang> - core.descr.locale").option("G", "global:boolean core.option.locale.global").action(({ args: [lang2], options: { global } }, session) => {
const { adapter } = session.api;
if (!["en_US", "ja_JP", "zh_CN", "zh_TW"].includes(lang2)) return "core.msg.locale.invalid";
if (global) {
adapter.ctx.root.config.global.lang = lang2;
for (const apis of adapter.ctx[import_kotori_bot.Symbols.bot].values()) {
for (const { adapter: adapter2 } of apis.values()) adapter2.config.lang = lang2;
}
} else {
adapter.config.lang = lang2;
}
return session.format(`core.msg.locale${global ? ".global" : ""}`, { lang: lang2 });
});
ctx.command("module [name] - core.descr.module").action(({ args: [name] }, session) => {
let modulesList = Array.from(ctx[import_kotori_bot.Symbols.modules].values());
if (name) {
modulesList = modulesList.filter(([{ pkg }]) => pkg.name.startsWith(name));
if (modulesList.length === 0) return session.format("core.msg.module.not_found", { name });
}
return session.format("core.msg.module", {
list: modulesList.map(
([{ pkg }]) => session.format("core.msg.module.list", {
name: pkg.name,
version: pkg.version,
description: pkg.description
})
).join("")
});
});
ctx.command("restart - core.descr.restart").access(import_kotori_bot.UserAccess.ADMIN).action(async (_, session) => {
if (!ctx.options.isDaemon) {
session.quick("core.msg.restart.not_daemon");
return;
}
await session.quick("core.msg.restart");
setTimeout(() => process.exit(233), 1);
});
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
lang,
main
});