@zhin.js/core 1.0.17 → 1.0.18

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.
Files changed (112) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/REFACTORING_COMPLETE.md +178 -0
  3. package/REFACTORING_STATUS.md +263 -0
  4. package/lib/adapter.d.ts +44 -19
  5. package/lib/adapter.d.ts.map +1 -1
  6. package/lib/adapter.js +81 -50
  7. package/lib/adapter.js.map +1 -1
  8. package/lib/bot.d.ts +7 -12
  9. package/lib/bot.d.ts.map +1 -1
  10. package/lib/built/adapter-process.d.ts +36 -0
  11. package/lib/built/adapter-process.d.ts.map +1 -0
  12. package/lib/built/adapter-process.js +77 -0
  13. package/lib/built/adapter-process.js.map +1 -0
  14. package/lib/built/command.d.ts +46 -0
  15. package/lib/built/command.d.ts.map +1 -0
  16. package/lib/built/command.js +54 -0
  17. package/lib/built/command.js.map +1 -0
  18. package/lib/built/component.d.ts +42 -0
  19. package/lib/built/component.d.ts.map +1 -0
  20. package/lib/built/component.js +66 -0
  21. package/lib/built/component.js.map +1 -0
  22. package/lib/built/config.d.ts +31 -0
  23. package/lib/built/config.d.ts.map +1 -0
  24. package/lib/built/config.js +141 -0
  25. package/lib/built/config.js.map +1 -0
  26. package/lib/built/cron.d.ts +53 -0
  27. package/lib/built/cron.d.ts.map +1 -0
  28. package/lib/built/cron.js +79 -0
  29. package/lib/built/cron.js.map +1 -0
  30. package/lib/built/database.d.ts +17 -0
  31. package/lib/built/database.d.ts.map +1 -0
  32. package/lib/built/database.js +28 -0
  33. package/lib/built/database.js.map +1 -0
  34. package/lib/{permissions.d.ts → built/permission.d.ts} +5 -10
  35. package/lib/built/permission.d.ts.map +1 -0
  36. package/lib/{permissions.js → built/permission.js} +11 -10
  37. package/lib/built/permission.js.map +1 -0
  38. package/lib/command.d.ts +7 -7
  39. package/lib/command.d.ts.map +1 -1
  40. package/lib/command.js +5 -15
  41. package/lib/command.js.map +1 -1
  42. package/lib/component.d.ts.map +1 -1
  43. package/lib/component.js.map +1 -1
  44. package/lib/cron.d.ts +1 -0
  45. package/lib/cron.d.ts.map +1 -1
  46. package/lib/cron.js +2 -0
  47. package/lib/cron.js.map +1 -1
  48. package/lib/index.d.ts +11 -3
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js +14 -4
  51. package/lib/index.js.map +1 -1
  52. package/lib/jsx-runtime.d.ts +2 -2
  53. package/lib/message.d.ts +2 -2
  54. package/lib/message.d.ts.map +1 -1
  55. package/lib/plugin.d.ts +164 -51
  56. package/lib/plugin.d.ts.map +1 -1
  57. package/lib/plugin.js +521 -150
  58. package/lib/plugin.js.map +1 -1
  59. package/lib/prompt.d.ts +1 -1
  60. package/lib/prompt.d.ts.map +1 -1
  61. package/lib/prompt.js +2 -1
  62. package/lib/prompt.js.map +1 -1
  63. package/lib/types.d.ts +33 -33
  64. package/lib/types.d.ts.map +1 -1
  65. package/lib/utils.d.ts +16 -1
  66. package/lib/utils.d.ts.map +1 -1
  67. package/lib/utils.js +166 -66
  68. package/lib/utils.js.map +1 -1
  69. package/package.json +15 -9
  70. package/src/adapter.ts +131 -80
  71. package/src/bot.ts +8 -13
  72. package/src/built/adapter-process.ts +77 -0
  73. package/src/built/command.ts +102 -0
  74. package/src/built/component.ts +111 -0
  75. package/src/built/config.ts +126 -0
  76. package/src/built/cron.ts +140 -0
  77. package/src/built/database.ts +38 -0
  78. package/src/{permissions.ts → built/permission.ts} +9 -12
  79. package/src/command.ts +11 -20
  80. package/src/component.ts +0 -1
  81. package/src/cron.ts +2 -0
  82. package/src/index.ts +15 -5
  83. package/src/message.ts +2 -2
  84. package/src/plugin.ts +671 -202
  85. package/src/prompt.ts +4 -3
  86. package/src/types.ts +41 -35
  87. package/src/utils.ts +418 -296
  88. package/test/minimal-bot.ts +31 -0
  89. package/test/stress-test.ts +123 -0
  90. package/tests/command.test.ts +47 -44
  91. package/ASYNC-JSX-SUPPORT.md +0 -173
  92. package/lib/app.d.ts +0 -191
  93. package/lib/app.d.ts.map +0 -1
  94. package/lib/app.js +0 -604
  95. package/lib/app.js.map +0 -1
  96. package/lib/config.d.ts +0 -54
  97. package/lib/config.d.ts.map +0 -1
  98. package/lib/config.js +0 -308
  99. package/lib/config.js.map +0 -1
  100. package/lib/log-transport.d.ts +0 -37
  101. package/lib/log-transport.d.ts.map +0 -1
  102. package/lib/log-transport.js +0 -136
  103. package/lib/log-transport.js.map +0 -1
  104. package/lib/permissions.d.ts.map +0 -1
  105. package/lib/permissions.js.map +0 -1
  106. package/src/app.ts +0 -772
  107. package/src/config.ts +0 -397
  108. package/src/log-transport.ts +0 -163
  109. package/tests/app.test.ts +0 -265
  110. package/tests/permissions.test.ts +0 -358
  111. package/tests/plugin.test.ts +0 -234
  112. package/tests/prompt.test.ts +0 -223
