@yunzai-ng/core 0.1.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.
Files changed (357) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +51 -0
  3. package/dist/adapter/accounts.d.ts +174 -0
  4. package/dist/adapter/accounts.d.ts.map +1 -0
  5. package/dist/adapter/accounts.js +653 -0
  6. package/dist/adapter/accounts.js.map +1 -0
  7. package/dist/adapter/bots.d.ts +142 -0
  8. package/dist/adapter/bots.d.ts.map +1 -0
  9. package/dist/adapter/bots.js +454 -0
  10. package/dist/adapter/bots.js.map +1 -0
  11. package/dist/adapter/host.d.ts +114 -0
  12. package/dist/adapter/host.d.ts.map +1 -0
  13. package/dist/adapter/host.js +90 -0
  14. package/dist/adapter/host.js.map +1 -0
  15. package/dist/adapter/login.d.ts +174 -0
  16. package/dist/adapter/login.d.ts.map +1 -0
  17. package/dist/adapter/login.js +345 -0
  18. package/dist/adapter/login.js.map +1 -0
  19. package/dist/adapter/registry.d.ts +102 -0
  20. package/dist/adapter/registry.d.ts.map +1 -0
  21. package/dist/adapter/registry.js +150 -0
  22. package/dist/adapter/registry.js.map +1 -0
  23. package/dist/config/core-config.d.ts +151 -0
  24. package/dist/config/core-config.d.ts.map +1 -0
  25. package/dist/config/core-config.js +338 -0
  26. package/dist/config/core-config.js.map +1 -0
  27. package/dist/config/schema.d.ts +449 -0
  28. package/dist/config/schema.d.ts.map +1 -0
  29. package/dist/config/schema.js +871 -0
  30. package/dist/config/schema.js.map +1 -0
  31. package/dist/config/store.d.ts +184 -0
  32. package/dist/config/store.d.ts.map +1 -0
  33. package/dist/config/store.js +428 -0
  34. package/dist/config/store.js.map +1 -0
  35. package/dist/config/yaml.d.ts +23 -0
  36. package/dist/config/yaml.d.ts.map +1 -0
  37. package/dist/config/yaml.js +108 -0
  38. package/dist/config/yaml.js.map +1 -0
  39. package/dist/http/client.d.ts +82 -0
  40. package/dist/http/client.d.ts.map +1 -0
  41. package/dist/http/client.js +658 -0
  42. package/dist/http/client.js.map +1 -0
  43. package/dist/index.d.ts +77 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +94 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/kernel/app.d.ts +244 -0
  48. package/dist/kernel/app.d.ts.map +1 -0
  49. package/dist/kernel/app.js +654 -0
  50. package/dist/kernel/app.js.map +1 -0
  51. package/dist/kernel/kv-sink.d.ts +34 -0
  52. package/dist/kernel/kv-sink.d.ts.map +1 -0
  53. package/dist/kernel/kv-sink.js +25 -0
  54. package/dist/kernel/kv-sink.js.map +1 -0
  55. package/dist/kernel/policy.d.ts +77 -0
  56. package/dist/kernel/policy.d.ts.map +1 -0
  57. package/dist/kernel/policy.js +99 -0
  58. package/dist/kernel/policy.js.map +1 -0
  59. package/dist/kernel/runtime.d.ts +117 -0
  60. package/dist/kernel/runtime.d.ts.map +1 -0
  61. package/dist/kernel/runtime.js +197 -0
  62. package/dist/kernel/runtime.js.map +1 -0
  63. package/dist/kernel/sql-sink.d.ts +36 -0
  64. package/dist/kernel/sql-sink.d.ts.map +1 -0
  65. package/dist/kernel/sql-sink.js +114 -0
  66. package/dist/kernel/sql-sink.js.map +1 -0
  67. package/dist/logger/format.d.ts +67 -0
  68. package/dist/logger/format.d.ts.map +1 -0
  69. package/dist/logger/format.js +218 -0
  70. package/dist/logger/format.js.map +1 -0
  71. package/dist/logger/index.d.ts +97 -0
  72. package/dist/logger/index.d.ts.map +1 -0
  73. package/dist/logger/index.js +363 -0
  74. package/dist/logger/index.js.map +1 -0
  75. package/dist/logger/rotate.d.ts +47 -0
  76. package/dist/logger/rotate.d.ts.map +1 -0
  77. package/dist/logger/rotate.js +242 -0
  78. package/dist/logger/rotate.js.map +1 -0
  79. package/dist/message/segment.d.ts +255 -0
  80. package/dist/message/segment.d.ts.map +1 -0
  81. package/dist/message/segment.js +510 -0
  82. package/dist/message/segment.js.map +1 -0
  83. package/dist/message/split.d.ts +34 -0
  84. package/dist/message/split.d.ts.map +1 -0
  85. package/dist/message/split.js +79 -0
  86. package/dist/message/split.js.map +1 -0
  87. package/dist/message/target.d.ts +29 -0
  88. package/dist/message/target.d.ts.map +1 -0
  89. package/dist/message/target.js +34 -0
  90. package/dist/message/target.js.map +1 -0
  91. package/dist/pipeline/cooldown.d.ts +84 -0
  92. package/dist/pipeline/cooldown.d.ts.map +1 -0
  93. package/dist/pipeline/cooldown.js +94 -0
  94. package/dist/pipeline/cooldown.js.map +1 -0
  95. package/dist/pipeline/dispatch.d.ts +98 -0
  96. package/dist/pipeline/dispatch.d.ts.map +1 -0
  97. package/dist/pipeline/dispatch.js +323 -0
  98. package/dist/pipeline/dispatch.js.map +1 -0
  99. package/dist/pipeline/event.d.ts +130 -0
  100. package/dist/pipeline/event.d.ts.map +1 -0
  101. package/dist/pipeline/event.js +538 -0
  102. package/dist/pipeline/event.js.map +1 -0
  103. package/dist/pipeline/middleware.d.ts +63 -0
  104. package/dist/pipeline/middleware.d.ts.map +1 -0
  105. package/dist/pipeline/middleware.js +174 -0
  106. package/dist/pipeline/middleware.js.map +1 -0
  107. package/dist/pipeline/prompt.d.ts +80 -0
  108. package/dist/pipeline/prompt.d.ts.map +1 -0
  109. package/dist/pipeline/prompt.js +155 -0
  110. package/dist/pipeline/prompt.js.map +1 -0
  111. package/dist/pipeline/router.d.ts +98 -0
  112. package/dist/pipeline/router.d.ts.map +1 -0
  113. package/dist/pipeline/router.js +489 -0
  114. package/dist/pipeline/router.js.map +1 -0
  115. package/dist/platform/detect.d.ts +24 -0
  116. package/dist/platform/detect.d.ts.map +1 -0
  117. package/dist/platform/detect.js +178 -0
  118. package/dist/platform/detect.js.map +1 -0
  119. package/dist/platform/paths.d.ts +38 -0
  120. package/dist/platform/paths.d.ts.map +1 -0
  121. package/dist/platform/paths.js +129 -0
  122. package/dist/platform/paths.js.map +1 -0
  123. package/dist/platform/system.d.ts +71 -0
  124. package/dist/platform/system.d.ts.map +1 -0
  125. package/dist/platform/system.js +242 -0
  126. package/dist/platform/system.js.map +1 -0
  127. package/dist/plugin/context.d.ts +92 -0
  128. package/dist/plugin/context.d.ts.map +1 -0
  129. package/dist/plugin/context.js +573 -0
  130. package/dist/plugin/context.js.map +1 -0
  131. package/dist/plugin/define.d.ts +92 -0
  132. package/dist/plugin/define.d.ts.map +1 -0
  133. package/dist/plugin/define.js +82 -0
  134. package/dist/plugin/define.js.map +1 -0
  135. package/dist/plugin/discover.d.ts +106 -0
  136. package/dist/plugin/discover.d.ts.map +1 -0
  137. package/dist/plugin/discover.js +254 -0
  138. package/dist/plugin/discover.js.map +1 -0
  139. package/dist/plugin/events.d.ts +109 -0
  140. package/dist/plugin/events.d.ts.map +1 -0
  141. package/dist/plugin/events.js +209 -0
  142. package/dist/plugin/events.js.map +1 -0
  143. package/dist/plugin/hooks.d.ts +266 -0
  144. package/dist/plugin/hooks.d.ts.map +1 -0
  145. package/dist/plugin/hooks.js +84 -0
  146. package/dist/plugin/hooks.js.map +1 -0
  147. package/dist/plugin/host.d.ts +160 -0
  148. package/dist/plugin/host.d.ts.map +1 -0
  149. package/dist/plugin/host.js +546 -0
  150. package/dist/plugin/host.js.map +1 -0
  151. package/dist/plugin/market.d.ts +264 -0
  152. package/dist/plugin/market.d.ts.map +1 -0
  153. package/dist/plugin/market.js +700 -0
  154. package/dist/plugin/market.js.map +1 -0
  155. package/dist/plugin/services.d.ts +116 -0
  156. package/dist/plugin/services.d.ts.map +1 -0
  157. package/dist/plugin/services.js +213 -0
  158. package/dist/plugin/services.js.map +1 -0
  159. package/dist/plugin/tar.d.ts +65 -0
  160. package/dist/plugin/tar.d.ts.map +1 -0
  161. package/dist/plugin/tar.js +277 -0
  162. package/dist/plugin/tar.js.map +1 -0
  163. package/dist/render/registry.d.ts +127 -0
  164. package/dist/render/registry.d.ts.map +1 -0
  165. package/dist/render/registry.js +306 -0
  166. package/dist/render/registry.js.map +1 -0
  167. package/dist/scheduler/index.d.ts +67 -0
  168. package/dist/scheduler/index.d.ts.map +1 -0
  169. package/dist/scheduler/index.js +279 -0
  170. package/dist/scheduler/index.js.map +1 -0
  171. package/dist/server/api.d.ts +179 -0
  172. package/dist/server/api.d.ts.map +1 -0
  173. package/dist/server/api.js +602 -0
  174. package/dist/server/api.js.map +1 -0
  175. package/dist/server/auth.d.ts +83 -0
  176. package/dist/server/auth.d.ts.map +1 -0
  177. package/dist/server/auth.js +178 -0
  178. package/dist/server/auth.js.map +1 -0
  179. package/dist/server/browse.d.ts +60 -0
  180. package/dist/server/browse.d.ts.map +1 -0
  181. package/dist/server/browse.js +187 -0
  182. package/dist/server/browse.js.map +1 -0
  183. package/dist/server/files.d.ts +27 -0
  184. package/dist/server/files.d.ts.map +1 -0
  185. package/dist/server/files.js +76 -0
  186. package/dist/server/files.js.map +1 -0
  187. package/dist/server/index.d.ts +189 -0
  188. package/dist/server/index.d.ts.map +1 -0
  189. package/dist/server/index.js +1123 -0
  190. package/dist/server/index.js.map +1 -0
  191. package/dist/server/table.d.ts +105 -0
  192. package/dist/server/table.d.ts.map +1 -0
  193. package/dist/server/table.js +289 -0
  194. package/dist/server/table.js.map +1 -0
  195. package/dist/store/index.d.ts +50 -0
  196. package/dist/store/index.d.ts.map +1 -0
  197. package/dist/store/index.js +120 -0
  198. package/dist/store/index.js.map +1 -0
  199. package/dist/store/json.d.ts +73 -0
  200. package/dist/store/json.d.ts.map +1 -0
  201. package/dist/store/json.js +174 -0
  202. package/dist/store/json.js.map +1 -0
  203. package/dist/store/kv.d.ts +126 -0
  204. package/dist/store/kv.d.ts.map +1 -0
  205. package/dist/store/kv.js +232 -0
  206. package/dist/store/kv.js.map +1 -0
  207. package/dist/store/level.d.ts +103 -0
  208. package/dist/store/level.d.ts.map +1 -0
  209. package/dist/store/level.js +119 -0
  210. package/dist/store/level.js.map +1 -0
  211. package/dist/store/memory.d.ts +61 -0
  212. package/dist/store/memory.d.ts.map +1 -0
  213. package/dist/store/memory.js +94 -0
  214. package/dist/store/memory.js.map +1 -0
  215. package/dist/store/sql.d.ts +142 -0
  216. package/dist/store/sql.d.ts.map +1 -0
  217. package/dist/store/sql.js +246 -0
  218. package/dist/store/sql.js.map +1 -0
  219. package/dist/testing/fake.d.ts +109 -0
  220. package/dist/testing/fake.d.ts.map +1 -0
  221. package/dist/testing/fake.js +196 -0
  222. package/dist/testing/fake.js.map +1 -0
  223. package/dist/testing/index.d.ts +16 -0
  224. package/dist/testing/index.d.ts.map +1 -0
  225. package/dist/testing/index.js +16 -0
  226. package/dist/testing/index.js.map +1 -0
  227. package/dist/testing/mock-adapter.d.ts +205 -0
  228. package/dist/testing/mock-adapter.d.ts.map +1 -0
  229. package/dist/testing/mock-adapter.js +309 -0
  230. package/dist/testing/mock-adapter.js.map +1 -0
  231. package/dist/util/deep.d.ts +108 -0
  232. package/dist/util/deep.d.ts.map +1 -0
  233. package/dist/util/deep.js +275 -0
  234. package/dist/util/deep.js.map +1 -0
  235. package/dist/util/defer.d.ts +107 -0
  236. package/dist/util/defer.d.ts.map +1 -0
  237. package/dist/util/defer.js +163 -0
  238. package/dist/util/defer.js.map +1 -0
  239. package/dist/util/dispose.d.ts +88 -0
  240. package/dist/util/dispose.d.ts.map +1 -0
  241. package/dist/util/dispose.js +143 -0
  242. package/dist/util/dispose.js.map +1 -0
  243. package/dist/util/duration.d.ts +28 -0
  244. package/dist/util/duration.d.ts.map +1 -0
  245. package/dist/util/duration.js +77 -0
  246. package/dist/util/duration.js.map +1 -0
  247. package/dist/util/fs.d.ts +110 -0
  248. package/dist/util/fs.d.ts.map +1 -0
  249. package/dist/util/fs.js +269 -0
  250. package/dist/util/fs.js.map +1 -0
  251. package/dist/util/id.d.ts +49 -0
  252. package/dist/util/id.d.ts.map +1 -0
  253. package/dist/util/id.js +87 -0
  254. package/dist/util/id.js.map +1 -0
  255. package/dist/util/lru.d.ts +74 -0
  256. package/dist/util/lru.d.ts.map +1 -0
  257. package/dist/util/lru.js +156 -0
  258. package/dist/util/lru.js.map +1 -0
  259. package/dist/util/queue.d.ts +64 -0
  260. package/dist/util/queue.d.ts.map +1 -0
  261. package/dist/util/queue.js +147 -0
  262. package/dist/util/queue.js.map +1 -0
  263. package/dist/util/text.d.ts +86 -0
  264. package/dist/util/text.d.ts.map +1 -0
  265. package/dist/util/text.js +182 -0
  266. package/dist/util/text.js.map +1 -0
  267. package/package.json +44 -0
  268. package/src/adapter/accounts.ts +758 -0
  269. package/src/adapter/bots.ts +582 -0
  270. package/src/adapter/host.ts +224 -0
  271. package/src/adapter/login.ts +481 -0
  272. package/src/adapter/registry.ts +202 -0
  273. package/src/config/core-config.test.ts +60 -0
  274. package/src/config/core-config.ts +401 -0
  275. package/src/config/schema.test.ts +179 -0
  276. package/src/config/schema.ts +1036 -0
  277. package/src/config/store.test.ts +245 -0
  278. package/src/config/store.ts +506 -0
  279. package/src/config/yaml.ts +119 -0
  280. package/src/http/client.test.ts +568 -0
  281. package/src/http/client.ts +777 -0
  282. package/src/index.ts +106 -0
  283. package/src/kernel/app.test.ts +267 -0
  284. package/src/kernel/app.ts +843 -0
  285. package/src/kernel/kv-sink.ts +58 -0
  286. package/src/kernel/policy.ts +120 -0
  287. package/src/kernel/runtime.test.ts +542 -0
  288. package/src/kernel/runtime.ts +307 -0
  289. package/src/kernel/sql-sink.ts +154 -0
  290. package/src/logger/format.ts +259 -0
  291. package/src/logger/index.ts +427 -0
  292. package/src/logger/rotate.ts +265 -0
  293. package/src/message/segment.test.ts +335 -0
  294. package/src/message/segment.ts +569 -0
  295. package/src/message/split.ts +97 -0
  296. package/src/message/target.ts +48 -0
  297. package/src/pipeline/cooldown.ts +136 -0
  298. package/src/pipeline/dispatch.ts +419 -0
  299. package/src/pipeline/event.ts +735 -0
  300. package/src/pipeline/middleware.test.ts +426 -0
  301. package/src/pipeline/middleware.ts +199 -0
  302. package/src/pipeline/prompt.ts +212 -0
  303. package/src/pipeline/router.test.ts +432 -0
  304. package/src/pipeline/router.ts +575 -0
  305. package/src/platform/detect.ts +178 -0
  306. package/src/platform/paths.ts +147 -0
  307. package/src/platform/system.test.ts +102 -0
  308. package/src/platform/system.ts +289 -0
  309. package/src/plugin/context.test.ts +459 -0
  310. package/src/plugin/context.ts +757 -0
  311. package/src/plugin/define.test.ts +120 -0
  312. package/src/plugin/define.ts +142 -0
  313. package/src/plugin/discover.test.ts +253 -0
  314. package/src/plugin/discover.ts +353 -0
  315. package/src/plugin/events.test.ts +162 -0
  316. package/src/plugin/events.ts +266 -0
  317. package/src/plugin/hooks.ts +373 -0
  318. package/src/plugin/host.test.ts +696 -0
  319. package/src/plugin/host.ts +738 -0
  320. package/src/plugin/market.test.ts +781 -0
  321. package/src/plugin/market.ts +870 -0
  322. package/src/plugin/services.test.ts +135 -0
  323. package/src/plugin/services.ts +261 -0
  324. package/src/plugin/tar.test.ts +158 -0
  325. package/src/plugin/tar.ts +309 -0
  326. package/src/render/registry.test.ts +127 -0
  327. package/src/render/registry.ts +439 -0
  328. package/src/scheduler/index.ts +357 -0
  329. package/src/server/api.test.ts +802 -0
  330. package/src/server/api.ts +869 -0
  331. package/src/server/auth.ts +201 -0
  332. package/src/server/browse.test.ts +193 -0
  333. package/src/server/browse.ts +240 -0
  334. package/src/server/files.ts +97 -0
  335. package/src/server/index.test.ts +566 -0
  336. package/src/server/index.ts +1386 -0
  337. package/src/server/table.ts +351 -0
  338. package/src/store/index.ts +156 -0
  339. package/src/store/json.ts +198 -0
  340. package/src/store/kv.test.ts +307 -0
  341. package/src/store/kv.ts +256 -0
  342. package/src/store/level.ts +167 -0
  343. package/src/store/memory.ts +109 -0
  344. package/src/store/sql.test.ts +204 -0
  345. package/src/store/sql.ts +324 -0
  346. package/src/testing/fake.ts +297 -0
  347. package/src/testing/index.ts +15 -0
  348. package/src/testing/mock-adapter.ts +588 -0
  349. package/src/util/deep.ts +272 -0
  350. package/src/util/defer.ts +211 -0
  351. package/src/util/dispose.ts +169 -0
  352. package/src/util/duration.ts +82 -0
  353. package/src/util/fs.ts +279 -0
  354. package/src/util/id.ts +94 -0
  355. package/src/util/lru.ts +185 -0
  356. package/src/util/queue.ts +167 -0
  357. package/src/util/text.ts +189 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/pipeline/dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * 模块职责:把适配器产出的 `Incoming*Event` 补全成插件可用的运行时事件
