@zhin.js/core 1.0.0 → 1.0.1

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 (121) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +21 -0
  3. package/README.md +295 -74
  4. package/lib/adapter.d.ts +39 -0
  5. package/lib/adapter.d.ts.map +1 -0
  6. package/{dist → lib}/adapter.js +20 -2
  7. package/lib/adapter.js.map +1 -0
  8. package/lib/app.d.ts +115 -0
  9. package/lib/app.d.ts.map +1 -0
  10. package/{dist → lib}/app.js +148 -78
  11. package/lib/app.js.map +1 -0
  12. package/lib/bot.d.ts +31 -0
  13. package/lib/bot.d.ts.map +1 -0
  14. package/lib/command.d.ts +32 -0
  15. package/lib/command.d.ts.map +1 -0
  16. package/lib/command.js +46 -0
  17. package/lib/command.js.map +1 -0
  18. package/lib/component.d.ts +107 -0
  19. package/lib/component.d.ts.map +1 -0
  20. package/lib/component.js +273 -0
  21. package/lib/component.js.map +1 -0
  22. package/{dist → lib}/config.d.ts.map +1 -1
  23. package/{dist → lib}/config.js +6 -9
  24. package/lib/config.js.map +1 -0
  25. package/lib/cron.d.ts +81 -0
  26. package/lib/cron.d.ts.map +1 -0
  27. package/lib/cron.js +159 -0
  28. package/lib/cron.js.map +1 -0
  29. package/lib/errors.d.ts +165 -0
  30. package/lib/errors.d.ts.map +1 -0
  31. package/lib/errors.js +306 -0
  32. package/lib/errors.js.map +1 -0
  33. package/lib/index.d.ts +15 -0
  34. package/lib/index.d.ts.map +1 -0
  35. package/lib/index.js +17 -0
  36. package/lib/index.js.map +1 -0
  37. package/lib/message.d.ts +44 -0
  38. package/lib/message.d.ts.map +1 -0
  39. package/lib/message.js +11 -0
  40. package/lib/message.js.map +1 -0
  41. package/lib/plugin.d.ts +50 -0
  42. package/lib/plugin.d.ts.map +1 -0
  43. package/lib/plugin.js +170 -0
  44. package/lib/plugin.js.map +1 -0
  45. package/lib/prompt.d.ts +116 -0
  46. package/lib/prompt.d.ts.map +1 -0
  47. package/lib/prompt.js +240 -0
  48. package/lib/prompt.js.map +1 -0
  49. package/lib/schema.d.ts +83 -0
  50. package/lib/schema.d.ts.map +1 -0
  51. package/lib/schema.js +245 -0
  52. package/lib/schema.js.map +1 -0
  53. package/{dist → lib}/types-generator.d.ts.map +1 -1
  54. package/{dist → lib}/types-generator.js +6 -3
  55. package/lib/types-generator.js.map +1 -0
  56. package/lib/types.d.ts +119 -0
  57. package/lib/types.d.ts.map +1 -0
  58. package/lib/utils.d.ts +52 -0
  59. package/lib/utils.d.ts.map +1 -0
  60. package/lib/utils.js +338 -0
  61. package/lib/utils.js.map +1 -0
  62. package/package.json +15 -9
  63. package/src/adapter.ts +25 -9
  64. package/src/app.ts +363 -258
  65. package/src/bot.ts +29 -8
  66. package/src/command.ts +50 -0
  67. package/src/component.ts +318 -0
  68. package/src/config.ts +9 -12
  69. package/src/cron.ts +176 -0
  70. package/src/errors.ts +365 -0
  71. package/src/index.ts +16 -13
  72. package/src/message.ts +44 -0
  73. package/src/plugin.ts +148 -66
  74. package/src/prompt.ts +290 -0
  75. package/src/schema.ts +273 -0
  76. package/src/types-generator.ts +7 -3
  77. package/src/types.ts +77 -30
  78. package/src/utils.ts +312 -0
  79. package/tests/adapter.test.ts +36 -22
  80. package/tests/app.test.ts +30 -0
  81. package/tests/command.test.ts +545 -0
  82. package/tests/component.test.ts +656 -0
  83. package/tests/config.test.ts +1 -1
  84. package/tests/errors.test.ts +311 -0
  85. package/tests/message.test.ts +402 -0
  86. package/tests/plugin.test.ts +275 -143
  87. package/tests/utils.test.ts +80 -0
  88. package/tsconfig.json +3 -4
  89. package/dist/adapter.d.ts +0 -22
  90. package/dist/adapter.d.ts.map +0 -1
  91. package/dist/adapter.js.map +0 -1
  92. package/dist/app.d.ts +0 -69
  93. package/dist/app.d.ts.map +0 -1
  94. package/dist/app.js.map +0 -1
  95. package/dist/bot.d.ts +0 -9
  96. package/dist/bot.d.ts.map +0 -1
  97. package/dist/config.js.map +0 -1
  98. package/dist/index.d.ts +0 -9
  99. package/dist/index.d.ts.map +0 -1
  100. package/dist/index.js +0 -12
  101. package/dist/index.js.map +0 -1
  102. package/dist/logger.d.ts +0 -3
  103. package/dist/logger.d.ts.map +0 -1
  104. package/dist/logger.js +0 -3
  105. package/dist/logger.js.map +0 -1
  106. package/dist/plugin.d.ts +0 -41
  107. package/dist/plugin.d.ts.map +0 -1
  108. package/dist/plugin.js +0 -95
  109. package/dist/plugin.js.map +0 -1
  110. package/dist/types-generator.js.map +0 -1
  111. package/dist/types.d.ts +0 -69
  112. package/dist/types.d.ts.map +0 -1
  113. package/src/logger.ts +0 -3
  114. package/tests/logger.test.ts +0 -170
  115. package/tsconfig.tsbuildinfo +0 -1
  116. /package/{dist → lib}/bot.js +0 -0
  117. /package/{dist → lib}/bot.js.map +0 -0
  118. /package/{dist → lib}/config.d.ts +0 -0
  119. /package/{dist → lib}/types-generator.d.ts +0 -0
  120. /package/{dist → lib}/types.js +0 -0
  121. /package/{dist → lib}/types.js.map +0 -0
