@zhin.js/core 1.0.0
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/README.md +159 -0
- package/dist/adapter.d.ts +22 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +67 -0
- package/dist/adapter.js.map +1 -0
- package/dist/app.d.ts +69 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +307 -0
- package/dist/app.js.map +1 -0
- package/dist/bot.d.ts +9 -0
- package/dist/bot.d.ts.map +1 -0
- package/dist/bot.js +2 -0
- package/dist/bot.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +242 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +3 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +3 -0
- package/dist/logger.js.map +1 -0
- package/dist/plugin.d.ts +41 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +95 -0
- package/dist/plugin.js.map +1 -0
- package/dist/types-generator.d.ts +6 -0
- package/dist/types-generator.d.ts.map +1 -0
- package/dist/types-generator.js +69 -0
- package/dist/types-generator.js.map +1 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +29 -0
- package/src/adapter.ts +69 -0
- package/src/app.ts +339 -0
- package/src/bot.ts +9 -0
- package/src/config.ts +276 -0
- package/src/index.ts +14 -0
- package/src/logger.ts +3 -0
- package/src/plugin.ts +122 -0
- package/src/types-generator.ts +74 -0
- package/src/types.ts +74 -0
- package/tests/adapter.test.ts +187 -0
- package/tests/app.test.ts +207 -0
- package/tests/bot.test.ts +132 -0
- package/tests/config.test.ts +328 -0
- package/tests/logger.test.ts +170 -0
- package/tests/plugin.test.ts +226 -0
- package/tests/test-utils.ts +59 -0
- package/tests/types.test.ts +162 -0
- package/tsconfig.json +25 -0
- package/tsconfig.tsbuildinfo +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# @zhin.js/core
|
|
2
|
+
|
|
3
|
+
Zhin Bot Framework的核心包,基于HMR系统构建的机器人框架核心实现。
|
|
4
|
+
|
|
5
|
+
## 主要组件
|
|
6
|
+
|
|
7
|
+
### App
|
|
8
|
+
|
|
9
|
+
继承自HMR的应用核心类,提供:
|
|
10
|
+
- 插件管理
|
|
11
|
+
- 配置管理
|
|
12
|
+
- 适配器管理
|
|
13
|
+
- 消息路由
|
|
14
|
+
- 热更新支持
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { createApp } from '@zhin.js/core'
|
|
18
|
+
|
|
19
|
+
const app = await createApp({
|
|
20
|
+
plugin_dirs: ['./plugins'],
|
|
21
|
+
plugins: ['plugin1'],
|
|
22
|
+
bots: [{
|
|
23
|
+
context: 'adapter-name',
|
|
24
|
+
name: 'bot-name',
|
|
25
|
+
config: {}
|
|
26
|
+
}]
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
await app.start()
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Plugin
|
|
33
|
+
|
|
34
|
+
继承自Dependency的插件基类,提供:
|
|
35
|
+
- 中间件系统
|
|
36
|
+
- 事件监听
|
|
37
|
+
- 定时任务
|
|
38
|
+
- 上下文管理
|
|
39
|
+
- 消息处理
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import { usePlugin, onMessage, addMiddleware } from '@zhin.js/core'
|
|
43
|
+
|
|
44
|
+
const plugin = usePlugin()
|
|
45
|
+
|
|
46
|
+
addMiddleware(async (message, next) => {
|
|
47
|
+
console.log('收到消息:', message)
|
|
48
|
+
await next()
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
onMessage(async (message) => {
|
|
52
|
+
// 处理消息
|
|
53
|
+
})
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Adapter
|
|
57
|
+
|
|
58
|
+
适配器基类,用于实现不同平台的机器人适配:
|
|
59
|
+
```typescript
|
|
60
|
+
import { Adapter, Bot } from '@zhin.js/core'
|
|
61
|
+
|
|
62
|
+
class MyAdapter extends Adapter {
|
|
63
|
+
constructor() {
|
|
64
|
+
super('my-adapter', (plugin, config) => new MyBot(plugin, config))
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Bot
|
|
70
|
+
|
|
71
|
+
机器人接口定义:
|
|
72
|
+
```typescript
|
|
73
|
+
export interface Bot<T extends BotConfig=BotConfig> {
|
|
74
|
+
config: T
|
|
75
|
+
connected?: boolean
|
|
76
|
+
connect(): Promise<void>
|
|
77
|
+
disconnect(): Promise<void>
|
|
78
|
+
sendMessage(options: SendOptions): Promise<void>
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Hooks API
|
|
83
|
+
|
|
84
|
+
### 插件相关
|
|
85
|
+
```typescript
|
|
86
|
+
// 获取插件实例
|
|
87
|
+
const plugin = usePlugin()
|
|
88
|
+
|
|
89
|
+
// 监听事件
|
|
90
|
+
onEvent('event.name', handler)
|
|
91
|
+
|
|
92
|
+
// 监听群消息
|
|
93
|
+
onGroupMessage(handler)
|
|
94
|
+
|
|
95
|
+
// 监听私聊消息
|
|
96
|
+
onPrivateMessage(handler)
|
|
97
|
+
|
|
98
|
+
// 监听所有消息
|
|
99
|
+
onMessage(handler)
|
|
100
|
+
|
|
101
|
+
// 添加中间件
|
|
102
|
+
addMiddleware(middleware)
|
|
103
|
+
|
|
104
|
+
// 添加定时任务
|
|
105
|
+
addCronJob(job)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 上下文相关
|
|
109
|
+
```typescript
|
|
110
|
+
// 注册上下文
|
|
111
|
+
register({
|
|
112
|
+
name: 'myContext',
|
|
113
|
+
async mounted(plugin) {
|
|
114
|
+
return { /* context data */ }
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
// 使用上下文
|
|
119
|
+
const ctx = use('myContext')
|
|
120
|
+
|
|
121
|
+
// 声明上下文依赖
|
|
122
|
+
useContext('ctx1', 'ctx2', async (ctx1, ctx2) => {
|
|
123
|
+
// 使用上下文
|
|
124
|
+
})
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 生命周期
|
|
128
|
+
```typescript
|
|
129
|
+
// 挂载时
|
|
130
|
+
onMounted(async (plugin) => {
|
|
131
|
+
// 初始化
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
// 销毁时
|
|
135
|
+
onDispose(() => {
|
|
136
|
+
// 清理
|
|
137
|
+
})
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## 配置
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
interface AppConfig {
|
|
144
|
+
plugin_dirs?: string[]
|
|
145
|
+
plugins?: string[]
|
|
146
|
+
bots?: BotConfig[]
|
|
147
|
+
debug?: boolean
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
interface BotConfig {
|
|
151
|
+
context: string
|
|
152
|
+
name: string
|
|
153
|
+
config: any
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 许可证
|
|
158
|
+
|
|
159
|
+
MIT License
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BotConfig } from "./types";
|
|
2
|
+
import { Bot } from "./bot";
|
|
3
|
+
import { Plugin } from "./plugin";
|
|
4
|
+
export declare class Adapter<R extends Bot = Bot> {
|
|
5
|
+
#private;
|
|
6
|
+
name: string;
|
|
7
|
+
bots: Map<string, R>;
|
|
8
|
+
constructor(name: string, botFactory: Adapter.BotFactory<R>);
|
|
9
|
+
start(plugin: Plugin): Promise<void>;
|
|
10
|
+
stop(plugin: Plugin): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare namespace Adapter {
|
|
13
|
+
type BotBotConstructor<T extends Bot> = T extends Bot<infer R> ? {
|
|
14
|
+
new (plugin: Plugin, config: R): T;
|
|
15
|
+
} : {
|
|
16
|
+
new (plugin: Plugin, config: BotConfig): T;
|
|
17
|
+
};
|
|
18
|
+
function isBotConstructor<T extends Bot>(fn: BotFactory<T>): fn is BotBotConstructor<T>;
|
|
19
|
+
type BotCreator<T extends Bot> = T extends Bot<infer R> ? (plugin: Plugin, config: R) => T : (plugin: Plugin, config: BotConfig) => T;
|
|
20
|
+
type BotFactory<T extends Bot> = BotBotConstructor<T> | BotCreator<T>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAClC,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,MAAM,EAAC,MAAM,UAAU,CAAC;AAEhC,qBAAa,OAAO,CAAC,CAAC,SAAS,GAAG,GAAC,GAAG;;IAGf,IAAI,EAAC,MAAM;IAFvB,IAAI,EAAC,GAAG,CAAC,MAAM,EAAC,CAAC,CAAC,CAAqB;gBAE3B,IAAI,EAAC,MAAM,EAAC,UAAU,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAGzD,KAAK,CAAC,MAAM,EAAC,MAAM;IA2BnB,IAAI,CAAC,MAAM,EAAC,MAAM;CAkB3B;AACD,yBAAiB,OAAO,CAAC;IACrB,KAAY,iBAAiB,CAAC,CAAC,SAAS,GAAG,IAAE,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG;QAClE,KAAI,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,CAAC,GAAE,CAAC,CAAA;KAChC,GAAE;QACC,KAAI,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,GAAE,CAAC,CAAA;KACxC,CAAA;IACD,SAAgB,gBAAgB,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAG7F;IACD,KAAY,UAAU,CAAC,CAAC,SAAS,GAAG,IAAE,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAE,SAAS,KAAK,CAAC,CAAA;IACtI,KAAY,UAAU,CAAC,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAC,UAAU,CAAC,CAAC,CAAC,CAAA;CAC7E"}
|
package/dist/adapter.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export class Adapter {
|
|
2
|
+
name;
|
|
3
|
+
bots = new Map();
|
|
4
|
+
#botFactory;
|
|
5
|
+
constructor(name, botFactory) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.#botFactory = botFactory;
|
|
8
|
+
}
|
|
9
|
+
async start(plugin) {
|
|
10
|
+
const configs = plugin.app.getConfig().bots?.filter(c => c.context === this.name);
|
|
11
|
+
if (!configs?.length)
|
|
12
|
+
return;
|
|
13
|
+
try {
|
|
14
|
+
for (const config of configs) {
|
|
15
|
+
let bot;
|
|
16
|
+
if (Adapter.isBotConstructor(this.#botFactory)) {
|
|
17
|
+
bot = new this.#botFactory(plugin, config);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
bot = this.#botFactory(plugin, config);
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
await bot.connect();
|
|
24
|
+
plugin.logger.info(`bot ${config.name} of adapter ${this.name} connected`);
|
|
25
|
+
this.bots.set(config.name, bot);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
// 如果连接失败,确保错误正确传播
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
plugin.logger.info(`adapter ${this.name} started`);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
// 确保错误正确传播
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async stop(plugin) {
|
|
40
|
+
try {
|
|
41
|
+
for (const [name, bot] of this.bots) {
|
|
42
|
+
try {
|
|
43
|
+
await bot.disconnect();
|
|
44
|
+
plugin.logger.info(`bot ${name} of adapter ${this.name} disconnected`);
|
|
45
|
+
this.bots.delete(name);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
// 如果断开连接失败,确保错误正确传播
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
plugin.logger.info(`adapter ${this.name} stopped`);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// 确保错误正确传播
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
(function (Adapter) {
|
|
61
|
+
function isBotConstructor(fn) {
|
|
62
|
+
return fn.prototype &&
|
|
63
|
+
fn.prototype.constructor === fn;
|
|
64
|
+
}
|
|
65
|
+
Adapter.isBotConstructor = isBotConstructor;
|
|
66
|
+
})(Adapter || (Adapter = {}));
|
|
67
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,OAAO;IAGG;IAFZ,IAAI,GAAe,IAAI,GAAG,EAAa,CAAA;IAC9C,WAAW,CAAsB;IACjC,YAAmB,IAAW,EAAC,UAAgC;QAA5C,SAAI,GAAJ,IAAI,CAAO;QAC1B,IAAI,CAAC,WAAW,GAAC,UAAU,CAAA;IAC/B,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,MAAa;QACrB,MAAM,OAAO,GAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,OAAO,KAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3E,IAAG,CAAC,OAAO,EAAE,MAAM;YAAE,OAAM;QAC3B,IAAI,CAAC;YACD,KAAI,MAAM,MAAM,IAAI,OAAO,EAAC,CAAC;gBACzB,IAAI,GAAM,CAAA;gBACV,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC7C,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAC,MAAM,CAAM,CAAA;gBAClD,CAAC;qBAAM,CAAC;oBACJ,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAC,MAAM,CAAM,CAAA;gBAC9C,CAAC;gBACD,IAAI,CAAC;oBACD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAA;oBACnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,eAAe,IAAI,CAAC,IAAI,YAAY,CAAC,CAAA;oBAC1E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAC,GAAG,CAAC,CAAA;gBAClC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,kBAAkB;oBAClB,MAAM,KAAK,CAAA;gBACf,CAAC;YACL,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,UAAU,CAAC,CAAA;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,WAAW;YACX,MAAM,KAAK,CAAA;QACf,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,MAAa;QACpB,IAAI,CAAC;YACD,KAAI,MAAM,CAAC,IAAI,EAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAC,CAAC;gBAC/B,IAAI,CAAC;oBACD,MAAM,GAAG,CAAC,UAAU,EAAE,CAAA;oBACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,eAAe,IAAI,CAAC,IAAI,eAAe,CAAC,CAAA;oBACtE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC1B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,oBAAoB;oBACpB,MAAM,KAAK,CAAA;gBACf,CAAC;YACL,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,UAAU,CAAC,CAAA;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,WAAW;YACX,MAAM,KAAK,CAAA;QACf,CAAC;IACL,CAAC;CACJ;AACD,WAAiB,OAAO;IAMpB,SAAgB,gBAAgB,CAAgB,EAAiB;QAC7D,OAAO,EAAE,CAAC,SAAS;YACf,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,EAAE,CAAA;IACvC,CAAC;IAHe,wBAAgB,mBAG/B,CAAA;AAGL,CAAC,EAZgB,OAAO,KAAP,OAAO,QAYvB"}
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { SideEffect, GlobalContext } from '@zhin.js/types';
|
|
2
|
+
import { HMR, Context, Logger } from '@zhin.js/hmr';
|
|
3
|
+
import { AppConfig, Message, BeforeSendHandler, SendOptions } from './types.js';
|
|
4
|
+
import { CronJob, EventListener, MessageMiddleware, Plugin } from "./plugin.js";
|
|
5
|
+
import { Adapter } from "./adapter";
|
|
6
|
+
/**
|
|
7
|
+
* App类:继承自HMR,提供热更新的机器人框架
|
|
8
|
+
*/
|
|
9
|
+
export declare class App extends HMR<Plugin> {
|
|
10
|
+
static currentPlugin: Plugin;
|
|
11
|
+
private config;
|
|
12
|
+
constructor(config?: Partial<AppConfig>);
|
|
13
|
+
/** 默认配置 */
|
|
14
|
+
static defaultConfig: AppConfig;
|
|
15
|
+
sendMessage(options: SendOptions): Promise<void>;
|
|
16
|
+
/** 同步加载配置文件 */
|
|
17
|
+
static loadConfigSync(): AppConfig;
|
|
18
|
+
/** 创建插件依赖 */
|
|
19
|
+
createDependency(name: string, filePath: string): Plugin;
|
|
20
|
+
/** 获取App配置 */
|
|
21
|
+
getConfig(): Readonly<AppConfig>;
|
|
22
|
+
/** 更新App配置 */
|
|
23
|
+
updateConfig(config: Partial<AppConfig>): void;
|
|
24
|
+
/** 使用插件 */
|
|
25
|
+
use(filePath: string): void;
|
|
26
|
+
/** 启动App */
|
|
27
|
+
start(mode?: 'dev' | 'prod'): Promise<void>;
|
|
28
|
+
/** 停止App */
|
|
29
|
+
stop(): Promise<void>;
|
|
30
|
+
getContext<T>(name: string): T;
|
|
31
|
+
handleBeforeSend(options: SendOptions): Promise<SendOptions>;
|
|
32
|
+
getLogger(...names: string[]): Logger;
|
|
33
|
+
}
|
|
34
|
+
export declare function createApp(config?: Partial<AppConfig>): Promise<App>;
|
|
35
|
+
/** 获取App实例 */
|
|
36
|
+
export declare function useApp(): App;
|
|
37
|
+
/** 获取当前插件实例 */
|
|
38
|
+
export declare function usePlugin(): Plugin;
|
|
39
|
+
export declare function beforeSend(handler: BeforeSendHandler): void;
|
|
40
|
+
/** 创建Context */
|
|
41
|
+
export declare function register<T>(context: Context<T, Plugin>): Context<T, Plugin>;
|
|
42
|
+
export declare function registerAdapter<T extends Adapter>(adapter: T): void;
|
|
43
|
+
export declare function use<T extends keyof GlobalContext>(name: T): GlobalContext[T];
|
|
44
|
+
export declare function use<T>(name: string): T;
|
|
45
|
+
/** 标记必需的Context */
|
|
46
|
+
export declare function useContext<T extends (keyof GlobalContext)[]>(...args: [...T, sideEffect: SideEffect<T>]): void;
|
|
47
|
+
/** 添加中间件 */
|
|
48
|
+
export declare function addMiddleware(middleware: MessageMiddleware): void;
|
|
49
|
+
/** 监听事件 */
|
|
50
|
+
export declare function onEvent<T = any>(event: string, listener: EventListener<T>): void;
|
|
51
|
+
/** 监听群组消息 */
|
|
52
|
+
export declare function onGroupMessage(handler: (message: Message) => void | Promise<void>): void;
|
|
53
|
+
/** 监听私聊消息 */
|
|
54
|
+
export declare function onPrivateMessage(handler: (message: Message) => void | Promise<void>): void;
|
|
55
|
+
/** 监听所有消息 */
|
|
56
|
+
export declare function onMessage(handler: (message: Message) => void | Promise<void>): void;
|
|
57
|
+
/** 监听插件挂载事件 */
|
|
58
|
+
export declare function onMounted(hook: (plugin: Plugin) => Promise<void> | void): void;
|
|
59
|
+
/** 监听插件销毁事件 */
|
|
60
|
+
export declare function onDispose(hook: () => void): void;
|
|
61
|
+
/** 添加定时任务 */
|
|
62
|
+
export declare function addCronJob(job: CronJob): void;
|
|
63
|
+
/** 发送消息 */
|
|
64
|
+
export declare function sendMessage(options: SendOptions): Promise<void>;
|
|
65
|
+
/** 获取App实例(用于高级操作) */
|
|
66
|
+
export declare function getAppInstance(): App;
|
|
67
|
+
/** 获取插件日志记录器 */
|
|
68
|
+
export declare function useLogger(): Logger;
|
|
69
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAA+C,MAAM,cAAc,CAAC;AACjG,OAAO,EACH,SAAS,EACT,OAAO,EAAE,iBAAiB,EAAC,WAAW,EACzC,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,EAAC,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAKlC;;GAEG;AACH,qBAAa,GAAI,SAAQ,GAAG,CAAC,MAAM,CAAC;IAChC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC;IA6BvC,WAAW;IACX,MAAM,CAAC,aAAa,EAAE,SAAS,CAK7B;IACI,WAAW,CAAC,OAAO,EAAC,WAAW;IAOrC,eAAe;IACf,MAAM,CAAC,cAAc,IAAI,SAAS;IAMlC,aAAa;IACb,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIxD,cAAc;IACd,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;IAIhC,cAAc;IACd,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IA2B9C,WAAW;IACX,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI3B,YAAY;IACN,KAAK,CAAC,IAAI,GAAE,KAAK,GAAG,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzD,YAAY;IACN,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,UAAU,CAAC,CAAC,EAAE,IAAI,EAAC,MAAM,GAAE,CAAC;IActB,gBAAgB,CAAC,OAAO,EAAC,WAAW;IAW1C,SAAS,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;CAGxC;AAuBD,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CA0BzE;AACD,cAAc;AACd,wBAAgB,MAAM,IAAI,GAAG,CAI5B;AAED,eAAe;AACf,wBAAgB,SAAS,IAAI,MAAM,CAclC;AACD,wBAAgB,UAAU,CAAC,OAAO,EAAC,iBAAiB,QAGnD;AACD,gBAAgB;AAChB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,EAAC,MAAM,CAAC,CAGzE;AACD,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,EAAC,CAAC,QAY3D;AAED,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,aAAa,EAAE,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;AAC7E,wBAAgB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAA;AAMvC,mBAAmB;AACnB,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,aAAa,CAAC,EAAE,EAAE,GAAG,IAAI,EAAC,CAAC,GAAG,CAAC,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAG3G;AAED,YAAY;AACZ,wBAAgB,aAAa,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAGjE;AAED,WAAW;AACX,wBAAgB,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAGhF;AAED,aAAa;AACb,wBAAgB,cAAc,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAExF;AAED,aAAa;AACb,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAE1F;AAED,aAAa;AACb,wBAAgB,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEnF;AAED,eAAe;AACf,wBAAgB,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAI9E;AAED,eAAe;AACf,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAIhD;AAED,aAAa;AACb,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAG7C;AAED,WAAW;AACX,wBAAsB,WAAW,CAAC,OAAO,EAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpE;AAED,sBAAsB;AACtB,wBAAgB,cAAc,IAAI,GAAG,CAEpC;AAED,gBAAgB;AAChB,wBAAgB,SAAS,IAAI,MAAM,CAGlC"}
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { HMR, ConsoleLogger, getCallerFile, getCallerFiles } from '@zhin.js/hmr';
|
|
4
|
+
import { loadConfig } from './config.js';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { generateEnvTypes } from './types-generator.js';
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
import { Plugin } from "./plugin.js";
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// App 类
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* App类:继承自HMR,提供热更新的机器人框架
|
|
14
|
+
*/
|
|
15
|
+
export class App extends HMR {
|
|
16
|
+
static currentPlugin;
|
|
17
|
+
config;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
// 如果没有传入配置或配置为空对象,尝试自动加载配置文件
|
|
20
|
+
let finalConfig;
|
|
21
|
+
if (!config || Object.keys(config).length === 0) {
|
|
22
|
+
try {
|
|
23
|
+
// 异步加载配置,这里需要改为同步初始化
|
|
24
|
+
logger.info('🔍 正在查找配置文件...');
|
|
25
|
+
finalConfig = App.loadConfigSync();
|
|
26
|
+
logger.info('✅ 配置文件加载成功');
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
logger.warn('⚠️ 配置文件加载失败,使用默认配置:', error instanceof Error ? error.message : error);
|
|
30
|
+
finalConfig = Object.assign({}, App.defaultConfig);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// 合并默认配置和传入的配置
|
|
35
|
+
finalConfig = Object.assign({}, App.defaultConfig, config);
|
|
36
|
+
}
|
|
37
|
+
// 调用父类构造函数
|
|
38
|
+
super('Zhin', {
|
|
39
|
+
logger: new ConsoleLogger('[Zhin]'),
|
|
40
|
+
dirs: finalConfig.plugin_dirs || [],
|
|
41
|
+
extensions: new Set(['.js', '.ts']),
|
|
42
|
+
debug: finalConfig.debug
|
|
43
|
+
});
|
|
44
|
+
this.on('message.send', this.sendMessage.bind(this));
|
|
45
|
+
this.config = finalConfig;
|
|
46
|
+
}
|
|
47
|
+
/** 默认配置 */
|
|
48
|
+
static defaultConfig = {
|
|
49
|
+
plugin_dirs: ['./plugins'],
|
|
50
|
+
plugins: [],
|
|
51
|
+
bots: [],
|
|
52
|
+
debug: false,
|
|
53
|
+
};
|
|
54
|
+
async sendMessage(options) {
|
|
55
|
+
const adapter = this.getContext(options.context);
|
|
56
|
+
if (!adapter)
|
|
57
|
+
throw new Error(`can't find adapter for name ${options.context}`);
|
|
58
|
+
const bot = adapter.bots.get(options.bot);
|
|
59
|
+
if (!bot)
|
|
60
|
+
throw new Error(`can't find bot ${options.bot} for adapter ${options.bot}`);
|
|
61
|
+
return bot.sendMessage(options);
|
|
62
|
+
}
|
|
63
|
+
/** 同步加载配置文件 */
|
|
64
|
+
static loadConfigSync() {
|
|
65
|
+
// 由于loadConfig是异步的,我们需要创建一个同步版本
|
|
66
|
+
// 或者在这里简化处理,让用户使用异步创建方法
|
|
67
|
+
throw new Error('同步加载配置暂不支持,请使用 App.createAsync() 方法');
|
|
68
|
+
}
|
|
69
|
+
/** 创建插件依赖 */
|
|
70
|
+
createDependency(name, filePath) {
|
|
71
|
+
return new Plugin(this, name, filePath);
|
|
72
|
+
}
|
|
73
|
+
/** 获取App配置 */
|
|
74
|
+
getConfig() {
|
|
75
|
+
return { ...this.config };
|
|
76
|
+
}
|
|
77
|
+
/** 更新App配置 */
|
|
78
|
+
updateConfig(config) {
|
|
79
|
+
this.config = { ...this.config, ...config };
|
|
80
|
+
// 更新HMR配置
|
|
81
|
+
if (config.plugin_dirs) {
|
|
82
|
+
// 动态更新监听目录
|
|
83
|
+
const currentDirs = this.getWatchDirs();
|
|
84
|
+
const newDirs = config.plugin_dirs;
|
|
85
|
+
// 移除不再需要的目录
|
|
86
|
+
for (const dir of currentDirs) {
|
|
87
|
+
if (!newDirs.includes(dir)) {
|
|
88
|
+
this.removeWatchDir(dir);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// 添加新的目录
|
|
92
|
+
for (const dir of newDirs) {
|
|
93
|
+
if (!currentDirs.includes(dir)) {
|
|
94
|
+
this.addWatchDir(dir);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
this.logger.info('App configuration updated', this.config);
|
|
99
|
+
}
|
|
100
|
+
/** 使用插件 */
|
|
101
|
+
use(filePath) {
|
|
102
|
+
this.emit('internal.add', filePath);
|
|
103
|
+
}
|
|
104
|
+
/** 启动App */
|
|
105
|
+
async start(mode = 'prod') {
|
|
106
|
+
await generateEnvTypes(process.cwd());
|
|
107
|
+
// 加载插件
|
|
108
|
+
for (const pluginName of this.config.plugins || []) {
|
|
109
|
+
this.use(pluginName);
|
|
110
|
+
}
|
|
111
|
+
// 等待所有插件就绪
|
|
112
|
+
await this.waitForReady();
|
|
113
|
+
this.logger.info('started successfully');
|
|
114
|
+
}
|
|
115
|
+
/** 停止App */
|
|
116
|
+
async stop() {
|
|
117
|
+
this.logger.info('Stopping app...');
|
|
118
|
+
// 销毁所有插件
|
|
119
|
+
this.dispose();
|
|
120
|
+
this.logger.info('App stopped');
|
|
121
|
+
}
|
|
122
|
+
getContext(name) {
|
|
123
|
+
for (const dep of this.dependencyList) {
|
|
124
|
+
if (dep.contexts.has(name)) {
|
|
125
|
+
const context = dep.contexts.get(name);
|
|
126
|
+
// 如果上下文还没有挂载,等待挂载完成
|
|
127
|
+
if (!context.value) {
|
|
128
|
+
throw new Error(`Context ${name} is not mounted yet`);
|
|
129
|
+
}
|
|
130
|
+
return context.value;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
throw new Error(`can't find Context of ${name}`);
|
|
134
|
+
}
|
|
135
|
+
async handleBeforeSend(options) {
|
|
136
|
+
const handlers = this.dependencyList.reduce((result, plugin) => {
|
|
137
|
+
result.push(...plugin.listeners('before-message.send'));
|
|
138
|
+
return result;
|
|
139
|
+
}, []);
|
|
140
|
+
for (const handler of handlers) {
|
|
141
|
+
const result = await handler(options);
|
|
142
|
+
if (result)
|
|
143
|
+
options = result;
|
|
144
|
+
}
|
|
145
|
+
return options;
|
|
146
|
+
}
|
|
147
|
+
getLogger(...names) {
|
|
148
|
+
return new ConsoleLogger(`[${[...names].join('/')}]`, process.env.NODE_ENV === 'development');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// ============================================================================
|
|
152
|
+
// Hooks API
|
|
153
|
+
// ============================================================================
|
|
154
|
+
function getPlugin(hmr, filename) {
|
|
155
|
+
const name = path.basename(filename).replace(path.extname(filename), '');
|
|
156
|
+
// 尝试从当前依赖中查找插件
|
|
157
|
+
const childPlugin = hmr.findChild(filename);
|
|
158
|
+
if (childPlugin) {
|
|
159
|
+
return childPlugin;
|
|
160
|
+
}
|
|
161
|
+
const parent = hmr.findParent(filename, getCallerFiles(fileURLToPath(import.meta.url)));
|
|
162
|
+
// 创建新的插件实例
|
|
163
|
+
const newPlugin = new Plugin(parent, name, filename);
|
|
164
|
+
// 添加到当前依赖的子依赖中
|
|
165
|
+
parent.dependencies.set(filename, newPlugin);
|
|
166
|
+
return newPlugin;
|
|
167
|
+
}
|
|
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
|
+
/** 获取App实例 */
|
|
198
|
+
export function useApp() {
|
|
199
|
+
const hmr = HMR.currentHMR;
|
|
200
|
+
if (!hmr)
|
|
201
|
+
throw new Error('useApp must be called within a App Context');
|
|
202
|
+
return hmr;
|
|
203
|
+
}
|
|
204
|
+
/** 获取当前插件实例 */
|
|
205
|
+
export function usePlugin() {
|
|
206
|
+
const hmr = HMR.currentHMR;
|
|
207
|
+
if (!hmr)
|
|
208
|
+
throw new Error('usePlugin must be called within a App Context');
|
|
209
|
+
try {
|
|
210
|
+
const currentFile = getCallerFile(import.meta.url);
|
|
211
|
+
return getPlugin(hmr, currentFile);
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
// 如果无法获取当前文件,尝试从当前依赖获取
|
|
215
|
+
if (HMR.currentDependency) {
|
|
216
|
+
return HMR.currentDependency;
|
|
217
|
+
}
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
export function beforeSend(handler) {
|
|
222
|
+
const plugin = usePlugin();
|
|
223
|
+
return plugin.beforeSend(handler);
|
|
224
|
+
}
|
|
225
|
+
/** 创建Context */
|
|
226
|
+
export function register(context) {
|
|
227
|
+
const plugin = usePlugin();
|
|
228
|
+
return plugin.register(context);
|
|
229
|
+
}
|
|
230
|
+
export function registerAdapter(adapter) {
|
|
231
|
+
const plugin = usePlugin();
|
|
232
|
+
plugin.register({
|
|
233
|
+
name: adapter.name,
|
|
234
|
+
async mounted(plugin) {
|
|
235
|
+
await adapter.start(plugin);
|
|
236
|
+
return adapter;
|
|
237
|
+
},
|
|
238
|
+
dispose() {
|
|
239
|
+
return adapter.stop(plugin);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
export function use(name) {
|
|
244
|
+
const plugin = usePlugin();
|
|
245
|
+
return plugin.use(name);
|
|
246
|
+
}
|
|
247
|
+
/** 标记必需的Context */
|
|
248
|
+
export function useContext(...args) {
|
|
249
|
+
const plugin = usePlugin();
|
|
250
|
+
plugin.useContext(...args);
|
|
251
|
+
}
|
|
252
|
+
/** 添加中间件 */
|
|
253
|
+
export function addMiddleware(middleware) {
|
|
254
|
+
const plugin = usePlugin();
|
|
255
|
+
plugin.addMiddleware(middleware);
|
|
256
|
+
}
|
|
257
|
+
/** 监听事件 */
|
|
258
|
+
export function onEvent(event, listener) {
|
|
259
|
+
const plugin = usePlugin();
|
|
260
|
+
plugin.on(event, listener);
|
|
261
|
+
}
|
|
262
|
+
/** 监听群组消息 */
|
|
263
|
+
export function onGroupMessage(handler) {
|
|
264
|
+
onEvent('message.group.receive', handler);
|
|
265
|
+
}
|
|
266
|
+
/** 监听私聊消息 */
|
|
267
|
+
export function onPrivateMessage(handler) {
|
|
268
|
+
onEvent('message.private.receive', handler);
|
|
269
|
+
}
|
|
270
|
+
/** 监听所有消息 */
|
|
271
|
+
export function onMessage(handler) {
|
|
272
|
+
onEvent('message.receive', handler);
|
|
273
|
+
}
|
|
274
|
+
/** 监听插件挂载事件 */
|
|
275
|
+
export function onMounted(hook) {
|
|
276
|
+
const plugin = usePlugin();
|
|
277
|
+
if (plugin.isReady)
|
|
278
|
+
hook(plugin);
|
|
279
|
+
plugin.on('self.mounted', hook);
|
|
280
|
+
}
|
|
281
|
+
/** 监听插件销毁事件 */
|
|
282
|
+
export function onDispose(hook) {
|
|
283
|
+
const plugin = usePlugin();
|
|
284
|
+
if (plugin.isDispose)
|
|
285
|
+
hook();
|
|
286
|
+
plugin.on('self.dispose', hook);
|
|
287
|
+
}
|
|
288
|
+
/** 添加定时任务 */
|
|
289
|
+
export function addCronJob(job) {
|
|
290
|
+
const plugin = usePlugin();
|
|
291
|
+
plugin.addCronJob(job);
|
|
292
|
+
}
|
|
293
|
+
/** 发送消息 */
|
|
294
|
+
export async function sendMessage(options) {
|
|
295
|
+
const app = useApp();
|
|
296
|
+
await app.sendMessage(options);
|
|
297
|
+
}
|
|
298
|
+
/** 获取App实例(用于高级操作) */
|
|
299
|
+
export function getAppInstance() {
|
|
300
|
+
return useApp();
|
|
301
|
+
}
|
|
302
|
+
/** 获取插件日志记录器 */
|
|
303
|
+
export function useLogger() {
|
|
304
|
+
const plugin = usePlugin();
|
|
305
|
+
return plugin.logger;
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=app.js.map
|
package/dist/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/dist/bot.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BotConfig, SendOptions } from "./types";
|
|
2
|
+
export interface Bot<T extends BotConfig = BotConfig> {
|
|
3
|
+
config: T;
|
|
4
|
+
connected?: boolean;
|
|
5
|
+
connect(): Promise<void>;
|
|
6
|
+
disconnect(): Promise<void>;
|
|
7
|
+
sendMessage(options: SendOptions): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=bot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,SAAS,CAAC;AAEpD,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,SAAS,GAAC,SAAS;IAC9C,MAAM,EAAE,CAAC,CAAC;IACV,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,IAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,UAAU,IAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnD"}
|
package/dist/bot.js
ADDED