3
+ * 依赖方向:依赖类型包、message/segment、pipeline/prompt、util/id、util/duration;不依赖适配器实现
4
+ * 生命周期:每条事件一个实例,处理完即被 GC;不持有跨事件状态
5
+ * 注意事项:**适配器只负责翻译报文,派生字段全部由这里算** —— 摊到各适配器里会让 `e.atBot` 在
6
+ * 不同协议下语义不一致,插件只能两边都试。
7
+ *
8
+ * 派生字段(`atMe` / `atUsers` / `images` / `text`)用 getter + 私有缓存:中间件改写
9
+ * `message` 后调一次 `refresh()` 重算,而不是每次读取都重新遍历 —— 路由匹配阶段 `e.text`
10
+ * 会被读几十次。
11
+ *
12
+ * 实例**刻意不 freeze、不 seal**:`EventExtensions` 的正规用法就是插件在事件上挂自有字段。
13
+ *
14
+ * `e.render()` 依赖「当前执行的是哪个插件」(模板根随插件而定),故该绑定由 dispatch 在调
15
+ * 每个 handler 之前经 `bind()` 替换,而不写进事件的构造参数 —— 一条消息会依次流经多个插件。
16
+ */
17
+ import type { BotApi, IncomingEvent, IncomingMessageEvent, IncomingNoticeEvent, IncomingMetaEvent, IncomingRequestEvent, Logger, MessageEvent, MetaEvent, NoticeEvent, RenderablePage, RenderOptions, RenderedImage, RequestEvent } from "@yunzai-ng/types";
18
+ import { PromptRegistry } from "./prompt.js";
19
+ /**
20
+ * 事件工厂需要的策略视图
21
+ *
22
+ * 只取用得到的两项而不是直接依赖 `KernelPolicy`:事件构造与"主人是谁"之间
23
+ * 只有这么一点耦合,写成最小接口后单测里给个字面量就能跑。
24
+ */
25
+ export interface EventPolicyView {
26
+ /** 机器人昵称列表,用于把"云崽 #体力"识别为对我说话 */
27
+ readonly nicknames: readonly string[];
28
+ /**
29
+ * 判断是否主人
30
+ * @param uid 用户 id
31
+ * @returns 是否主人
32
+ */
33
+ isMaster(uid: string): boolean;
34
+ }
35
+ /**
36
+ * 当前正在执行的插件在事件上的投影
37
+ *
38
+ * `PluginContext` 结构上天然满足它,因此 dispatch 直接把上下文传进来即可,
39
+ * 不需要额外包一层。
40
+ */
41
+ export interface PluginRuntimeView {
42
+ /** 插件名 */
43
+ readonly name: string;
44
+ /** 插件卸载信号 */
45
+ readonly signal: AbortSignal;
46
+ /**
47
+ * 渲染 TSX 页面(模板根已绑定到该插件)
48
+ * @param page 已渲染好的页面
49
+ * @param opts 渲染选项
50
+ * @returns 图片段
51
+ */
52
+ render(page: RenderablePage, opts?: RenderOptions): Promise<RenderedImage>;
53
+ /**
54
+ * 渲染字符串模板(模板根已绑定到该插件)
55
+ * @param template 模板路径
56
+ * @param data 模板数据
57
+ * @param opts 渲染选项
58
+ * @returns 图片段
59
+ */
60
+ render(template: string, data?: Record<string, unknown>, opts?: RenderOptions): Promise<RenderedImage>;
61
+ }
62
+ /** 内核内部持有的消息事件:比插件看到的多一个绑定入口 */
63
+ export interface RuntimeMessageEvent extends MessageEvent {
64
+ /**
65
+ * 绑定当前正在执行的插件
66
+ *
67
+ * 只影响 `render()`/`renderReply()`/`prompt()` 的归属。dispatch 在每个
68
+ * handler 前后成对调用;传 `undefined` 表示"当前不在任何插件里"。
69
+ * @param view 插件运行时视图
70
+ */
71
+ bind(view: PluginRuntimeView | undefined): void;
72
+ }
73
+ /** 事件工厂构造参数 */
74
+ export interface EventFactoryOptions {
75
+ /** 日志器 */
76
+ readonly logger: Logger;
77
+ /** 策略视图 */
78
+ readonly policy: EventPolicyView;
79
+ /** `prompt` 等待者登记表 */
80
+ readonly prompts: PromptRegistry;
81
+ }
82
+ /**
83
+ * 运行时事件工厂
84
+ *
85
+ * 内核里唯一构造事件的地方。适配器把 `IncomingEvent` 交给 `host.submit()`,
86
+ * 由 dispatch 调这里补全成运行时形态。
87
+ */
88
+ export declare class EventFactory {
89
+ #private;
90
+ /**
91
+ * @param opts 构造参数
92
+ */
93
+ constructor(opts: EventFactoryOptions);
94
+ /**
95
+ * 按事件大类分派构造
96
+ * @param incoming 适配器产出的事件
97
+ * @param bot 接收该事件的 Bot
98
+ * @returns 运行时事件
99
+ */
100
+ create(incoming: IncomingEvent, bot: BotApi): MessageEvent | NoticeEvent | RequestEvent | MetaEvent;
101
+ /**
102
+ * 构造运行时消息事件
103
+ * @param incoming 适配器产出的消息事件
104
+ * @param bot 接收该事件的 Bot
105
+ * @returns 运行时消息事件
106
+ */
107
+ createMessage(incoming: IncomingMessageEvent, bot: BotApi): RuntimeMessageEvent;
108
+ /**
109
+ * 构造运行时通知事件
110
+ * @param incoming 适配器产出的通知事件
111
+ * @param bot 接收该事件的 Bot
112
+ * @returns 运行时通知事件
113
+ */
114
+ createNotice(incoming: IncomingNoticeEvent, bot: BotApi): NoticeEvent;
115
+ /**
116
+ * 构造运行时请求事件
117
+ * @param incoming 适配器产出的请求事件
118
+ * @param bot 接收该事件的 Bot
119
+ * @returns 运行时请求事件
120
+ */
121
+ createRequest(incoming: IncomingRequestEvent, bot: BotApi): RequestEvent;
122
+ /**
123
+ * 构造运行时元事件
124
+ * @param incoming 适配器产出的元事件
125
+ * @param bot 接收该事件的 Bot
126
+ * @returns 运行时元事件
127
+ */
128
+ createMeta(incoming: IncomingMetaEvent, bot: BotApi): MetaEvent;
129
+ }
130
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/pipeline/event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EACV,MAAM,EAMN,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,MAAM,EAGN,YAAY,EAEZ,SAAS,EACT,WAAW,EAGX,cAAc,EACd,aAAa,EACb,aAAa,EAEb,YAAY,EAMb,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EAA0B,cAAc,EAAgB,MAAM,aAAa,CAAA;AAUlF;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU;IACV,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,aAAa;IACb,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAE1E;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CACvG;AAED,gCAAgC;AAChC,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,CAAA;CAChD;AAED,eAAe;AACf,MAAM,WAAW,mBAAmB;IAClC,UAAU;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,WAAW;IACX,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;IAChC,sBAAsB;IACtB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;CACjC;AA4aD;;;;;GAKG;AACH,qBAAa,YAAY;;IAIvB;;OAEG;gBACS,IAAI,EAAE,mBAAmB;IAIrC;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS;IAanG;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB;IAI/E;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW;IAmCrE;;;;;OAKG;IACH,aAAa,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY;IA2DxE;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS;CAqBhE"}
@@ -0,0 +1,538 @@
1
+ import { atUsersOf, hasAtAll, imagesOf, seg, textOf, toSegments } from "../message/segment.js";
2
+ import { createEventId } from "../util/id.js";
3
+ import { parseDuration } from "../util/duration.js";
4
+ import { DEFAULT_PROMPT_TIMEOUT, PromptRegistry, sessionKeyOf } from "./prompt.js";
5
+ /**
6
+ * 昵称后面允许被一并剥掉的呼唤语气字符
7
+ *
8
+ * 刻意**不含** `.` `!` `~` `/` `#` —— 这些在各家插件里都是真实的命令前缀,
9
+ * 剥掉会把 `云崽 .help` 变成 `help` 从而匹配不上。这里只剥"叫人"用的标点。
10
+ */
11
+ const NICKNAME_TAIL_RE = /^[\s,,、::]+/;
12
+ /**
13
+ * 取错误的可读描述
14
+ * @param err 任意抛出物
15
+ * @returns 描述文本
16
+ */
17
+ function errText(err) {
18
+ return err instanceof Error ? err.message : String(err);
19
+ }
20
+ /**
21
+ * 推断通知事件应该回到哪里
22
+ *
23
+ * 有群号回群、否则回给相关用户。两者都没有(如纯连接类通知)返回 undefined,
24
+ * 由 `reply()` 抛错 —— 静默丢弃会让插件作者以为消息发出去了。
25
+ * @param n 通知事件
26
+ * @returns 发送目标;无法推断时 undefined
27
+ */
28
+ function noticeTargetOf(n) {
29
+ if (n.gid !== undefined)
30
+ return { scene: "group", gid: n.gid };
31
+ if (n.uid !== undefined)
32
+ return { scene: "private", uid: n.uid };
33
+ return undefined;
34
+ }
35
+ /** 运行时消息事件实现 */
36
+ class MessageEventImpl {
37
+ /** 事件大类 */
38
+ kind = "message";
39
+ /** 事件唯一 id */
40
+ id;
41
+ /** 发生时间(毫秒) */
42
+ time;
43
+ /** 平台标识 */
44
+ platform;
45
+ /** 接收该事件的账号 id */
46
+ selfId;
47
+ /** 接收该事件的 Bot */
48
+ bot;
49
+ /** 平台原始报文 */
50
+ raw;
51
+ /** 本次事件的临时状态袋 */
52
+ state = {};
53
+ /** 场景 */
54
+ scene;
55
+ /** 平台细分类型 */
56
+ subType;
57
+ /** 平台消息 id */
58
+ messageId;
59
+ /** 会话内序号 */
60
+ seq;
61
+ /** 消息段(可改写,改后需 `refresh()`) */
62
+ message;
63
+ /** 纯文本视图 */
64
+ text = "";
65
+ /** 发送者 */
66
+ sender;
67
+ /** 所在群 */
68
+ group;
69
+ /** 所在子频道 */
70
+ channel;
71
+ /** 引用的消息 */
72
+ quote;
73
+ /** 命令匹配结果 */
74
+ command;
75
+ /** 日志器 */
76
+ #logger;
77
+ /** 策略视图 */
78
+ #policy;
79
+ /** 等待者登记表 */
80
+ #prompts;
81
+ /** 回复目标(构造时算一次,场景与群号都是只读的) */
82
+ #target;
83
+ /** 发送者在群里的角色 */
84
+ #role;
85
+ /** 是否主人 */
86
+ #isMaster;
87
+ /** 是否 @ 了自己 */
88
+ #atMe = false;
89
+ /** 被 @ 的用户 */
90
+ #atUsers = [];
91
+ /** 图片段(含引用消息里的) */
92
+ #images = [];
93
+ /** 是否已被阻断 */
94
+ #stopped = false;
95
+ /** 当前执行中的插件 */
96
+ #binding;
97
+ /**
98
+ * @param incoming 适配器产出的消息事件
99
+ * @param bot 接收该事件的 Bot
100
+ * @param opts 工厂依赖
101
+ */
102
+ constructor(incoming, bot, opts) {
103
+ this.#logger = opts.logger;
104
+ this.#policy = opts.policy;
105
+ this.#prompts = opts.prompts;
106
+ this.id = incoming.id ?? createEventId();
107
+ this.time = incoming.time ?? Date.now();
108
+ this.platform = bot.platform;
109
+ this.selfId = bot.selfId;
110
+ this.bot = bot;
111
+ this.raw = incoming.raw;
112
+ this.scene = incoming.scene;
113
+ this.subType = incoming.subType ?? incoming.scene;
114
+ this.messageId = incoming.messageId;
115
+ this.seq = incoming.seq;
116
+ // 不复制数组:适配器交出来就不该再持有它,复制只是白白多一次分配。
117
+ // 中间件改写 message 是被允许的,改的就是这一份。
118
+ this.message = incoming.message;
119
+ this.sender = incoming.sender;
120
+ this.group = incoming.group;
121
+ this.channel = incoming.channel;
122
+ this.quote = incoming.quote;
123
+ this.#role = "role" in incoming.sender ? incoming.sender.role : undefined;
124
+ this.#isMaster = opts.policy.isMaster(incoming.sender.uid);
125
+ this.#target = this.#computeTarget();
126
+ this.refresh();
127
+ }
128
+ /** 是否 @ 了自己(含 @全体、含昵称呼唤) */
129
+ get atMe() {
130
+ return this.#atMe;
131
+ }
132
+ /** 被 @ 的用户 id 列表 */
133
+ get atUsers() {
134
+ return this.#atUsers;
135
+ }
136
+ /** 消息中的图片段(含引用消息里的图) */
137
+ get images() {
138
+ return this.#images;
139
+ }
140
+ /** 发送者是否主人 */
141
+ get isMaster() {
142
+ return this.#isMaster;
143
+ }
144
+ /** 发送者是否群管理(群主也算) */
145
+ get isGroupAdmin() {
146
+ return this.#role === "owner" || this.#role === "admin";
147
+ }
148
+ /** 发送者是否群主 */
149
+ get isGroupOwner() {
150
+ return this.#role === "owner";
151
+ }
152
+ /** 是否私聊 */
153
+ get isPrivate() {
154
+ return this.scene === "private";
155
+ }
156
+ /** 是否群聊(频道不算,频道判断用 `scene === "guild"`) */
157
+ get isGroup() {
158
+ return this.scene === "group";
159
+ }
160
+ /** 回复该消息时应发往的目标 */
161
+ get target() {
162
+ return this.#target;
163
+ }
164
+ /** 是否已被阻断 */
165
+ get stopped() {
166
+ return this.#stopped;
167
+ }
168
+ /** 阻断后续中间件与命令匹配 */
169
+ stop() {
170
+ this.#stopped = true;
171
+ }
172
+ /**
173
+ * 绑定当前正在执行的插件
174
+ * @param view 插件运行时视图
175
+ */
176
+ bind(view) {
177
+ this.#binding = view;
178
+ }
179
+ /** 改写 `message` 后重算派生字段 */
180
+ refresh() {
181
+ const message = this.message;
182
+ const atUsers = atUsersOf(message);
183
+ const images = imagesOf(message);
184
+ // 引用消息里的图也算进来:这是"识图"类指令唯一的数据来源。
185
+ // 放在自身图片之后 —— 用户自己发的图优先级更高。
186
+ const quoted = this.quote?.message;
187
+ if (quoted !== undefined && quoted.length > 0)
188
+ images.push(...imagesOf(quoted));
189
+ let atMe = hasAtAll(message);
190
+ if (!atMe) {
191
+ for (const uid of atUsers) {
192
+ if (uid === this.selfId) {
193
+ atMe = true;
194
+ break;
195
+ }
196
+ }
197
+ }
198
+ let text = textOf(message);
199
+ const stripped = this.#stripNickname(text);
200
+ if (stripped !== undefined) {
201
+ // 昵称已经从 text 里剥掉:这样 `云崽 #体力` 与 `#体力` 走同一条路由,
202
+ // 插件不必自己处理昵称前缀
203
+ text = stripped;
204
+ atMe = true;
205
+ }
206
+ this.text = text;
207
+ this.#atUsers = atUsers;
208
+ this.#images = images;
209
+ this.#atMe = atMe;
210
+ }
211
+ /**
212
+ * 回复
213
+ * @param content 消息内容
214
+ * @param opts 回复选项
215
+ * @returns 发送结果
216
+ */
217
+ async reply(content, opts = {}) {
218
+ const segments = toSegments(content);
219
+ if (segments.length === 0) {
220
+ // 空内容送到平台上通常是一个含义不明的 API 报错。这里拦下并指名道姓,
221
+ // 因为源头几乎总是插件里某个分支忘了赋值。
222
+ this.#logger.warn(`插件 ${this.#binding?.name ?? "未知"} 回复了空内容,已忽略(事件 ${this.id})`);
223
+ return { ok: false, messageId: "", time: Date.now() };
224
+ }
225
+ const payload = opts.at === true && this.isGroup ? [seg.at(this.sender.uid, this.sender.name), ...segments] : segments;
226
+ const send = {};
227
+ if (opts.quote === true)
228
+ send.quote = this.messageId;
229
+ else if (typeof opts.quote === "string")
230
+ send.quote = opts.quote;
231
+ if (opts.recallAfter !== undefined)
232
+ send.recallAfter = opts.recallAfter;
233
+ if (opts.autoForward !== undefined)
234
+ send.autoForward = opts.autoForward;
235
+ if (opts.splitLength !== undefined)
236
+ send.splitLength = opts.splitLength;
237
+ return this.bot.sendMessage(this.#target, payload, send);
238
+ }
239
+ /**
240
+ * 渲染实现
241
+ * @param first 页面或模板路径
242
+ * @param second TSX 通路为渲染选项,字符串通路为模板数据
243
+ * @param third 字符串通路的渲染选项
244
+ * @returns 图片段
245
+ * @throws 不在插件执行上下文里调用时
246
+ */
247
+ async render(first, second, third) {
248
+ const binding = this.#binding;
249
+ if (binding === undefined) {
250
+ throw new Error("e.render() 只能在插件的命令处理函数或中间件里调用:内核要靠「当前插件」定位模板根目录。" +
251
+ "若要在 setTimeout 等脱离上下文的回调里渲染,请改用 ctx.render()");
252
+ }
253
+ // 两条通路在此汇合后原样转交给上下文,由其统一判别形态 —— 此处再判一次
254
+ // 只会让"形态如何判定"散落在两个文件里
255
+ if (typeof first === "string")
256
+ return binding.render(first, second, third);
257
+ return binding.render(first, second);
258
+ }
259
+ /**
260
+ * 渲染并回复的实现
261
+ * @param first 页面或模板路径
262
+ * @param second TSX 通路为选项,字符串通路为模板数据
263
+ * @param third 字符串通路的选项
264
+ * @returns 发送结果
265
+ */
266
+ async renderReply(first, second, third) {
267
+ // 选项在两条通路里位置不同:TSX 通路是第二参,字符串通路是第三参。
268
+ // reply 也要用到同一份选项(quote / recallAfter 等),故先归一
269
+ const opts = typeof first === "string" ? third : second;
270
+ const image = typeof first === "string"
271
+ ? await this.render(first, second, third)
272
+ : await this.render(first, second);
273
+ return this.reply(image, opts);
274
+ }
275
+ /**
276
+ * 撤回本条消息
277
+ * @returns 是否成功
278
+ */
279
+ async recall() {
280
+ if (!this.bot.caps.has("recall"))
281
+ return false;
282
+ try {
283
+ return await this.bot.recallMessage(this.messageId);
284
+ }
285
+ catch (err) {
286
+ // 撤回失败是家常便饭(超过 2 分钟、没有管理权限),不值得往上抛
287
+ this.#logger.debug(`撤回消息 ${this.messageId} 失败:${errText(err)}`);
288
+ return false;
289
+ }
290
+ }
291
+ /**
292
+ * 等待同一会话的下一条消息
293
+ * @param opts 等待选项
294
+ * @returns 下一条消息事件;超时或插件卸载时 undefined
295
+ */
296
+ async prompt(opts = {}) {
297
+ if (opts.tip !== undefined)
298
+ await this.reply(opts.tip);
299
+ const binding = this.#binding;
300
+ return this.#prompts.wait({
301
+ key: sessionKeyOf(this),
302
+ uid: this.sender.uid,
303
+ sameUser: opts.sameUser !== false,
304
+ timeout: parseDuration(opts.timeout, DEFAULT_PROMPT_TIMEOUT),
305
+ filter: opts.filter,
306
+ plugin: binding?.name ?? "未知",
307
+ signal: binding?.signal
308
+ });
309
+ }
310
+ /**
311
+ * 剥除开头的机器人昵称
312
+ *
313
+ * 取**最长**匹配而非遍历顺序上的第一个:昵称配置为 `["云", "云崽"]` 时,
314
+ * 先命中 `云` 会将 `云崽帮我看看` 剥为 `崽帮我看看`。一次遍历即可求得最长者,
315
+ * 不必为此排序(昵称列表可能在 WebUI 中随时修改,排序结果无法长期缓存)。
316
+ * @param text 当前纯文本
317
+ * @returns 剥除昵称后的文本;未命中昵称时 undefined
318
+ */
319
+ #stripNickname(text) {
320
+ if (text === "")
321
+ return undefined;
322
+ let best = "";
323
+ for (const nick of this.#policy.nicknames) {
324
+ if (nick === "" || nick.length <= best.length)
325
+ continue;
326
+ if (text.startsWith(nick))
327
+ best = nick;
328
+ }
329
+ if (best === "")
330
+ return undefined;
331
+ return text.slice(best.length).replace(NICKNAME_TAIL_RE, "");
332
+ }
333
+ /**
334
+ * 算出回复目标
335
+ * @returns 发送目标
336
+ */
337
+ #computeTarget() {
338
+ switch (this.scene) {
339
+ case "group": {
340
+ const gid = this.group?.gid;
341
+ if (gid !== undefined)
342
+ return { scene: "group", gid };
343
+ break;
344
+ }
345
+ case "guild": {
346
+ const ch = this.channel;
347
+ if (ch !== undefined)
348
+ return { scene: "guild", guildId: ch.guildId, channelId: ch.channelId };
349
+ break;
350
+ }
351
+ case "private": {
352
+ const gid = this.group?.gid;
353
+ // 群临时会话带上来源群号:部分平台(OneBot 的 temp 会话)非它不可发
354
+ return gid === undefined
355
+ ? { scene: "private", uid: this.sender.uid }
356
+ : { scene: "private", uid: this.sender.uid, gid };
357
+ }
358
+ }
359
+ // 适配器声明了场景却没给对应的会话标识,属于适配器 bug。
360
+ // 退化成私聊回给发送者:至少用户能看到回复,而不是静默失败。
361
+ this.#logger.error(`事件 ${this.id} 的场景为 ${this.scene} 但缺少${this.scene === "group" ? "群号" : "频道信息"},` +
362
+ `已退化为私聊回复;请检查适配器 ${this.bot.adapterId}`);
363
+ return { scene: "private", uid: this.sender.uid };
364
+ }
365
+ }
366
+ /**
367
+ * 运行时事件工厂
368
+ *
369
+ * 内核里唯一构造事件的地方。适配器把 `IncomingEvent` 交给 `host.submit()`,
370
+ * 由 dispatch 调这里补全成运行时形态。
371
+ */
372
+ export class EventFactory {
373
+ /** 工厂依赖 */
374
+ #opts;
375
+ /**
376
+ * @param opts 构造参数
377
+ */
378
+ constructor(opts) {
379
+ this.#opts = opts;
380
+ }
381
+ /**
382
+ * 按事件大类分派构造
383
+ * @param incoming 适配器产出的事件
384
+ * @param bot 接收该事件的 Bot
385
+ * @returns 运行时事件
386
+ */
387
+ create(incoming, bot) {
388
+ switch (incoming.kind) {
389
+ case "message":
390
+ return this.createMessage(incoming, bot);
391
+ case "notice":
392
+ return this.createNotice(incoming, bot);
393
+ case "request":
394
+ return this.createRequest(incoming, bot);
395
+ case "meta":
396
+ return this.createMeta(incoming, bot);
397
+ }
398
+ }
399
+ /**
400
+ * 构造运行时消息事件
401
+ * @param incoming 适配器产出的消息事件
402
+ * @param bot 接收该事件的 Bot
403
+ * @returns 运行时消息事件
404
+ */
405
+ createMessage(incoming, bot) {
406
+ return new MessageEventImpl(incoming, bot, this.#opts);
407
+ }
408
+ /**
409
+ * 构造运行时通知事件
410
+ * @param incoming 适配器产出的通知事件
411
+ * @param bot 接收该事件的 Bot
412
+ * @returns 运行时通知事件
413
+ */
414
+ createNotice(incoming, bot) {
415
+ const target = noticeTargetOf(incoming);
416
+ let stopped = false;
417
+ const event = {
418
+ ...incoming,
419
+ id: incoming.id ?? createEventId(),
420
+ time: incoming.time ?? Date.now(),
421
+ platform: bot.platform,
422
+ selfId: bot.selfId,
423
+ bot,
424
+ raw: incoming.raw,
425
+ state: {},
426
+ stop() {
427
+ stopped = true;
428
+ },
429
+ // 写成 getter 而不是普通字段:`stop()` 必须能被下游立刻看见
430
+ get stopped() {
431
+ return stopped;
432
+ },
433
+ /**
434
+ * 就地回复
435
+ * @param content 消息内容
436
+ * @returns 发送结果
437
+ * @throws 该通知没有可回复的会话时
438
+ */
439
+ async reply(content) {
440
+ if (target === undefined) {
441
+ throw new Error(`通知事件 ${incoming.noticeType} 没有可回复的会话(既无群号也无用户 id)`);
442
+ }
443
+ return bot.sendMessage(target, content);
444
+ }
445
+ };
446
+ return event;
447
+ }
448
+ /**
449
+ * 构造运行时请求事件
450
+ * @param incoming 适配器产出的请求事件
451
+ * @param bot 接收该事件的 Bot
452
+ * @returns 运行时请求事件
453
+ */
454
+ createRequest(incoming, bot) {
455
+ let stopped = false;
456
+ /**
457
+ * 落到平台的同意/拒绝
458
+ *
459
+ * 好友与加群的第三个参数含义不同:好友是"同意后设置的备注",
460
+ * 加群是"拒绝的理由"。该不对称源自 OneBot,在此处封装以免插件误用。
461
+ * @param approve 是否同意
462
+ * @param extra 备注或理由
463
+ */
464
+ const handle = async (approve, extra) => {
465
+ if (incoming.requestType === "friend") {
466
+ if (bot.handleFriendRequest === undefined) {
467
+ throw new Error(`账号 ${bot.selfId} 的适配器未实现处理好友请求`);
468
+ }
469
+ await bot.handleFriendRequest(incoming.flag, approve, approve ? extra : undefined);
470
+ return;
471
+ }
472
+ if (bot.handleGroupRequest === undefined) {
473
+ throw new Error(`账号 ${bot.selfId} 的适配器未实现处理加群请求`);
474
+ }
475
+ await bot.handleGroupRequest(incoming.flag, approve, approve ? undefined : extra);
476
+ };
477
+ const event = {
478
+ ...incoming,
479
+ id: incoming.id ?? createEventId(),
480
+ time: incoming.time ?? Date.now(),
481
+ platform: bot.platform,
482
+ selfId: bot.selfId,
483
+ bot,
484
+ raw: incoming.raw,
485
+ state: {},
486
+ stop() {
487
+ stopped = true;
488
+ },
489
+ /** 是否已被阻断 */
490
+ get stopped() {
491
+ return stopped;
492
+ },
493
+ /**
494
+ * 同意
495
+ * @param extra 好友请求的备注
496
+ */
497
+ async approve(extra) {
498
+ await handle(true, extra);
499
+ },
500
+ /**
501
+ * 拒绝
502
+ * @param reason 拒绝理由
503
+ */
504
+ async reject(reason) {
505
+ await handle(false, reason);
506
+ }
507
+ };
508
+ return event;
509
+ }
510
+ /**
511
+ * 构造运行时元事件
512
+ * @param incoming 适配器产出的元事件
513
+ * @param bot 接收该事件的 Bot
514
+ * @returns 运行时元事件
515
+ */
516
+ createMeta(incoming, bot) {
517
+ let stopped = false;
518
+ const event = {
519
+ ...incoming,
520
+ id: incoming.id ?? createEventId(),
521
+ time: incoming.time ?? Date.now(),
522
+ platform: bot.platform,
523
+ selfId: bot.selfId,
524
+ bot,
525
+ raw: incoming.raw,
526
+ state: {},
527
+ stop() {
528
+ stopped = true;
529
+ },
530
+ /** 是否已被阻断 */
531
+ get stopped() {
532
+ return stopped;
533
+ }
534
+ };
535
+ return event;
536
+ }
537
+ }
538
+ //# sourceMappingURL=event.js.map