package/lib/utils.js ADDED
@@ -0,0 +1,338 @@
1
+ export function getValueWithRuntime(template, ctx) {
2
+ const result = evaluate(template, ctx);
3
+ if (result === `return(${template})`)
4
+ return undefined;
5
+ return result;
6
+ }
7
+ export const evaluate = (exp, context) => {
8
+ const result = execute(`return(${exp})`, context);
9
+ // 如果结果是原始表达式,说明访问被阻止,返回 undefined
10
+ if (result === `return(${exp})`)
11
+ return undefined;
12
+ return result;
13
+ };
14
+ const evalCache = Object.create(null);
15
+ export const execute = (exp, context) => {
16
+ const fn = evalCache[exp] || (evalCache[exp] = toFunction(exp));
17
+ context = {
18
+ ...context,
19
+ process: undefined,
20
+ global: undefined,
21
+ Buffer: undefined,
22
+ crypto: undefined
23
+ };
24
+ try {
25
+ return fn.apply(context, [context]);
26
+ }
27
+ catch {
28
+ return exp;
29
+ }
30
+ };
31
+ const toFunction = (exp) => {
32
+ try {
33
+ return new Function(`$data`, `with($data){${exp}}`);
34
+ }
35
+ catch {
36
+ return () => { };
37
+ }
38
+ };
39
+ export function compiler(template, ctx) {
40
+ const matched = [...template.matchAll(/\${([^}]*?)}/g)];
41
+ for (const item of matched) {
42
+ const tpl = item[1];
43
+ let value = getValueWithRuntime(tpl, ctx);
44
+ if (value === tpl)
45
+ continue;
46
+ if (typeof value !== 'string')
47
+ value = JSON.stringify(value, null, 2);
48
+ template = template.replace(`\${${item[1]}}`, value);
49
+ }
50
+ return template;
51
+ }
52
+ export function segment(type, data) {
53
+ return {
54
+ type,
55
+ data
56
+ };
57
+ }
58
+ (function (segment) {
59
+ function escape(text) {
60
+ if (typeof text !== 'string')
61
+ return text;
62
+ return text
63
+ .replace(/&/g, '&')
64
+ .replace(/</g, '&lt;')
65
+ .replace(/>/g, '&gt;')
66
+ .replace(/"/g, '&quot;')
67
+ .replace(/'/g, '&#39;');
68
+ }
69
+ segment.escape = escape;
70
+ function unescape(text) {
71
+ if (typeof text !== 'string')
72
+ return text;
73
+ return text
74
+ .replace(/&lt;/g, '<')
75
+ .replace(/&gt;/g, '>')
76
+ .replace(/&quot;/g, '"')
77
+ .replace(/&#39;/g, "'")
78
+ .replace(/&amp;/g, '&');
79
+ }
80
+ segment.unescape = unescape;
81
+ function text(text) {
82
+ return segment('text', { text });
83
+ }
84
+ segment.text = text;
85
+ function face(id, text) {
86
+ return segment('face', { id, text });
87
+ }
88
+ segment.face = face;
89
+ function from(content) {
90
+ if (!Array.isArray(content))
91
+ content = [content];
92
+ const toString = (template) => {
93
+ if (typeof template !== 'string')
94
+ return [template];
95
+ template = unescape(template);
96
+ const result = [];
97
+ const closingReg = /<(\S+)(\s[^>]+)?\/>/;
98
+ const twinningReg = /<(\S+)(\s[^>]+)?>([\s\S]*?)<\/\1>/;
99
+ while (template.length) {
100
+ const [_, type, attrStr = '', child = ''] = template.match(twinningReg) || template.match(closingReg) || [];
101
+ if (!type)
102
+ break;
103
+ const isClosing = closingReg.test(template);
104
+ const matched = isClosing ? `<${type}${attrStr}/>` : `<${type}${attrStr}>${child}</${type}>`;
105
+ const index = template.indexOf(matched);
106
+ const prevText = template.slice(0, index);
107
+ if (prevText)
108
+ result.push({
109
+ type: 'text',
110
+ data: {
111
+ text: unescape(prevText),
112
+ },
113
+ });
114
+ template = template.slice(index + matched.length);
115
+ const attrArr = [...attrStr.matchAll(/\s([^=]+)(?=(?=="([^"]+)")|(?=='([^']+)'))/g)];
116
+ const data = Object.fromEntries(attrArr.map(([source, key, v1, v2]) => {
117
+ const value = v1 || v2;
118
+ try {
119
+ return [key, JSON.parse(unescape(value))];
120
+ }
121
+ catch {
122
+ return [key, unescape(value)];
123
+ }
124
+ }));
125
+ if (child) {
126
+ data.message = toString(child).map(({ type, data }) => ({ type, ...data }));
127
+ }
128
+ result.push({
129
+ type: type,
130
+ data,
131
+ });
132
+ }
133
+ if (template.length) {
134
+ result.push({
135
+ type: 'text',
136
+ data: {
137
+ text: unescape(template),
138
+ },
139
+ });
140
+ }
141
+ return result;
142
+ };
143
+ return content.reduce((result, item) => {
144
+ result.push(...toString(item));
145
+ return result;
146
+ }, []);
147
+ }
148
+ segment.from = from;
149
+ function raw(content) {
150
+ if (!Array.isArray(content))
151
+ content = [content];
152
+ return content.map(item => {
153
+ if (typeof item === 'string')
154
+ return item;
155
+ const { type, data } = item;
156
+ if (type === 'text')
157
+ return data.text;
158
+ return data.text ? `{${type}}(${data.text})` : `{${type}}`;
159
+ }).join('');
160
+ }
161
+ segment.raw = raw;
162
+ function toString(content) {
163
+ if (!Array.isArray(content))
164
+ content = [content];
165
+ return content.map(item => {
166
+ if (typeof item === 'string')
167
+ return item;
168
+ const { type, data } = item;
169
+ if (type === 'text')
170
+ return data.text;
171
+ return `<${type} ${Object.keys(data).map(key => `${key}='${escape(JSON.stringify(data[key]))}'`).join(' ')}/>`;
172
+ }).join('');
173
+ }
174
+ segment.toString = toString;
175
+ })(segment || (segment = {}));
176
+ export function remove(list, arg) {
177
+ const index = typeof arg === 'function' && !list.every(item => typeof item === 'function')
178
+ ? list.findIndex(arg)
179
+ : list.indexOf(arg);
180
+ if (index !== -1)
181
+ list.splice(index, 1);
182
+ }
183
+ export function isEmpty(item) {
184
+ if (Array.isArray(item))
185
+ return item.length === 0;
186
+ if (typeof item === 'object') {
187
+ if (!item)
188
+ return true;
189
+ return Reflect.ownKeys(item).length === 0;
190
+ }
191
+ return false;
192
+ }
193
+ export var Time;
194
+ (function (Time) {
195
+ Time.millisecond = 1;
196
+ Time.second = 1000;
197
+ Time.minute = Time.second * 60;
198
+ Time.hour = Time.minute * 60;
199
+ Time.day = Time.hour * 24;
200
+ Time.week = Time.day * 7;
201
+ let timezoneOffset = new Date().getTimezoneOffset();
202
+ function setTimezoneOffset(offset) {
203
+ timezoneOffset = offset;
204
+ }
205
+ Time.setTimezoneOffset = setTimezoneOffset;
206
+ function getTimezoneOffset() {
207
+ return timezoneOffset;
208
+ }
209
+ Time.getTimezoneOffset = getTimezoneOffset;
210
+ function getDateNumber(date = new Date(), offset) {
211
+ if (typeof date === 'number')
212
+ date = new Date(date);
213
+ if (offset === undefined)
214
+ offset = timezoneOffset;
215
+ return Math.floor((date.valueOf() / Time.minute - offset) / 1440);
216
+ }
217
+ Time.getDateNumber = getDateNumber;
218
+ function fromDateNumber(value, offset) {
219
+ const date = new Date(value * Time.day);
220
+ if (offset === undefined)
221
+ offset = timezoneOffset;
222
+ return new Date(+date + offset * Time.minute);
223
+ }
224
+ Time.fromDateNumber = fromDateNumber;
225
+ const numeric = /\d+(?:\.\d+)?/.source;
226
+ const timeRegExp = new RegExp(`^${['w(?:eek(?:s)?)?', 'd(?:ay(?:s)?)?', 'h(?:our(?:s)?)?', 'm(?:in(?:ute)?(?:s)?)?', 's(?:ec(?:ond)?(?:s)?)?']
227
+ .map(unit => `(${numeric}${unit})?`)
228
+ .join('')}$`);
229
+ function parseTime(source) {
230
+ const capture = timeRegExp.exec(source);
231
+ if (!capture)
232
+ return 0;
233
+ return ((parseFloat(capture[1]) * Time.week || 0) +
234
+ (parseFloat(capture[2]) * Time.day || 0) +
235
+ (parseFloat(capture[3]) * Time.hour || 0) +
236
+ (parseFloat(capture[4]) * Time.minute || 0) +
237
+ (parseFloat(capture[5]) * Time.second || 0));
238
+ }
239
+ Time.parseTime = parseTime;
240
+ function parseDate(date) {
241
+ const parsed = parseTime(date);
242
+ if (parsed) {
243
+ date = (Date.now() + parsed);
244
+ }
245
+ else if (/^\d{1,2}(:\d{1,2}){1,2}$/.test(date)) {
246
+ date = `${new Date().toLocaleDateString()}-${date}`;
247
+ }
248
+ else if (/^\d{1,2}-\d{1,2}-\d{1,2}(:\d{1,2}){1,2}$/.test(date)) {
249
+ date = `${new Date().getFullYear()}-${date}`;
250
+ }
251
+ return date ? new Date(date) : new Date();
252
+ }
253
+ Time.parseDate = parseDate;
254
+ function formatTimeShort(ms) {
255
+ const abs = Math.abs(ms);
256
+ if (abs >= Time.day - Time.hour / 2) {
257
+ return Math.round(ms / Time.day) + 'd';
258
+ }
259
+ else if (abs >= Time.hour - Time.minute / 2) {
260
+ return Math.round(ms / Time.hour) + 'h';
261
+ }
262
+ else if (abs >= Time.minute - Time.second / 2) {
263
+ return Math.round(ms / Time.minute) + 'm';
264
+ }
265
+ else if (abs >= Time.second) {
266
+ return Math.round(ms / Time.second) + 's';
267
+ }
268
+ return ms + 'ms';
269
+ }
270
+ Time.formatTimeShort = formatTimeShort;
271
+ function formatTime(ms) {
272
+ let result;
273
+ if (ms >= Time.day - Time.hour / 2) {
274
+ ms += Time.hour / 2;
275
+ result = Math.floor(ms / Time.day) + ' 天';
276
+ if (ms % Time.day > Time.hour) {
277
+ result += ` ${Math.floor((ms % Time.day) / Time.hour)} 小时`;
278
+ }
279
+ }
280
+ else if (ms >= Time.hour - Time.minute / 2) {
281
+ ms += Time.minute / 2;
282
+ result = Math.floor(ms / Time.hour) + ' 小时';
283
+ if (ms % Time.hour > Time.minute) {
284
+ result += ` ${Math.floor((ms % Time.hour) / Time.minute)} 分钟`;
285
+ }
286
+ }
287
+ else if (ms >= Time.minute - Time.second / 2) {
288
+ ms += Time.second / 2;
289
+ result = Math.floor(ms / Time.minute) + ' 分钟';
290
+ if (ms % Time.minute > Time.second) {
291
+ result += ` ${Math.floor((ms % Time.minute) / Time.second)} 秒`;
292
+ }
293
+ }
294
+ else {
295
+ result = Math.round(ms / Time.second) + ' 秒';
296
+ }
297
+ return result;
298
+ }
299
+ Time.formatTime = formatTime;
300
+ const dayMap = ['日', '一', '二', '三', '四', '五', '六'];
301
+ function toDigits(source, length = 2) {
302
+ return source.toString().padStart(length, '0');
303
+ }
304
+ function template(template, time = new Date()) {
305
+ return template
306
+ .replace('yyyy', time.getFullYear().toString())
307
+ .replace('yy', time.getFullYear().toString().slice(2))
308
+ .replace('MM', toDigits(time.getMonth() + 1))
309
+ .replace('dd', toDigits(time.getDate()))
310
+ .replace('hh', toDigits(time.getHours()))
311
+ .replace('mm', toDigits(time.getMinutes()))
312
+ .replace('ss', toDigits(time.getSeconds()))
313
+ .replace('SSS', toDigits(time.getMilliseconds(), 3));
314
+ }
315
+ Time.template = template;
316
+ function toHourMinute(time) {
317
+ return `${toDigits(time.getHours())}:${toDigits(time.getMinutes())}`;
318
+ }
319
+ function formatTimeInterval(time, interval) {
320
+ if (!interval) {
321
+ return template('yyyy-MM-dd hh:mm:ss', time);
322
+ }
323
+ else if (interval === Time.day) {
324
+ return `每天 ${toHourMinute(time)}`;
325
+ }
326
+ else if (interval === Time.week) {
327
+ return `每周${dayMap[time.getDay()]} ${toHourMinute(time)}`;
328
+ }
329
+ else {
330
+ return `${template('yyyy-MM-dd hh:mm:ss', time)} 起每隔 ${formatTime(interval)}`;
331
+ }
332
+ }
333
+ Time.formatTimeInterval = formatTimeInterval;
334
+ })(Time || (Time = {}));
335
+ export function sleep(ms) {
336
+ return new Promise(resolve => setTimeout(resolve, ms));
337
+ }
338
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,29 +1,35 @@
1
1
  {
2
2
  "name": "@zhin.js/core",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Zhin机器人核心框架",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
6
+ "main": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
10
+ "types": "./lib/index.d.ts",
11
+ "import": "./lib/index.js"
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "ws": "^8.14.2",
15
+ "segment-matcher": "^1.0.2",
16
16
  "yaml": "^2.3.4",
17
17
  "toml": "^3.0.0",
18
18
  "dotenv": "^16.3.1",
19
- "@zhin.js/hmr": "1.0.0"
19
+ "cron-parser": "latest",
20
+ "@zhin.js/hmr": "1.0.1",
21
+ "@zhin.js/database": "1.0.0"
22
+ },
23
+ "peerDependencies": {
24
+ "@zhin.js/logger": "0.1.0"
20
25
  },
21
26
  "devDependencies": {
27
+ "@types/node": "^24.3.0",
22
28
  "typescript": "^5.3.0",
23
- "@zhin.js/types": "1.0.0"
29
+ "@zhin.js/types": "1.0.1"
24
30
  },
25
31
  "scripts": {
26
32
  "build": "tsc",
27
- "clean": "rm -rf dist"
33
+ "clean": "rm -rf lib"
28
34
  }
29
35
  }
package/src/adapter.ts CHANGED
@@ -1,13 +1,25 @@
1
- import {BotConfig} from "./types";
2
- import {Bot} from "./bot";
3
- import {Plugin} from "./plugin";
4
-
1
+ import {Bot,BotConfig} from "./bot.js";
2
+ import {Plugin} from "./plugin.js";
3
+ /**
4
+ * Adapter类:适配器抽象,管理多平台Bot实例。
5
+ * 负责根据配置启动/关闭各平台机器人,统一异常处理。
6
+ */
5
7
  export class Adapter<R extends Bot=Bot>{
8
+ /** 当前适配器下所有Bot实例,key为bot名称 */
6
9
  public bots:Map<string,R>=new Map<string, R>()
7
10
  #botFactory:Adapter.BotFactory<R>
11
+ /**
12
+ * 构造函数
13
+ * @param name 适配器名称(如 'process'、'qq' 等)
14
+ * @param botFactory Bot工厂函数或构造器
15
+ */
8
16
  constructor(public name:string,botFactory:Adapter.BotFactory<R>) {
9
17
  this.#botFactory=botFactory
10
18
  }
19
+ /**
20
+ * 启动适配器,自动根据配置创建并连接所有Bot
21
+ * @param plugin 所属插件实例
22
+ */
11
23
  async start(plugin:Plugin){
12
24
  const configs=plugin.app.getConfig().bots?.filter(c=>c.context===this.name)
13
25
  if(!configs?.length) return
@@ -20,7 +32,7 @@ export class Adapter<R extends Bot=Bot>{
20
32
  bot = this.#botFactory(plugin,config) as R
21
33
  }
22
34
  try {
23
- await bot.connect()
35
+ await bot.$connect()
24
36
  plugin.logger.info(`bot ${config.name} of adapter ${this.name} connected`)
25
37
  this.bots.set(config.name,bot)
26
38
  } catch (error) {
@@ -35,11 +47,15 @@ export class Adapter<R extends Bot=Bot>{
35
47
  throw error
36
48
  }
37
49
  }
50
+ /**
51
+ * 停止适配器,断开并移除所有Bot实例
52
+ * @param plugin 所属插件实例
53
+ */
38
54
  async stop(plugin:Plugin){
39
55
  try {
40
56
  for(const [name,bot] of this.bots){
41
57
  try {
42
- await bot.disconnect()
58
+ await bot.$disconnect()
43
59
  plugin.logger.info(`bot ${name} of adapter ${this.name} disconnected`)
44
60
  this.bots.delete(name)
45
61
  } catch (error) {
@@ -55,8 +71,8 @@ export class Adapter<R extends Bot=Bot>{
55
71
  }
56
72
  }
57
73
  export namespace Adapter {
58
- export type BotBotConstructor<T extends Bot>=T extends Bot<infer R> ? {
59
- new(plugin:Plugin,config:R):T
74
+ export type BotBotConstructor<T extends Bot>=T extends Bot<infer F,infer S> ? {
75
+ new(plugin:Plugin,config:S):T
60
76
  }: {
61
77
  new(plugin:Plugin,config:BotConfig):T
62
78
  }
@@ -64,6 +80,6 @@ export namespace Adapter {
64
80
  return fn.prototype &&
65
81
  fn.prototype.constructor === fn
66
82
  }
67
- export type BotCreator<T extends Bot>=T extends Bot<infer R> ? (plugin:Plugin,config: R) => T : (plugin:Plugin,config: BotConfig) => T
83
+ export type BotCreator<T extends Bot>=T extends Bot<infer F,infer S> ? (plugin:Plugin,config: S) => T : (plugin:Plugin,config: BotConfig) => T
68
84
  export type BotFactory<T extends Bot> = BotBotConstructor<T>|BotCreator<T>
69
85
  }