package/lib/app.js DELETED
@@ -1,604 +0,0 @@
1
- var _a;
2
- import path from "path";
3
- import { Schema } from '@zhin.js/hmr';
4
- import { HMR, getCallerFile, getCallerFiles, mergeConfig, } from "@zhin.js/hmr";
5
- import { Config } from "./config.js";
6
- import { fileURLToPath } from "url";
7
- import { generateEnvTypes } from "./types-generator.js";
8
- import logger, { setName, setLevel, LogLevel } from "@zhin.js/logger";
9
- import { compose, sleep } from "./utils.js";
10
- import { Permissions } from "./permissions.js";
11
- // 创建静态logger用于配置加载等静态操作
12
- setName("Zhin");
13
- import { Plugin } from "./plugin.js";
14
- import { Registry, } from "@zhin.js/database";
15
- import { DatabaseLogTransport } from "./log-transport.js";
16
- import { SystemLogDefinition } from "./models/system-log.js";
17
- import { UserDefinition } from "./models/user.js";
18
- import { addTransport, removeTransport } from "@zhin.js/logger";
19
- // ============================================================================
20
- // App 类(Zhin.js 应用主入口,负责插件热重载、配置管理、消息分发等)
21
- // ============================================================================
22
- /**
23
- * App类:Zhin.js 应用主入口,负责插件热重载、配置管理、消息分发等。
24
- * 继承自 HMR,支持插件生命周期、适配器管理、数据库集成等。
25
- */
26
- export class App extends HMR {
27
- static currentPlugin;
28
- middlewares = [];
29
- adapters = [];
30
- #config;
31
- database;
32
- permissions = new Permissions(this);
33
- logTransport;
34
- /** 配置变更处理锁 */
35
- configChangeLock = null;
36
- constructor(config_param = "zhin.config.yml") {
37
- const config_file = typeof config_param === "string" ? config_param : "zhin.config.yml";
38
- const config_obj = typeof config_param === "object" ? config_param : _a.defaultConfig;
39
- const config = new Config(config_file, _a.schema, mergeConfig(_a.defaultConfig, config_obj));
40
- // 调用父类构造函数
41
- super({
42
- logger,
43
- dirs: config.get("plugin_dirs") || [],
44
- debug: config.get("debug"),
45
- });
46
- this.watching(config.filepath, () => config.reload());
47
- this.on("message.send", this.sendMessage.bind(this));
48
- this.on("message.receive", this.receiveMessage.bind(this));
49
- process.on("uncaughtException", (e) => {
50
- const args = e instanceof Error ? [e.message, { stack: e.stack }] : [e];
51
- this.logger.error(...args);
52
- });
53
- process.on("unhandledRejection", (e) => {
54
- const args = e instanceof Error ? [e.message, { stack: e.stack }] : [e];
55
- this.logger.error(...args);
56
- });
57
- this.#config = config;
58
- // 监听配置变更
59
- config.on("change", (before, after) => {
60
- this.handleConfigChange(before, after);
61
- this.broadcast("config.change", before, after);
62
- });
63
- this.defineSchema(_a.schema);
64
- setLevel(config.get("log_level") || LogLevel.INFO);
65
- this.middleware(this.messageMiddleware.bind(this));
66
- }
67
- /**
68
- * 处理配置变更
69
- * 如果上一次变更未完成,等待其完成后再处理新的变更
70
- */
71
- async handleConfigChange(before, after) {
72
- this.logger.info("configuration changed");
73
- // 等待上一次配置变更处理完成
74
- if (this.configChangeLock) {
75
- this.logger.info("Waiting for previous config change to complete...");
76
- await this.configChangeLock;
77
- }
78
- // 创建新的锁
79
- this.configChangeLock = this.applyConfigChanges(before, after);
80
- try {
81
- await this.configChangeLock;
82
- }
83
- finally {
84
- this.configChangeLock = null;
85
- }
86
- }
87
- /**
88
- * 应用配置变更
89
- */
90
- async applyConfigChanges(before, after) {
91
- try {
92
- // 1. 更新日志级别
93
- if (after.log_level !== before.log_level) {
94
- setLevel(after.log_level || LogLevel.INFO);
95
- }
96
- // 2. 更新监听目录
97
- await this.updateWatchDirs(before.plugin_dirs || [], after.plugin_dirs || []);
98
- // 3. 更新插件加载
99
- await this.updatePlugins(before.plugins || [], after.plugins || []);
100
- }
101
- catch (error) {
102
- this.logger.error("Failed to apply configuration changes:", error);
103
- throw error;
104
- }
105
- // 4. 更新数据库连接
106
- if (JSON.stringify(before.database) !== JSON.stringify(after.database)) {
107
- this.database?.stop();
108
- if (after.database) {
109
- this.database = Registry.create(this.config.database.dialect, this.config.database, Object.fromEntries(this.definitions));
110
- await this.database.start();
111
- }
112
- }
113
- }
114
- /**
115
- * 更新监听目录
116
- */
117
- async updateWatchDirs(oldDirs, newDirs) {
118
- const oldResolved = oldDirs.map((dir) => path.resolve(process.cwd(), dir));
119
- const newResolved = newDirs.map((dir) => path.resolve(process.cwd(), dir));
120
- // 找出需要移除的目录
121
- const dirsToRemove = oldResolved.filter((dir) => !newResolved.includes(dir));
122
- // 找出需要添加的目录
123
- const dirsToAdd = newResolved.filter((dir) => !oldResolved.includes(dir));
124
- // 按需监听模式:仍需要更新目录列表用于路径解析,但不启动目录监听
125
- // 移除过时的监听目录
126
- for (const dir of dirsToRemove) {
127
- this.removeDir(dir);
128
- }
129
- // 添加新的监听目录
130
- for (const dir of dirsToAdd) {
131
- this.addDir(dir);
132
- }
133
- }
134
- /**
135
- * 更新插件加载
136
- */
137
- async updatePlugins(oldPlugins, newPlugins) {
138
- // 找出需要卸载的插件
139
- const pluginsToUnload = oldPlugins.filter((plugin) => !newPlugins.includes(plugin));
140
- // 找出需要加载的插件
141
- const pluginsToLoad = newPlugins.filter((plugin) => !oldPlugins.includes(plugin));
142
- // 卸载不再需要的插件
143
- for (const pluginName of pluginsToUnload) {
144
- await this.unloadPlugin(pluginName);
145
- }
146
- // 加载新插件
147
- for (const pluginName of pluginsToLoad) {
148
- this.use(pluginName);
149
- }
150
- // 等待新插件加载完成
151
- if (pluginsToLoad.length > 0) {
152
- await sleep(200);
153
- await this.waitForReady();
154
- }
155
- }
156
- /**
157
- * 卸载插件
158
- */
159
- async unloadPlugin(pluginName) {
160
- // 尝试找到插件 (使用 HMR 提供的方法)
161
- const plugin = this.findPluginByName(pluginName);
162
- if (plugin) {
163
- // 找到插件的文件路径
164
- const filePath = plugin.filename;
165
- // 销毁插件
166
- plugin.dispose();
167
- // 从依赖映射中移除
168
- this.dependencies.delete(filePath);
169
- this.logger.info(`Plugin ${pluginName} unloaded successfully`);
170
- }
171
- else {
172
- this.logger.warn(`Plugin ${pluginName} not found, skipping unload`);
173
- }
174
- }
175
- async receiveMessage(message) {
176
- const middlewares = this.dependencyList.reduce((result, plugin) => {
177
- result.push(...plugin.middlewares);
178
- return result;
179
- }, [...this.middlewares]);
180
- const handle = compose(middlewares);
181
- await handle(message);
182
- }
183
- async messageMiddleware(message, next) {
184
- for (const command of this.commands) {
185
- const result = await command.handle(message, this);
186
- if (result)
187
- message.$reply(result);
188
- }
189
- return next();
190
- }
191
- get commands() {
192
- return this.dependencyList.reduce((result, plugin) => {
193
- result.push(...plugin.commands);
194
- return result;
195
- }, []);
196
- }
197
- /** 默认配置 */
198
- /**
199
- * 默认配置
200
- * - plugin_dirs: 插件目录
201
- * - plugins: 启用插件
202
- * - bots: 机器人配置
203
- * - debug: 是否调试模式
204
- */
205
- static defaultConfig = {
206
- log_level: LogLevel.INFO,
207
- plugin_dirs: [],
208
- plugins: [],
209
- bots: [],
210
- debug: false,
211
- };
212
- middleware(middleware) {
213
- this.middlewares.push(middleware);
214
- }
215
- /**
216
- * 发送消息到指定适配器和机器人
217
- * @param options 消息发送参数(包含 context、bot、内容等)
218
- * @throws 找不到适配器或机器人时抛出异常
219
- */
220
- async sendMessage(options) {
221
- const adapter = this.getContext(options.context);
222
- if (!adapter)
223
- throw new Error(`can't find adapter for name ${options.context}`);
224
- const bot = adapter.bots.get(options.bot);
225
- if (!bot)
226
- throw new Error(`can't find bot ${options.bot} for adapter ${options.context}`);
227
- return bot.$sendMessage(options);
228
- }
229
- async recallMessage(adapter_name, bot_name, id) {
230
- const adapter = this.getContext(adapter_name);
231
- if (!adapter)
232
- throw new Error(`can't find adapter for name ${adapter_name}`);
233
- const bot = adapter.bots.get(bot_name);
234
- if (!bot)
235
- throw new Error(`can't find bot ${bot_name} for adapter ${adapter_name}`);
236
- return bot.$recallMessage(id);
237
- }
238
- /** 同步加载配置文件 */
239
- /**
240
- * 同步加载配置文件(暂不支持,建议使用异步创建)
241
- * @throws 始终抛出异常,提示使用异步方法
242
- */
243
- static loadConfigSync() {
244
- // 由于loadConfig是异步的,我们需要创建一个同步版本
245
- // 或者在这里简化处理,让用户使用异步创建方法
246
- throw new Error("同步加载配置暂不支持,请使用 App.createAsync() 方法");
247
- }
248
- /** 创建插件依赖 */
249
- /**
250
- * 创建插件依赖
251
- * @param name 插件名
252
- * @param filePath 插件文件路径
253
- */
254
- createDependency(name, filePath) {
255
- return new Plugin(this, name, filePath);
256
- }
257
- getConfig(key) {
258
- if (key === undefined) {
259
- return this.#config.config;
260
- }
261
- return this.#config.get(key);
262
- }
263
- setConfig(key, value) {
264
- if (typeof key === "object") {
265
- this.#config.config = key;
266
- }
267
- else if (value !== undefined) {
268
- this.#config.set(key, value);
269
- }
270
- }
271
- changeSchema(key, value) {
272
- if (!_a.schema.options.object) {
273
- _a.schema.options.object = {};
274
- }
275
- _a.schema.options.object[key] = value;
276
- this.#config.reload();
277
- }
278
- get config() {
279
- return this.#config.config;
280
- }
281
- set config(newConfig) {
282
- this.#config.config = newConfig;
283
- if (newConfig.plugin_dirs) {
284
- // 动态更新监听目录
285
- const currentDirs = this.dirs;
286
- const newDirs = newConfig.plugin_dirs;
287
- // 移除不再需要的目录
288
- for (const dir of currentDirs) {
289
- if (!newDirs.includes(dir)) {
290
- this.removeDir(dir);
291
- }
292
- }
293
- // 添加新的目录
294
- for (const dir of newDirs) {
295
- if (!currentDirs.includes(dir)) {
296
- this.addDir(dir);
297
- }
298
- }
299
- }
300
- this.logger.info("App configuration updated", this.config);
301
- }
302
- get definitions() {
303
- return this.dependencyList.reduce((result, plugin) => {
304
- plugin.definitions.forEach((definition, name) => {
305
- result.set(name, definition);
306
- });
307
- return result;
308
- }, new Map([
309
- ["SystemLog", SystemLogDefinition],
310
- ["User", UserDefinition],
311
- ]));
312
- }
313
- /** 使用插件 */
314
- use(filePath) {
315
- this.emit("internal.add", filePath);
316
- }
317
- async #init() {
318
- // 首次初始化时,执行配置应用逻辑
319
- await this.handleConfigChange(_a.defaultConfig, this.config);
320
- // 初始化数据库
321
- const definitions = {};
322
- for (const [name, schema] of this.definitions) {
323
- definitions[name] = schema;
324
- }
325
- if (this.config.database) {
326
- this.database = Registry.create(this.config.database.dialect, this.config.database, definitions);
327
- this.logger.info(`database init...`);
328
- await this.database?.start();
329
- this.logger.info(`database init success`);
330
- this.dispatch("database.ready", this.database);
331
- }
332
- else {
333
- this.logger.info(`database not configured, skipping database init`);
334
- }
335
- // 等待所有插件就绪
336
- await this.waitForReady();
337
- }
338
- /** 启动App */
339
- async start(mode = "prod") {
340
- await generateEnvTypes(process.cwd());
341
- await this.#init();
342
- if (this.database) {
343
- // 初始化日志传输器
344
- this.logTransport = new DatabaseLogTransport(this);
345
- addTransport(this.logTransport);
346
- this.logger.info(`database log transport registered`);
347
- }
348
- this.logger.info("started successfully");
349
- this.dispatch("app.ready");
350
- }
351
- /** 停止App */
352
- async stop() {
353
- this.logger.info("Stopping app...");
354
- // 停止日志清理任务并移除日志传输器
355
- if (this.logTransport) {
356
- this.logTransport.stopCleanup();
357
- removeTransport(this.logTransport);
358
- this.logger.info("database log transport removed");
359
- }
360
- // 销毁所有插件
361
- this.dispose();
362
- this.logger.info("App stopped");
363
- }
364
- getContext(name) {
365
- for (const dep of this.dependencyList) {
366
- if (dep.contexts.has(name)) {
367
- const context = dep.contexts.get(name);
368
- // 如果上下文还没有挂载,等待挂载完成
369
- if (!context.value) {
370
- throw new Error(`Context ${name} is not mounted yet`);
371
- }
372
- return context.value;
373
- }
374
- }
375
- throw new Error(`can't find Context of ${name}`);
376
- }
377
- async handleBeforeSend(options) {
378
- const handlers = this.dependencyList.reduce((result, plugin) => {
379
- result.push(...plugin.listeners("before-message.send"));
380
- return result;
381
- }, []);
382
- for (const handler of handlers) {
383
- const result = await handler(options);
384
- if (result)
385
- options = result;
386
- }
387
- return options;
388
- }
389
- }
390
- _a = App;
391
- (function (App) {
392
- App.schema = Schema.object({
393
- database: Schema.any().description("数据库配置"),
394
- bots: Schema.list(Schema.any()).default([]).description("机器人配置列表"),
395
- log_level: Schema.number()
396
- .default(LogLevel.INFO)
397
- .description("日志级别 (0=DEBUG, 1=INFO, 2=WARN, 3=ERROR, 4=SILENT)")
398
- .min(0)
399
- .max(4),
400
- log: Schema.object({
401
- maxDays: Schema.number().default(7).description("日志最大保存天数"),
402
- maxRecords: Schema.number().default(10000).description("日志最大记录数"),
403
- cleanupInterval: Schema.number()
404
- .default(24)
405
- .description("日志清理间隔(小时)"),
406
- })
407
- .description("日志配置")
408
- .default({
409
- maxDays: 7,
410
- maxRecords: 10000,
411
- cleanupInterval: 24,
412
- }),
413
- plugin_dirs: Schema.list(Schema.string())
414
- .default(["node_modules"])
415
- .description("插件目录列表"),
416
- plugins: Schema.list(Schema.string())
417
- .default([])
418
- .description("需要加载的插件列表"),
419
- debug: Schema.boolean()
420
- .default(false)
421
- .description("是否启用调试模式"),
422
- }).default({
423
- log_level: LogLevel.INFO,
424
- log: {
425
- maxDays: 7,
426
- maxRecords: 10000,
427
- cleanupInterval: 24,
428
- },
429
- plugin_dirs: ["node_modules"],
430
- plugins: [],
431
- debug: false,
432
- });
433
- })(App || (App = {}));
434
- // ============================================================================
435
- // Hooks API
436
- // ============================================================================
437
- function getPlugin(hmr, filename) {
438
- const name = path.basename(filename).replace(path.extname(filename), "");
439
- // 尝试从当前依赖中查找插件
440
- const childPlugin = hmr.findChild(filename);
441
- if (childPlugin) {
442
- return childPlugin;
443
- }
444
- logger.debug(`cant't find plugin for ${filename}, create new`);
445
- const parent = hmr.findParent(filename, getCallerFiles(fileURLToPath(import.meta.url)));
446
- // 创建新的插件实例
447
- const newPlugin = new Plugin(parent, name, filename);
448
- // 添加到当前依赖的子依赖中
449
- parent.dependencies.set(filename, newPlugin);
450
- return newPlugin;
451
- }
452
- /** 获取App实例 */
453
- export function useApp() {
454
- const hmr = HMR.currentHMR;
455
- if (!hmr)
456
- throw new Error("useApp must be called within a App Context");
457
- return hmr;
458
- }
459
- export function defineModel(name, schema) {
460
- const plugin = usePlugin();
461
- return plugin.defineModel(name, schema);
462
- }
463
- export function addPermit(name, checker) {
464
- const plugin = usePlugin();
465
- return plugin.addPermit(name, checker);
466
- }
467
- /** 获取当前插件实例 */
468
- export function usePlugin() {
469
- const hmr = HMR.currentHMR;
470
- if (!hmr)
471
- throw new Error("usePlugin must be called within a App Context");
472
- try {
473
- const currentFile = getCallerFile(import.meta.url);
474
- return getPlugin(hmr, currentFile);
475
- }
476
- catch (error) {
477
- // 如果无法获取当前文件,尝试从当前依赖获取
478
- if (HMR.currentDependency) {
479
- return HMR.currentDependency;
480
- }
481
- throw error;
482
- }
483
- }
484
- export function beforeSend(handler) {
485
- const plugin = usePlugin();
486
- return plugin.beforeSend(handler);
487
- }
488
- /** 创建Context */
489
- export function register(context) {
490
- const plugin = usePlugin();
491
- return plugin.register(context);
492
- }
493
- export function registerAdapter(adapter) {
494
- const plugin = usePlugin();
495
- plugin.app.adapters.push(adapter.name);
496
- plugin.register({
497
- name: adapter.name,
498
- description: `adapter for ${adapter.name}`,
499
- async mounted(plugin) {
500
- await adapter.mounted(plugin);
501
- return adapter;
502
- },
503
- dispose() {
504
- return adapter.dispose(plugin);
505
- },
506
- });
507
- }
508
- /** 标记必需的Context */
509
- export function useContext(...args) {
510
- const plugin = usePlugin();
511
- plugin.useContext(...args);
512
- }
513
- /** 添加中间件 */
514
- export function addMiddleware(middleware) {
515
- const plugin = usePlugin();
516
- plugin.addMiddleware(middleware);
517
- }
518
- export function onDatabaseReady(callback) {
519
- const plugin = usePlugin();
520
- if (plugin.app.database?.isStarted)
521
- callback(plugin.app.database);
522
- plugin.on("database.ready", callback);
523
- }
524
- export function useDatabase() {
525
- const plugin = usePlugin();
526
- return plugin.app.database;
527
- }
528
- export function onAppReady(callback) {
529
- const plugin = usePlugin();
530
- if (plugin.app.isReady)
531
- callback();
532
- plugin.on("app.ready", callback);
533
- }
534
- /** 添加指令 */
535
- export function addCommand(command) {
536
- const plugin = usePlugin();
537
- plugin.addCommand(command);
538
- }
539
- /** 添加组件 */
540
- export function addComponent(component) {
541
- const plugin = usePlugin();
542
- plugin.addComponent(component);
543
- }
544
- /** 监听事件 */
545
- export function onEvent(event, listener) {
546
- const plugin = usePlugin();
547
- plugin.on(event, listener);
548
- }
549
- /** 监听群组消息 */
550
- export function onGroupMessage(handler) {
551
- onEvent("message.group.receive", handler);
552
- }
553
- /** 监听私聊消息 */
554
- export function onPrivateMessage(handler) {
555
- onEvent("message.private.receive", handler);
556
- }
557
- /** 监听所有消息 */
558
- export function onMessage(handler) {
559
- onEvent("message.receive", handler);
560
- }
561
- /** 获取下一条消息 */
562
- export function usePrompt(message) {
563
- const plugin = usePlugin();
564
- return plugin.prompt(message);
565
- }
566
- /** 监听插件挂载事件 */
567
- export function onMounted(hook) {
568
- const plugin = usePlugin();
569
- if (plugin.isReady)
570
- hook(plugin);
571
- plugin.on("self.mounted", hook);
572
- }
573
- /** 监听插件销毁事件 */
574
- export function onDispose(hook) {
575
- const plugin = usePlugin();
576
- if (plugin.isDispose)
577
- hook();
578
- plugin.on("self.dispose", hook);
579
- }
580
- /** 发送消息 */
581
- export async function sendMessage(options) {
582
- const app = useApp();
583
- await app.sendMessage(options);
584
- }
585
- export function defineSchema(rules) {
586
- const plugin = usePlugin();
587
- return plugin.defineSchema(rules);
588
- }
589
- /** 获取App实例(用于高级操作) */
590
- export function getAppInstance() {
591
- return useApp();
592
- }
593
- /** 获取插件日志记录器 */
594
- export function useLogger() {
595
- const plugin = usePlugin();
596
- return plugin.logger;
597
- }
598
- /** 创建App实例的工厂函数 */
599
- export async function createApp(config_file) {
600
- const app = new App(config_file);
601
- await app.start();
602
- return app;
603
- }
604
- //# sourceMappingURL=app.js.map
package/lib/app.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}