@zhin.js/core 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +295 -74
- package/lib/adapter.d.ts +39 -0
- package/lib/adapter.d.ts.map +1 -0
- package/{dist → lib}/adapter.js +20 -2
- package/lib/adapter.js.map +1 -0
- package/lib/app.d.ts +115 -0
- package/lib/app.d.ts.map +1 -0
- package/{dist → lib}/app.js +148 -78
- package/lib/app.js.map +1 -0
- package/lib/bot.d.ts +31 -0
- package/lib/bot.d.ts.map +1 -0
- package/lib/command.d.ts +32 -0
- package/lib/command.d.ts.map +1 -0
- package/lib/command.js +46 -0
- package/lib/command.js.map +1 -0
- package/lib/component.d.ts +27 -0
- package/lib/component.d.ts.map +1 -0
- package/lib/component.js +469 -0
- package/lib/component.js.map +1 -0
- package/{dist → lib}/config.d.ts.map +1 -1
- package/{dist → lib}/config.js +6 -9
- package/lib/config.js.map +1 -0
- package/lib/cron.d.ts +81 -0
- package/lib/cron.d.ts.map +1 -0
- package/lib/cron.js +159 -0
- package/lib/cron.js.map +1 -0
- package/lib/errors.d.ts +165 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +306 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +15 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +17 -0
- package/lib/index.js.map +1 -0
- package/lib/jsx-runtime.d.ts +12 -0
- package/lib/jsx-runtime.d.ts.map +1 -0
- package/lib/jsx-runtime.js +11 -0
- package/lib/jsx-runtime.js.map +1 -0
- package/lib/jsx.d.ts +32 -0
- package/lib/jsx.d.ts.map +1 -0
- package/lib/jsx.js +57 -0
- package/lib/jsx.js.map +1 -0
- package/lib/message.d.ts +47 -0
- package/lib/message.d.ts.map +1 -0
- package/lib/message.js +11 -0
- package/lib/message.js.map +1 -0
- package/lib/plugin.d.ts +50 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +170 -0
- package/lib/plugin.js.map +1 -0
- package/lib/prompt.d.ts +116 -0
- package/lib/prompt.d.ts.map +1 -0
- package/lib/prompt.js +240 -0
- package/lib/prompt.js.map +1 -0
- package/lib/schema.d.ts +83 -0
- package/lib/schema.d.ts.map +1 -0
- package/lib/schema.js +245 -0
- package/lib/schema.js.map +1 -0
- package/{dist → lib}/types-generator.d.ts.map +1 -1
- package/{dist → lib}/types-generator.js +6 -3
- package/lib/types-generator.js.map +1 -0
- package/lib/types.d.ts +121 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/utils.d.ts +52 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +340 -0
- package/lib/utils.js.map +1 -0
- package/package.json +23 -9
- package/src/adapter.ts +25 -9
- package/src/app.ts +363 -258
- package/src/bot.ts +29 -8
- package/src/command.ts +50 -0
- package/src/component.ts +561 -0
- package/src/config.ts +9 -12
- package/src/cron.ts +176 -0
- package/src/errors.ts +365 -0
- package/src/index.ts +16 -13
- package/src/jsx-runtime.ts +12 -0
- package/src/jsx.d.ts +52 -0
- package/src/jsx.ts +92 -0
- package/src/message.ts +47 -0
- package/src/plugin.ts +148 -66
- package/src/prompt.ts +290 -0
- package/src/schema.ts +273 -0
- package/src/types-generator.ts +7 -3
- package/src/types.ts +80 -31
- package/src/utils.ts +313 -0
- package/tests/adapter.test.ts +36 -22
- package/tests/app.test.ts +30 -0
- package/tests/command.test.ts +545 -0
- package/tests/component-new.test.ts +348 -0
- package/tests/config.test.ts +1 -1
- package/tests/errors.test.ts +311 -0
- package/tests/expression-evaluation.test.ts +258 -0
- package/tests/message.test.ts +402 -0
- package/tests/plugin.test.ts +284 -143
- package/tests/utils.test.ts +80 -0
- package/tsconfig.json +3 -4
- package/dist/adapter.d.ts +0 -22
- package/dist/adapter.d.ts.map +0 -1
- package/dist/adapter.js.map +0 -1
- package/dist/app.d.ts +0 -69
- package/dist/app.d.ts.map +0 -1
- package/dist/app.js.map +0 -1
- package/dist/bot.d.ts +0 -9
- package/dist/bot.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -12
- package/dist/index.js.map +0 -1
- package/dist/logger.d.ts +0 -3
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -3
- package/dist/logger.js.map +0 -1
- package/dist/plugin.d.ts +0 -41
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js +0 -95
- package/dist/plugin.js.map +0 -1
- package/dist/types-generator.js.map +0 -1
- package/dist/types.d.ts +0 -69
- package/dist/types.d.ts.map +0 -1
- package/src/logger.ts +0 -3
- package/tests/logger.test.ts +0 -170
- package/tsconfig.tsbuildinfo +0 -1
- /package/{dist → lib}/bot.js +0 -0
- /package/{dist → lib}/bot.js.map +0 -0
- /package/{dist → lib}/config.d.ts +0 -0
- /package/{dist → lib}/types-generator.d.ts +0 -0
- /package/{dist → lib}/types.js +0 -0
- /package/{dist → lib}/types.js.map +0 -0
package/lib/app.d.ts
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { SideEffect, GlobalContext, Models } from "@zhin.js/types";
|
|
2
|
+
import { HMR, Context, Logger } from "@zhin.js/hmr";
|
|
3
|
+
import { AdapterMessage, AppConfig, BeforeSendHandler, RegisteredAdapter, SendOptions } from "./types.js";
|
|
4
|
+
import { Message } from "./message.js";
|
|
5
|
+
import { MessageMiddleware, Plugin } from "./plugin.js";
|
|
6
|
+
import { Adapter } from "./adapter";
|
|
7
|
+
import { MessageCommand } from "./command";
|
|
8
|
+
import { Component } from "./component";
|
|
9
|
+
import { RelatedDatabase, DocumentDatabase, KeyValueDatabase, Schema } from "@zhin.js/database";
|
|
10
|
+
/**
|
|
11
|
+
* App类:Zhin.js 应用主入口,负责插件热重载、配置管理、消息分发等。
|
|
12
|
+
* 继承自 HMR,支持插件生命周期、适配器管理、数据库集成等。
|
|
13
|
+
*/
|
|
14
|
+
export declare class App extends HMR<Plugin> {
|
|
15
|
+
static currentPlugin: Plugin;
|
|
16
|
+
private config;
|
|
17
|
+
adapters: string[];
|
|
18
|
+
database?: RelatedDatabase<any, Models> | DocumentDatabase<any, Models> | KeyValueDatabase<any, Models>;
|
|
19
|
+
/**
|
|
20
|
+
* 构造函数:初始化应用,加载配置,注册全局异常处理
|
|
21
|
+
* @param config 可选的应用配置,若为空则自动查找配置文件
|
|
22
|
+
*/
|
|
23
|
+
constructor(config?: Partial<AppConfig>);
|
|
24
|
+
/** 默认配置 */
|
|
25
|
+
/**
|
|
26
|
+
* 默认配置
|
|
27
|
+
* - plugin_dirs: 插件目录
|
|
28
|
+
* - plugins: 启用插件
|
|
29
|
+
* - bots: 机器人配置
|
|
30
|
+
* - debug: 是否调试模式
|
|
31
|
+
*/
|
|
32
|
+
static defaultConfig: AppConfig;
|
|
33
|
+
/**
|
|
34
|
+
* 发送消息到指定适配器和机器人
|
|
35
|
+
* @param options 消息发送参数(包含 context、bot、内容等)
|
|
36
|
+
* @throws 找不到适配器或机器人时抛出异常
|
|
37
|
+
*/
|
|
38
|
+
sendMessage(options: SendOptions): Promise<void>;
|
|
39
|
+
/** 同步加载配置文件 */
|
|
40
|
+
/**
|
|
41
|
+
* 同步加载配置文件(暂不支持,建议使用异步创建)
|
|
42
|
+
* @throws 始终抛出异常,提示使用异步方法
|
|
43
|
+
*/
|
|
44
|
+
static loadConfigSync(): AppConfig;
|
|
45
|
+
/** 创建插件依赖 */
|
|
46
|
+
/**
|
|
47
|
+
* 创建插件依赖
|
|
48
|
+
* @param name 插件名
|
|
49
|
+
* @param filePath 插件文件路径
|
|
50
|
+
*/
|
|
51
|
+
createDependency(name: string, filePath: string): Plugin;
|
|
52
|
+
/** 获取App配置 */
|
|
53
|
+
/**
|
|
54
|
+
* 获取App配置(只读)
|
|
55
|
+
*/
|
|
56
|
+
getConfig(): Readonly<AppConfig>;
|
|
57
|
+
/** 更新App配置 */
|
|
58
|
+
/**
|
|
59
|
+
* 更新App配置
|
|
60
|
+
* @param config 部分配置项,将与现有配置合并
|
|
61
|
+
*/
|
|
62
|
+
updateConfig(config: Partial<AppConfig>): void;
|
|
63
|
+
get schemas(): Map<string, Schema<any>>;
|
|
64
|
+
/** 使用插件 */
|
|
65
|
+
use(filePath: string): void;
|
|
66
|
+
/** 启动App */
|
|
67
|
+
start(mode?: "dev" | "prod"): Promise<void>;
|
|
68
|
+
/** 停止App */
|
|
69
|
+
stop(): Promise<void>;
|
|
70
|
+
getContext<T>(name: string): T;
|
|
71
|
+
handleBeforeSend(options: SendOptions): Promise<SendOptions>;
|
|
72
|
+
}
|
|
73
|
+
/** 获取App实例 */
|
|
74
|
+
export declare function useApp(): App;
|
|
75
|
+
export declare function defineModel<T extends Record<string, any>>(name: string, schema: Schema<T>): Plugin;
|
|
76
|
+
/** 获取当前插件实例 */
|
|
77
|
+
export declare function usePlugin(): Plugin;
|
|
78
|
+
export declare function beforeSend(handler: BeforeSendHandler): void;
|
|
79
|
+
/** 创建Context */
|
|
80
|
+
export declare function register<T>(context: Context<T, Plugin>): Context<T, Plugin>;
|
|
81
|
+
export declare function registerAdapter<T extends Adapter>(adapter: T): void;
|
|
82
|
+
/** 标记必需的Context */
|
|
83
|
+
export declare function useContext<T extends (keyof GlobalContext)[]>(...args: [...T, sideEffect: SideEffect<T>]): void;
|
|
84
|
+
/** 添加中间件 */
|
|
85
|
+
export declare function addMiddleware(middleware: MessageMiddleware): void;
|
|
86
|
+
export declare function onDatabaseReady(callback: (database: RelatedDatabase<any, Models> | DocumentDatabase<any, Models> | KeyValueDatabase<any, Models>) => PromiseLike<void>): void;
|
|
87
|
+
export declare function useDatabase(): RelatedDatabase<any, Models> | DocumentDatabase<any, Models> | KeyValueDatabase<any, Models> | undefined;
|
|
88
|
+
export declare function onAppReady(callback: () => PromiseLike<void>): void;
|
|
89
|
+
/** 添加指令 */
|
|
90
|
+
export declare function addCommand(command: MessageCommand): void;
|
|
91
|
+
/** 添加组件 */
|
|
92
|
+
export declare function addComponent<P = any>(component: Component<P>): void;
|
|
93
|
+
/** 监听事件 */
|
|
94
|
+
export declare function onEvent(event: string, listener: (...args: any[]) => any): void;
|
|
95
|
+
/** 监听群组消息 */
|
|
96
|
+
export declare function onGroupMessage(handler: (message: Message) => void | Promise<void>): void;
|
|
97
|
+
/** 监听私聊消息 */
|
|
98
|
+
export declare function onPrivateMessage(handler: (message: Message) => void | Promise<void>): void;
|
|
99
|
+
/** 监听所有消息 */
|
|
100
|
+
export declare function onMessage<T extends RegisteredAdapter>(handler: (message: Message<AdapterMessage<T>>) => void | Promise<void>): void;
|
|
101
|
+
/** 获取下一条消息 */
|
|
102
|
+
export declare function usePrompt<P extends RegisteredAdapter>(message: Message<AdapterMessage<P>>): import("./prompt.js").Prompt<P>;
|
|
103
|
+
/** 监听插件挂载事件 */
|
|
104
|
+
export declare function onMounted(hook: (plugin: Plugin) => Promise<void> | void): void;
|
|
105
|
+
/** 监听插件销毁事件 */
|
|
106
|
+
export declare function onDispose(hook: () => void): void;
|
|
107
|
+
/** 发送消息 */
|
|
108
|
+
export declare function sendMessage(options: SendOptions): Promise<void>;
|
|
109
|
+
/** 获取App实例(用于高级操作) */
|
|
110
|
+
export declare function getAppInstance(): App;
|
|
111
|
+
/** 获取插件日志记录器 */
|
|
112
|
+
export declare function useLogger(): Logger;
|
|
113
|
+
/** 创建App实例的工厂函数 */
|
|
114
|
+
export declare function createApp(config?: Partial<AppConfig>): Promise<App>;
|
|
115
|
+
//# sourceMappingURL=app.d.ts.map
|
package/lib/app.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EACL,GAAG,EACH,OAAO,EACP,MAAM,EAGP,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAC,gBAAgB,EAAC,gBAAgB,EAAC,MAAM,EAAU,MAAM,mBAAmB,CAAC;AAKrG;;;GAGG;AACH,qBAAa,GAAI,SAAQ,GAAG,CAAC,MAAM,CAAC;IAClC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAY;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,QAAQ,CAAC,EAAE,eAAe,CAAC,GAAG,EAAC,MAAM,CAAC,GAAC,gBAAgB,CAAC,GAAG,EAAC,MAAM,CAAC,GAAC,gBAAgB,CAAC,GAAG,EAAC,MAAM,CAAC,CAAC;IACjG;;;OAGG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC;IAoCvC,WAAW;IACX;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,SAAS,CAK7B;IACF;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,WAAW;IAWtC,eAAe;IACf;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,SAAS;IAMlC,aAAa;IACb;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIxD,cAAc;IACd;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;IAIhC,cAAc;IACd;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IA0B9C,IAAI,OAAO,6BAOV;IACD,WAAW;IACX,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI3B,YAAY;IACN,KAAK,CAAC,IAAI,GAAE,KAAK,GAAG,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBzD,YAAY;IACN,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;IAcxB,gBAAgB,CAAC,OAAO,EAAE,WAAW;CAW5C;AA0BD,cAAc;AACd,wBAAgB,MAAM,IAAI,GAAG,CAI5B;AACD,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACvD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAIlB;AAED,eAAe;AACf,wBAAgB,SAAS,IAAI,MAAM,CAclC;AACD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,QAGpD;AACD,gBAAgB;AAChB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAG3E;AACD,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAE,CAAC,QAc5D;AAGD,mBAAmB;AACnB,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,aAAa,CAAC,EAAE,EAC1D,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GACzC,IAAI,CAGN;AAED,YAAY;AACZ,wBAAgB,aAAa,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAGjE;AACD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAC,MAAM,CAAC,GAAC,gBAAgB,CAAC,GAAG,EAAC,MAAM,CAAC,GAAC,gBAAgB,CAAC,GAAG,EAAC,MAAM,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,QAI/J;AACD,wBAAgB,WAAW,6GAG1B;AACD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,QAI3D;AACD,WAAW;AACX,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAGxD;AAED,WAAW;AACX,wBAAgB,YAAY,CAAC,CAAC,GAAG,GAAG,EAClC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GACtB,IAAI,CAGN;AAED,WAAW;AACX,wBAAgB,OAAO,CACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAChC,IAAI,CAGN;AAED,aAAa;AACb,wBAAgB,cAAc,CAC5B,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAClD,IAAI,CAEN;AAED,aAAa;AACb,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAClD,IAAI,CAEN;AAED,aAAa;AACb,wBAAgB,SAAS,CAAC,CAAC,SAAS,iBAAiB,EACnD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACrE,IAAI,CAEN;AACD,cAAc;AACd,wBAAgB,SAAS,CAAC,CAAC,SAAS,iBAAiB,EACnD,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,mCAIpC;AAED,eAAe;AACf,wBAAgB,SAAS,CACvB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC7C,IAAI,CAIN;AAED,eAAe;AACf,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAIhD;AAED,WAAW;AACX,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,sBAAsB;AACtB,wBAAgB,cAAc,IAAI,GAAG,CAEpC;AAED,gBAAgB;AAChB,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,mBAAmB;AACnB,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAIzE"}
|
package/{dist → lib}/app.js
RENAMED
|
@@ -1,32 +1,43 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { HMR, getCallerFile, getCallerFiles, } from "@zhin.js/hmr";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
import { generateEnvTypes } from "./types-generator.js";
|
|
5
|
+
import logger, { setName } from "@zhin.js/logger";
|
|
6
|
+
import { sleep } from "./utils.js";
|
|
7
|
+
// 创建静态logger用于配置加载等静态操作
|
|
8
|
+
setName("Zhin");
|
|
8
9
|
import { Plugin } from "./plugin.js";
|
|
10
|
+
import { Registry } from "@zhin.js/database";
|
|
9
11
|
// ============================================================================
|
|
10
|
-
// App
|
|
12
|
+
// App 类(Zhin.js 应用主入口,负责插件热重载、配置管理、消息分发等)
|
|
11
13
|
// ============================================================================
|
|
12
14
|
/**
|
|
13
|
-
* App
|
|
15
|
+
* App类:Zhin.js 应用主入口,负责插件热重载、配置管理、消息分发等。
|
|
16
|
+
* 继承自 HMR,支持插件生命周期、适配器管理、数据库集成等。
|
|
14
17
|
*/
|
|
15
18
|
export class App extends HMR {
|
|
16
19
|
static currentPlugin;
|
|
17
20
|
config;
|
|
21
|
+
adapters = [];
|
|
22
|
+
database;
|
|
23
|
+
/**
|
|
24
|
+
* 构造函数:初始化应用,加载配置,注册全局异常处理
|
|
25
|
+
* @param config 可选的应用配置,若为空则自动查找配置文件
|
|
26
|
+
*/
|
|
18
27
|
constructor(config) {
|
|
19
28
|
// 如果没有传入配置或配置为空对象,尝试自动加载配置文件
|
|
20
29
|
let finalConfig;
|
|
21
30
|
if (!config || Object.keys(config).length === 0) {
|
|
22
31
|
try {
|
|
23
32
|
// 异步加载配置,这里需要改为同步初始化
|
|
24
|
-
logger.info(
|
|
33
|
+
logger.info("🔍 正在查找配置文件...");
|
|
25
34
|
finalConfig = App.loadConfigSync();
|
|
26
|
-
logger.info(
|
|
35
|
+
logger.info("✅ 配置文件加载成功");
|
|
27
36
|
}
|
|
28
37
|
catch (error) {
|
|
29
|
-
logger.warn(
|
|
38
|
+
logger.warn("⚠️ 配置文件加载失败,使用默认配置", {
|
|
39
|
+
error: error instanceof Error ? error.message : String(error),
|
|
40
|
+
});
|
|
30
41
|
finalConfig = Object.assign({}, App.defaultConfig);
|
|
31
42
|
}
|
|
32
43
|
}
|
|
@@ -35,46 +46,80 @@ export class App extends HMR {
|
|
|
35
46
|
finalConfig = Object.assign({}, App.defaultConfig, config);
|
|
36
47
|
}
|
|
37
48
|
// 调用父类构造函数
|
|
38
|
-
super(
|
|
39
|
-
logger
|
|
49
|
+
super("Zhin", {
|
|
50
|
+
logger,
|
|
40
51
|
dirs: finalConfig.plugin_dirs || [],
|
|
41
|
-
extensions: new Set([
|
|
42
|
-
debug: finalConfig.debug
|
|
52
|
+
extensions: new Set([".js", ".ts", ".jsx", ".tsx"]),
|
|
53
|
+
debug: finalConfig.debug,
|
|
54
|
+
});
|
|
55
|
+
this.on("message.send", this.sendMessage.bind(this));
|
|
56
|
+
process.on("uncaughtException", (e) => {
|
|
57
|
+
this.logger.error(e);
|
|
58
|
+
});
|
|
59
|
+
process.on("unhandledRejection", (e) => {
|
|
60
|
+
this.logger.error(e);
|
|
43
61
|
});
|
|
44
|
-
this.on('message.send', this.sendMessage.bind(this));
|
|
45
62
|
this.config = finalConfig;
|
|
46
63
|
}
|
|
47
64
|
/** 默认配置 */
|
|
65
|
+
/**
|
|
66
|
+
* 默认配置
|
|
67
|
+
* - plugin_dirs: 插件目录
|
|
68
|
+
* - plugins: 启用插件
|
|
69
|
+
* - bots: 机器人配置
|
|
70
|
+
* - debug: 是否调试模式
|
|
71
|
+
*/
|
|
48
72
|
static defaultConfig = {
|
|
49
|
-
plugin_dirs: [
|
|
73
|
+
plugin_dirs: ["./plugins"],
|
|
50
74
|
plugins: [],
|
|
51
75
|
bots: [],
|
|
52
76
|
debug: false,
|
|
53
77
|
};
|
|
78
|
+
/**
|
|
79
|
+
* 发送消息到指定适配器和机器人
|
|
80
|
+
* @param options 消息发送参数(包含 context、bot、内容等)
|
|
81
|
+
* @throws 找不到适配器或机器人时抛出异常
|
|
82
|
+
*/
|
|
54
83
|
async sendMessage(options) {
|
|
55
84
|
const adapter = this.getContext(options.context);
|
|
56
85
|
if (!adapter)
|
|
57
86
|
throw new Error(`can't find adapter for name ${options.context}`);
|
|
58
87
|
const bot = adapter.bots.get(options.bot);
|
|
59
88
|
if (!bot)
|
|
60
|
-
throw new Error(`can't find bot ${options.bot} for adapter ${options.
|
|
61
|
-
return bot
|
|
89
|
+
throw new Error(`can't find bot ${options.bot} for adapter ${options.context}`);
|
|
90
|
+
return bot.$sendMessage(options);
|
|
62
91
|
}
|
|
63
92
|
/** 同步加载配置文件 */
|
|
93
|
+
/**
|
|
94
|
+
* 同步加载配置文件(暂不支持,建议使用异步创建)
|
|
95
|
+
* @throws 始终抛出异常,提示使用异步方法
|
|
96
|
+
*/
|
|
64
97
|
static loadConfigSync() {
|
|
65
98
|
// 由于loadConfig是异步的,我们需要创建一个同步版本
|
|
66
99
|
// 或者在这里简化处理,让用户使用异步创建方法
|
|
67
|
-
throw new Error(
|
|
100
|
+
throw new Error("同步加载配置暂不支持,请使用 App.createAsync() 方法");
|
|
68
101
|
}
|
|
69
102
|
/** 创建插件依赖 */
|
|
103
|
+
/**
|
|
104
|
+
* 创建插件依赖
|
|
105
|
+
* @param name 插件名
|
|
106
|
+
* @param filePath 插件文件路径
|
|
107
|
+
*/
|
|
70
108
|
createDependency(name, filePath) {
|
|
71
109
|
return new Plugin(this, name, filePath);
|
|
72
110
|
}
|
|
73
111
|
/** 获取App配置 */
|
|
112
|
+
/**
|
|
113
|
+
* 获取App配置(只读)
|
|
114
|
+
*/
|
|
74
115
|
getConfig() {
|
|
75
116
|
return { ...this.config };
|
|
76
117
|
}
|
|
77
118
|
/** 更新App配置 */
|
|
119
|
+
/**
|
|
120
|
+
* 更新App配置
|
|
121
|
+
* @param config 部分配置项,将与现有配置合并
|
|
122
|
+
*/
|
|
78
123
|
updateConfig(config) {
|
|
79
124
|
this.config = { ...this.config, ...config };
|
|
80
125
|
// 更新HMR配置
|
|
@@ -95,29 +140,52 @@ export class App extends HMR {
|
|
|
95
140
|
}
|
|
96
141
|
}
|
|
97
142
|
}
|
|
98
|
-
this.logger.info(
|
|
143
|
+
this.logger.info("App configuration updated", this.config);
|
|
144
|
+
}
|
|
145
|
+
get schemas() {
|
|
146
|
+
return this.dependencyList.reduce((result, plugin) => {
|
|
147
|
+
plugin.schemas.forEach((schema, name) => {
|
|
148
|
+
result.set(name, schema);
|
|
149
|
+
});
|
|
150
|
+
return result;
|
|
151
|
+
}, new Map());
|
|
99
152
|
}
|
|
100
153
|
/** 使用插件 */
|
|
101
154
|
use(filePath) {
|
|
102
|
-
this.emit(
|
|
155
|
+
this.emit("internal.add", filePath);
|
|
103
156
|
}
|
|
104
157
|
/** 启动App */
|
|
105
|
-
async start(mode =
|
|
158
|
+
async start(mode = "prod") {
|
|
106
159
|
await generateEnvTypes(process.cwd());
|
|
107
160
|
// 加载插件
|
|
108
161
|
for (const pluginName of this.config.plugins || []) {
|
|
109
162
|
this.use(pluginName);
|
|
110
163
|
}
|
|
164
|
+
await sleep(200);
|
|
165
|
+
const schemas = {};
|
|
166
|
+
for (const [name, schema] of this.schemas) {
|
|
167
|
+
schemas[name] = schema;
|
|
168
|
+
}
|
|
169
|
+
if (this.config.database) {
|
|
170
|
+
this.database = Registry.create(this.config.database.dialect, this.config.database, schemas);
|
|
171
|
+
await this.database?.start();
|
|
172
|
+
this.logger.info(`database init success`);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
this.logger.info(`database not configured, skipping database init`);
|
|
176
|
+
}
|
|
177
|
+
this.dispatch("database.ready", this.database);
|
|
111
178
|
// 等待所有插件就绪
|
|
112
179
|
await this.waitForReady();
|
|
113
|
-
this.logger.info(
|
|
180
|
+
this.logger.info("started successfully");
|
|
181
|
+
this.dispatch("app.ready");
|
|
114
182
|
}
|
|
115
183
|
/** 停止App */
|
|
116
184
|
async stop() {
|
|
117
|
-
this.logger.info(
|
|
185
|
+
this.logger.info("Stopping app...");
|
|
118
186
|
// 销毁所有插件
|
|
119
187
|
this.dispose();
|
|
120
|
-
this.logger.info(
|
|
188
|
+
this.logger.info("App stopped");
|
|
121
189
|
}
|
|
122
190
|
getContext(name) {
|
|
123
191
|
for (const dep of this.dependencyList) {
|
|
@@ -134,7 +202,7 @@ export class App extends HMR {
|
|
|
134
202
|
}
|
|
135
203
|
async handleBeforeSend(options) {
|
|
136
204
|
const handlers = this.dependencyList.reduce((result, plugin) => {
|
|
137
|
-
result.push(...plugin.listeners(
|
|
205
|
+
result.push(...plugin.listeners("before-message.send"));
|
|
138
206
|
return result;
|
|
139
207
|
}, []);
|
|
140
208
|
for (const handler of handlers) {
|
|
@@ -144,15 +212,12 @@ export class App extends HMR {
|
|
|
144
212
|
}
|
|
145
213
|
return options;
|
|
146
214
|
}
|
|
147
|
-
getLogger(...names) {
|
|
148
|
-
return new ConsoleLogger(`[${[...names].join('/')}]`, process.env.NODE_ENV === 'development');
|
|
149
|
-
}
|
|
150
215
|
}
|
|
151
216
|
// ============================================================================
|
|
152
217
|
// Hooks API
|
|
153
218
|
// ============================================================================
|
|
154
219
|
function getPlugin(hmr, filename) {
|
|
155
|
-
const name = path.basename(filename).replace(path.extname(filename),
|
|
220
|
+
const name = path.basename(filename).replace(path.extname(filename), "");
|
|
156
221
|
// 尝试从当前依赖中查找插件
|
|
157
222
|
const childPlugin = hmr.findChild(filename);
|
|
158
223
|
if (childPlugin) {
|
|
@@ -165,47 +230,22 @@ function getPlugin(hmr, filename) {
|
|
|
165
230
|
parent.dependencies.set(filename, newPlugin);
|
|
166
231
|
return newPlugin;
|
|
167
232
|
}
|
|
168
|
-
export async function createApp(config) {
|
|
169
|
-
let finalConfig, configPath = '';
|
|
170
|
-
const envFiles = ['.env', `.env.${process.env.NODE_ENV}`]
|
|
171
|
-
.filter(filename => fs.existsSync(path.join(process.cwd(), filename)));
|
|
172
|
-
if (!config || Object.keys(config).length === 0) {
|
|
173
|
-
try {
|
|
174
|
-
logger.info('🔍 正在查找配置文件...');
|
|
175
|
-
[configPath, finalConfig] = await loadConfig();
|
|
176
|
-
logger.info('✅ 配置文件加载成功');
|
|
177
|
-
}
|
|
178
|
-
catch (error) {
|
|
179
|
-
logger.warn('⚠️ 配置文件加载失败,使用默认配置:', error instanceof Error ? error.message : error);
|
|
180
|
-
finalConfig = Object.assign({}, App.defaultConfig);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
finalConfig = Object.assign({}, App.defaultConfig, config);
|
|
185
|
-
}
|
|
186
|
-
const app = new App(finalConfig);
|
|
187
|
-
app.watching(envFiles, () => {
|
|
188
|
-
process.exit(51);
|
|
189
|
-
});
|
|
190
|
-
if (configPath) {
|
|
191
|
-
app.watching(configPath, () => {
|
|
192
|
-
process.exit(51);
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
return app;
|
|
196
|
-
}
|
|
197
233
|
/** 获取App实例 */
|
|
198
234
|
export function useApp() {
|
|
199
235
|
const hmr = HMR.currentHMR;
|
|
200
236
|
if (!hmr)
|
|
201
|
-
throw new Error(
|
|
237
|
+
throw new Error("useApp must be called within a App Context");
|
|
202
238
|
return hmr;
|
|
203
239
|
}
|
|
240
|
+
export function defineModel(name, schema) {
|
|
241
|
+
const plugin = usePlugin();
|
|
242
|
+
return plugin.defineModel(name, schema);
|
|
243
|
+
}
|
|
204
244
|
/** 获取当前插件实例 */
|
|
205
245
|
export function usePlugin() {
|
|
206
246
|
const hmr = HMR.currentHMR;
|
|
207
247
|
if (!hmr)
|
|
208
|
-
throw new Error(
|
|
248
|
+
throw new Error("usePlugin must be called within a App Context");
|
|
209
249
|
try {
|
|
210
250
|
const currentFile = getCallerFile(import.meta.url);
|
|
211
251
|
return getPlugin(hmr, currentFile);
|
|
@@ -229,21 +269,19 @@ export function register(context) {
|
|
|
229
269
|
}
|
|
230
270
|
export function registerAdapter(adapter) {
|
|
231
271
|
const plugin = usePlugin();
|
|
272
|
+
plugin.app.adapters.push(adapter.name);
|
|
232
273
|
plugin.register({
|
|
233
274
|
name: adapter.name,
|
|
275
|
+
description: `adapter for ${adapter.name}`,
|
|
234
276
|
async mounted(plugin) {
|
|
235
277
|
await adapter.start(plugin);
|
|
236
278
|
return adapter;
|
|
237
279
|
},
|
|
238
280
|
dispose() {
|
|
239
281
|
return adapter.stop(plugin);
|
|
240
|
-
}
|
|
282
|
+
},
|
|
241
283
|
});
|
|
242
284
|
}
|
|
243
|
-
export function use(name) {
|
|
244
|
-
const plugin = usePlugin();
|
|
245
|
-
return plugin.use(name);
|
|
246
|
-
}
|
|
247
285
|
/** 标记必需的Context */
|
|
248
286
|
export function useContext(...args) {
|
|
249
287
|
const plugin = usePlugin();
|
|
@@ -254,6 +292,32 @@ export function addMiddleware(middleware) {
|
|
|
254
292
|
const plugin = usePlugin();
|
|
255
293
|
plugin.addMiddleware(middleware);
|
|
256
294
|
}
|
|
295
|
+
export function onDatabaseReady(callback) {
|
|
296
|
+
const plugin = usePlugin();
|
|
297
|
+
if (plugin.app.database?.isStarted)
|
|
298
|
+
callback(plugin.app.database);
|
|
299
|
+
plugin.on("database.ready", callback);
|
|
300
|
+
}
|
|
301
|
+
export function useDatabase() {
|
|
302
|
+
const plugin = usePlugin();
|
|
303
|
+
return plugin.app.database;
|
|
304
|
+
}
|
|
305
|
+
export function onAppReady(callback) {
|
|
306
|
+
const plugin = usePlugin();
|
|
307
|
+
if (plugin.app.isReady)
|
|
308
|
+
callback();
|
|
309
|
+
plugin.on("app.ready", callback);
|
|
310
|
+
}
|
|
311
|
+
/** 添加指令 */
|
|
312
|
+
export function addCommand(command) {
|
|
313
|
+
const plugin = usePlugin();
|
|
314
|
+
plugin.addCommand(command);
|
|
315
|
+
}
|
|
316
|
+
/** 添加组件 */
|
|
317
|
+
export function addComponent(component) {
|
|
318
|
+
const plugin = usePlugin();
|
|
319
|
+
plugin.addComponent(component);
|
|
320
|
+
}
|
|
257
321
|
/** 监听事件 */
|
|
258
322
|
export function onEvent(event, listener) {
|
|
259
323
|
const plugin = usePlugin();
|
|
@@ -261,34 +325,34 @@ export function onEvent(event, listener) {
|
|
|
261
325
|
}
|
|
262
326
|
/** 监听群组消息 */
|
|
263
327
|
export function onGroupMessage(handler) {
|
|
264
|
-
onEvent(
|
|
328
|
+
onEvent("message.group.receive", handler);
|
|
265
329
|
}
|
|
266
330
|
/** 监听私聊消息 */
|
|
267
331
|
export function onPrivateMessage(handler) {
|
|
268
|
-
onEvent(
|
|
332
|
+
onEvent("message.private.receive", handler);
|
|
269
333
|
}
|
|
270
334
|
/** 监听所有消息 */
|
|
271
335
|
export function onMessage(handler) {
|
|
272
|
-
onEvent(
|
|
336
|
+
onEvent("message.receive", handler);
|
|
337
|
+
}
|
|
338
|
+
/** 获取下一条消息 */
|
|
339
|
+
export function usePrompt(message) {
|
|
340
|
+
const plugin = usePlugin();
|
|
341
|
+
return plugin.prompt(message);
|
|
273
342
|
}
|
|
274
343
|
/** 监听插件挂载事件 */
|
|
275
344
|
export function onMounted(hook) {
|
|
276
345
|
const plugin = usePlugin();
|
|
277
346
|
if (plugin.isReady)
|
|
278
347
|
hook(plugin);
|
|
279
|
-
plugin.on(
|
|
348
|
+
plugin.on("self.mounted", hook);
|
|
280
349
|
}
|
|
281
350
|
/** 监听插件销毁事件 */
|
|
282
351
|
export function onDispose(hook) {
|
|
283
352
|
const plugin = usePlugin();
|
|
284
353
|
if (plugin.isDispose)
|
|
285
354
|
hook();
|
|
286
|
-
plugin.on(
|
|
287
|
-
}
|
|
288
|
-
/** 添加定时任务 */
|
|
289
|
-
export function addCronJob(job) {
|
|
290
|
-
const plugin = usePlugin();
|
|
291
|
-
plugin.addCronJob(job);
|
|
355
|
+
plugin.on("self.dispose", hook);
|
|
292
356
|
}
|
|
293
357
|
/** 发送消息 */
|
|
294
358
|
export async function sendMessage(options) {
|
|
@@ -304,4 +368,10 @@ export function useLogger() {
|
|
|
304
368
|
const plugin = usePlugin();
|
|
305
369
|
return plugin.logger;
|
|
306
370
|
}
|
|
371
|
+
/** 创建App实例的工厂函数 */
|
|
372
|
+
export async function createApp(config) {
|
|
373
|
+
const app = new App(config);
|
|
374
|
+
await app.start();
|
|
375
|
+
return app;
|
|
376
|
+
}
|
|
307
377
|
//# sourceMappingURL=app.js.map
|
package/lib/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/lib/bot.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { SendOptions } from "./types.js";
|
|
2
|
+
import { Message } from "./message.js";
|
|
3
|
+
/**
|
|
4
|
+
* Bot接口:所有平台机器人需实现的统一接口。
|
|
5
|
+
* 负责消息格式化、连接、断开、消息发送等。
|
|
6
|
+
* @template M 消息类型
|
|
7
|
+
* @template T 配置类型
|
|
8
|
+
*/
|
|
9
|
+
export interface Bot<M extends object = {}, T extends BotConfig = BotConfig> {
|
|
10
|
+
/** 机器人配置 */
|
|
11
|
+
$config: T;
|
|
12
|
+
/** 是否已连接 */
|
|
13
|
+
$connected?: boolean;
|
|
14
|
+
/** 格式化平台消息为标准Message结构 */
|
|
15
|
+
$formatMessage(message: M): Message<M>;
|
|
16
|
+
/** 连接机器人 */
|
|
17
|
+
$connect(): Promise<void>;
|
|
18
|
+
/** 断开机器人 */
|
|
19
|
+
$disconnect(): Promise<void>;
|
|
20
|
+
/** 发送消息 */
|
|
21
|
+
$sendMessage(options: SendOptions): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Bot配置类型,所有平台机器人通用
|
|
25
|
+
*/
|
|
26
|
+
export interface BotConfig {
|
|
27
|
+
context: string;
|
|
28
|
+
name: string;
|
|
29
|
+
[key: string]: any;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=bot.d.ts.map
|
package/lib/bot.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,WAAW,EAAe,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AACrC;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,MAAM,GAAC,EAAE,EAAC,CAAC,SAAS,SAAS,GAAC,SAAS;IAClE,YAAY;IACZ,OAAO,EAAE,CAAC,CAAC;IACX,YAAY;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0BAA0B;IAC1B,cAAc,CAAC,OAAO,EAAC,CAAC,GAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACpC,YAAY;IACZ,QAAQ,IAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB,YAAY;IACZ,WAAW,IAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,WAAW;IACX,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpD;AACD;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,OAAO,EAAC,MAAM,CAAA;IACd,IAAI,EAAC,MAAM,CAAA;IACX,CAAC,GAAG,EAAC,MAAM,GAAE,GAAG,CAAA;CACnB"}
|
package/lib/command.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { MatchResult, SegmentMatcher } from "segment-matcher";
|
|
2
|
+
import { AdapterMessage, RegisteredAdapters, SendContent } from "./types.js";
|
|
3
|
+
import type { Message } from "./message.js";
|
|
4
|
+
import { MaybePromise } from "@zhin.js/types";
|
|
5
|
+
/**
|
|
6
|
+
* MessageCommand类:命令系统核心,基于segment-matcher实现。
|
|
7
|
+
* 支持多平台命令注册、作用域限制、参数解析、异步处理等。
|
|
8
|
+
*/
|
|
9
|
+
export declare class MessageCommand<T extends keyof RegisteredAdapters = keyof RegisteredAdapters> extends SegmentMatcher {
|
|
10
|
+
#private;
|
|
11
|
+
/**
|
|
12
|
+
* 限定命令作用域(适配器名)
|
|
13
|
+
* @param scopes 适配器名列表
|
|
14
|
+
*/
|
|
15
|
+
scope<R extends T>(...scopes: R[]): MessageCommand<R>;
|
|
16
|
+
/**
|
|
17
|
+
* 注册命令回调
|
|
18
|
+
* @param callback 命令处理函数
|
|
19
|
+
*/
|
|
20
|
+
action(callback: MessageCommand.Callback<T>): MessageCommand<T>;
|
|
21
|
+
/**
|
|
22
|
+
* 处理消息,自动匹配命令并执行回调
|
|
23
|
+
* @param message 消息对象
|
|
24
|
+
* @returns 命令返回内容或undefined
|
|
25
|
+
*/
|
|
26
|
+
handle(message: Message<AdapterMessage<T>>): Promise<SendContent | undefined>;
|
|
27
|
+
}
|
|
28
|
+
export declare namespace MessageCommand {
|
|
29
|
+
type Callback<T extends keyof RegisteredAdapters> = (message: Message<AdapterMessage<T>>, result: MatchResult) => MaybePromise<SendContent | void>;
|
|
30
|
+
type Checker<T extends keyof RegisteredAdapters> = (message: Message<AdapterMessage<T>>) => MaybePromise<boolean>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAC,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAC,MAAM,YAAY,CAAC;AAC3E,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,kBAAkB,GAAC,MAAM,kBAAkB,CAAE,SAAQ,cAAc;;IAG3G;;;OAGG;IACH,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAC,CAAC,EAAE,GAAE,cAAc,CAAC,CAAC,CAAC;IAInD;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,GAEvB,cAAc,CAAC,CAAC,CAAC;IAEpC;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAE,OAAO,CAAC,WAAW,GAAC,SAAS,CAAC;CAYlF;AACD,yBAAiB,cAAc,CAAA;IAC3B,KAAY,QAAQ,CAAC,CAAC,SAAS,MAAM,kBAAkB,IAAE,CAAC,OAAO,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAC,WAAW,KAAG,YAAY,CAAC,WAAW,GAAC,IAAI,CAAC,CAAC;IACjJ,KAAY,OAAO,CAAC,CAAC,SAAS,MAAM,kBAAkB,IAAE,CAAC,OAAO,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAG,YAAY,CAAC,OAAO,CAAC,CAAA;CACtH"}
|
package/lib/command.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { SegmentMatcher } from "segment-matcher";
|
|
2
|
+
/**
|
|
3
|
+
* MessageCommand类:命令系统核心,基于segment-matcher实现。
|
|
4
|
+
* 支持多平台命令注册、作用域限制、参数解析、异步处理等。
|
|
5
|
+
*/
|
|
6
|
+
export class MessageCommand extends SegmentMatcher {
|
|
7
|
+
#callbacks = [];
|
|
8
|
+
#checkers = [];
|
|
9
|
+
/**
|
|
10
|
+
* 限定命令作用域(适配器名)
|
|
11
|
+
* @param scopes 适配器名列表
|
|
12
|
+
*/
|
|
13
|
+
scope(...scopes) {
|
|
14
|
+
this.#checkers.push((m) => scopes.includes(m.$adapter));
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 注册命令回调
|
|
19
|
+
* @param callback 命令处理函数
|
|
20
|
+
*/
|
|
21
|
+
action(callback) {
|
|
22
|
+
this.#callbacks.push(callback);
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 处理消息,自动匹配命令并执行回调
|
|
27
|
+
* @param message 消息对象
|
|
28
|
+
* @returns 命令返回内容或undefined
|
|
29
|
+
*/
|
|
30
|
+
async handle(message) {
|
|
31
|
+
for (const check of this.#checkers) {
|
|
32
|
+
const result = await check(message);
|
|
33
|
+
if (!result)
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const matched = this.match(message.$content);
|
|
37
|
+
if (!matched)
|
|
38
|
+
return;
|
|
39
|
+
for (const handler of this.#callbacks) {
|
|
40
|
+
const result = await handler(message, matched);
|
|
41
|
+
if (result)
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=command.js.map
|