openbotgate 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.
Files changed (425) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +293 -0
  3. package/bin/openbotgate.js +31 -0
  4. package/dist/config/config.d.ts +56 -0
  5. package/dist/config/config.d.ts.map +1 -0
  6. package/dist/config/config.js +136 -0
  7. package/dist/config/config.js.map +1 -0
  8. package/dist/debug.d.ts +2 -0
  9. package/dist/debug.d.ts.map +1 -0
  10. package/dist/debug.js +33 -0
  11. package/dist/debug.js.map +1 -0
  12. package/dist/gateway/bluebubbles.d.ts +12 -0
  13. package/dist/gateway/bluebubbles.d.ts.map +1 -0
  14. package/dist/gateway/bluebubbles.js +80 -0
  15. package/dist/gateway/bluebubbles.js.map +1 -0
  16. package/dist/gateway/catalog.d.ts +10 -0
  17. package/dist/gateway/catalog.d.ts.map +1 -0
  18. package/dist/gateway/catalog.js +28 -0
  19. package/dist/gateway/catalog.js.map +1 -0
  20. package/dist/gateway/discord.d.ts +12 -0
  21. package/dist/gateway/discord.d.ts.map +1 -0
  22. package/dist/gateway/discord.js +83 -0
  23. package/dist/gateway/discord.js.map +1 -0
  24. package/dist/gateway/feishu.d.ts +35 -0
  25. package/dist/gateway/feishu.d.ts.map +1 -0
  26. package/dist/gateway/feishu.js +290 -0
  27. package/dist/gateway/feishu.js.map +1 -0
  28. package/dist/gateway/googlechat.d.ts +11 -0
  29. package/dist/gateway/googlechat.d.ts.map +1 -0
  30. package/dist/gateway/googlechat.js +92 -0
  31. package/dist/gateway/googlechat.js.map +1 -0
  32. package/dist/gateway/imessage.d.ts +12 -0
  33. package/dist/gateway/imessage.d.ts.map +1 -0
  34. package/dist/gateway/imessage.js +84 -0
  35. package/dist/gateway/imessage.js.map +1 -0
  36. package/dist/gateway/index.d.ts +9 -0
  37. package/dist/gateway/index.d.ts.map +1 -0
  38. package/dist/gateway/index.js +27 -0
  39. package/dist/gateway/index.js.map +1 -0
  40. package/dist/gateway/line.d.ts +13 -0
  41. package/dist/gateway/line.d.ts.map +1 -0
  42. package/dist/gateway/line.js +80 -0
  43. package/dist/gateway/line.js.map +1 -0
  44. package/dist/gateway/matrix.d.ts +12 -0
  45. package/dist/gateway/matrix.d.ts.map +1 -0
  46. package/dist/gateway/matrix.js +105 -0
  47. package/dist/gateway/matrix.js.map +1 -0
  48. package/dist/gateway/mattermost.d.ts +14 -0
  49. package/dist/gateway/mattermost.d.ts.map +1 -0
  50. package/dist/gateway/mattermost.js +92 -0
  51. package/dist/gateway/mattermost.js.map +1 -0
  52. package/dist/gateway/msteams.d.ts +12 -0
  53. package/dist/gateway/msteams.d.ts.map +1 -0
  54. package/dist/gateway/msteams.js +119 -0
  55. package/dist/gateway/msteams.js.map +1 -0
  56. package/dist/gateway/nextcloud-talk.d.ts +11 -0
  57. package/dist/gateway/nextcloud-talk.d.ts.map +1 -0
  58. package/dist/gateway/nextcloud-talk.js +93 -0
  59. package/dist/gateway/nextcloud-talk.js.map +1 -0
  60. package/dist/gateway/nostr.d.ts +15 -0
  61. package/dist/gateway/nostr.d.ts.map +1 -0
  62. package/dist/gateway/nostr.js +95 -0
  63. package/dist/gateway/nostr.js.map +1 -0
  64. package/dist/gateway/qq-guild.d.ts +14 -0
  65. package/dist/gateway/qq-guild.d.ts.map +1 -0
  66. package/dist/gateway/qq-guild.js +121 -0
  67. package/dist/gateway/qq-guild.js.map +1 -0
  68. package/dist/gateway/qq.d.ts +14 -0
  69. package/dist/gateway/qq.d.ts.map +1 -0
  70. package/dist/gateway/qq.js +121 -0
  71. package/dist/gateway/qq.js.map +1 -0
  72. package/dist/gateway/registry.d.ts +4 -0
  73. package/dist/gateway/registry.d.ts.map +1 -0
  74. package/dist/gateway/registry.js +38 -0
  75. package/dist/gateway/registry.js.map +1 -0
  76. package/dist/gateway/signal.d.ts +12 -0
  77. package/dist/gateway/signal.d.ts.map +1 -0
  78. package/dist/gateway/signal.js +80 -0
  79. package/dist/gateway/signal.js.map +1 -0
  80. package/dist/gateway/slack.d.ts +12 -0
  81. package/dist/gateway/slack.d.ts.map +1 -0
  82. package/dist/gateway/slack.js +83 -0
  83. package/dist/gateway/slack.js.map +1 -0
  84. package/dist/gateway/stub.d.ts +7 -0
  85. package/dist/gateway/stub.d.ts.map +1 -0
  86. package/dist/gateway/stub.js +23 -0
  87. package/dist/gateway/stub.js.map +1 -0
  88. package/dist/gateway/telegram.d.ts +12 -0
  89. package/dist/gateway/telegram.d.ts.map +1 -0
  90. package/dist/gateway/telegram.js +61 -0
  91. package/dist/gateway/telegram.js.map +1 -0
  92. package/dist/gateway/tlon.d.ts +12 -0
  93. package/dist/gateway/tlon.d.ts.map +1 -0
  94. package/dist/gateway/tlon.js +105 -0
  95. package/dist/gateway/tlon.js.map +1 -0
  96. package/dist/gateway/types.d.ts +21 -0
  97. package/dist/gateway/types.d.ts.map +1 -0
  98. package/dist/gateway/types.js +3 -0
  99. package/dist/gateway/types.js.map +1 -0
  100. package/dist/gateway/whatsapp.d.ts +12 -0
  101. package/dist/gateway/whatsapp.d.ts.map +1 -0
  102. package/dist/gateway/whatsapp.js +81 -0
  103. package/dist/gateway/whatsapp.js.map +1 -0
  104. package/dist/gateway/zalo.d.ts +12 -0
  105. package/dist/gateway/zalo.d.ts.map +1 -0
  106. package/dist/gateway/zalo.js +77 -0
  107. package/dist/gateway/zalo.js.map +1 -0
  108. package/dist/gateway/zalouser.d.ts +12 -0
  109. package/dist/gateway/zalouser.d.ts.map +1 -0
  110. package/dist/gateway/zalouser.js +85 -0
  111. package/dist/gateway/zalouser.js.map +1 -0
  112. package/dist/handler/code/agent.d.ts +10 -0
  113. package/dist/handler/code/agent.d.ts.map +1 -0
  114. package/dist/handler/code/agent.js +63 -0
  115. package/dist/handler/code/agent.js.map +1 -0
  116. package/dist/handler/code/code.d.ts +15 -0
  117. package/dist/handler/code/code.d.ts.map +1 -0
  118. package/dist/handler/code/code.js +129 -0
  119. package/dist/handler/code/code.js.map +1 -0
  120. package/dist/handler/code/model.d.ts +10 -0
  121. package/dist/handler/code/model.d.ts.map +1 -0
  122. package/dist/handler/code/model.js +63 -0
  123. package/dist/handler/code/model.js.map +1 -0
  124. package/dist/handler/code/new.d.ts +7 -0
  125. package/dist/handler/code/new.d.ts.map +1 -0
  126. package/dist/handler/code/new.js +27 -0
  127. package/dist/handler/code/new.js.map +1 -0
  128. package/dist/handler/code/opencode.d.ts +12 -0
  129. package/dist/handler/code/opencode.d.ts.map +1 -0
  130. package/dist/handler/code/opencode.js +88 -0
  131. package/dist/handler/code/opencode.js.map +1 -0
  132. package/dist/handler/code/session.d.ts +9 -0
  133. package/dist/handler/code/session.d.ts.map +1 -0
  134. package/dist/handler/code/session.js +55 -0
  135. package/dist/handler/code/session.js.map +1 -0
  136. package/dist/handler/code/workspace.d.ts +10 -0
  137. package/dist/handler/code/workspace.d.ts.map +1 -0
  138. package/dist/handler/code/workspace.js +80 -0
  139. package/dist/handler/code/workspace.js.map +1 -0
  140. package/dist/handler/commands/agent.d.ts +10 -0
  141. package/dist/handler/commands/agent.d.ts.map +1 -0
  142. package/dist/handler/commands/agent.js +63 -0
  143. package/dist/handler/commands/agent.js.map +1 -0
  144. package/dist/handler/commands/async.d.ts +3 -0
  145. package/dist/handler/commands/async.d.ts.map +1 -0
  146. package/dist/handler/commands/async.js +30 -0
  147. package/dist/handler/commands/async.js.map +1 -0
  148. package/dist/handler/commands/claude.d.ts +3 -0
  149. package/dist/handler/commands/claude.d.ts.map +1 -0
  150. package/dist/handler/commands/claude.js +19 -0
  151. package/dist/handler/commands/claude.js.map +1 -0
  152. package/dist/handler/commands/code.d.ts +15 -0
  153. package/dist/handler/commands/code.d.ts.map +1 -0
  154. package/dist/handler/commands/code.js +133 -0
  155. package/dist/handler/commands/code.js.map +1 -0
  156. package/dist/handler/commands/git.d.ts +3 -0
  157. package/dist/handler/commands/git.d.ts.map +1 -0
  158. package/dist/handler/commands/git.js +25 -0
  159. package/dist/handler/commands/git.js.map +1 -0
  160. package/dist/handler/commands/help.d.ts +3 -0
  161. package/dist/handler/commands/help.d.ts.map +1 -0
  162. package/dist/handler/commands/help.js +49 -0
  163. package/dist/handler/commands/help.js.map +1 -0
  164. package/dist/handler/commands/index.d.ts +10 -0
  165. package/dist/handler/commands/index.d.ts.map +1 -0
  166. package/dist/handler/commands/index.js +43 -0
  167. package/dist/handler/commands/index.js.map +1 -0
  168. package/dist/handler/commands/model.d.ts +10 -0
  169. package/dist/handler/commands/model.d.ts.map +1 -0
  170. package/dist/handler/commands/model.js +63 -0
  171. package/dist/handler/commands/model.js.map +1 -0
  172. package/dist/handler/commands/new.d.ts +3 -0
  173. package/dist/handler/commands/new.d.ts.map +1 -0
  174. package/dist/handler/commands/new.js +25 -0
  175. package/dist/handler/commands/new.js.map +1 -0
  176. package/dist/handler/commands/opencode.d.ts +12 -0
  177. package/dist/handler/commands/opencode.d.ts.map +1 -0
  178. package/dist/handler/commands/opencode.js +131 -0
  179. package/dist/handler/commands/opencode.js.map +1 -0
  180. package/dist/handler/commands/session.d.ts +9 -0
  181. package/dist/handler/commands/session.d.ts.map +1 -0
  182. package/dist/handler/commands/session.js +55 -0
  183. package/dist/handler/commands/session.js.map +1 -0
  184. package/dist/handler/commands/shell.d.ts +11 -0
  185. package/dist/handler/commands/shell.d.ts.map +1 -0
  186. package/dist/handler/commands/shell.js +142 -0
  187. package/dist/handler/commands/shell.js.map +1 -0
  188. package/dist/handler/commands/status.d.ts +3 -0
  189. package/dist/handler/commands/status.d.ts.map +1 -0
  190. package/dist/handler/commands/status.js +21 -0
  191. package/dist/handler/commands/status.js.map +1 -0
  192. package/dist/handler/commands/sync.d.ts +3 -0
  193. package/dist/handler/commands/sync.d.ts.map +1 -0
  194. package/dist/handler/commands/sync.js +26 -0
  195. package/dist/handler/commands/sync.js.map +1 -0
  196. package/dist/handler/commands/tasks.d.ts +10 -0
  197. package/dist/handler/commands/tasks.d.ts.map +1 -0
  198. package/dist/handler/commands/tasks.js +58 -0
  199. package/dist/handler/commands/tasks.js.map +1 -0
  200. package/dist/handler/commands/utils.d.ts +10 -0
  201. package/dist/handler/commands/utils.d.ts.map +1 -0
  202. package/dist/handler/commands/utils.js +63 -0
  203. package/dist/handler/commands/utils.js.map +1 -0
  204. package/dist/handler/commands/workspace.d.ts +10 -0
  205. package/dist/handler/commands/workspace.d.ts.map +1 -0
  206. package/dist/handler/commands/workspace.js +80 -0
  207. package/dist/handler/commands/workspace.js.map +1 -0
  208. package/dist/handler/dedup.d.ts +3 -0
  209. package/dist/handler/dedup.d.ts.map +1 -0
  210. package/dist/handler/dedup.js +29 -0
  211. package/dist/handler/dedup.js.map +1 -0
  212. package/dist/handler/index.d.ts +21 -0
  213. package/dist/handler/index.d.ts.map +1 -0
  214. package/dist/handler/index.js +189 -0
  215. package/dist/handler/index.js.map +1 -0
  216. package/dist/handler/parse.d.ts +30 -0
  217. package/dist/handler/parse.d.ts.map +1 -0
  218. package/dist/handler/parse.js +57 -0
  219. package/dist/handler/parse.js.map +1 -0
  220. package/dist/handler/session/agent.d.ts +10 -0
  221. package/dist/handler/session/agent.d.ts.map +1 -0
  222. package/dist/handler/session/agent.js +63 -0
  223. package/dist/handler/session/agent.js.map +1 -0
  224. package/dist/handler/session/model.d.ts +10 -0
  225. package/dist/handler/session/model.d.ts.map +1 -0
  226. package/dist/handler/session/model.js +63 -0
  227. package/dist/handler/session/model.js.map +1 -0
  228. package/dist/handler/session/new.d.ts +3 -0
  229. package/dist/handler/session/new.d.ts.map +1 -0
  230. package/dist/handler/session/new.js +25 -0
  231. package/dist/handler/session/new.js.map +1 -0
  232. package/dist/handler/session/session.d.ts +9 -0
  233. package/dist/handler/session/session.d.ts.map +1 -0
  234. package/dist/handler/session/session.js +55 -0
  235. package/dist/handler/session/session.js.map +1 -0
  236. package/dist/handler/session/workspace.d.ts +10 -0
  237. package/dist/handler/session/workspace.d.ts.map +1 -0
  238. package/dist/handler/session/workspace.js +80 -0
  239. package/dist/handler/session/workspace.js.map +1 -0
  240. package/dist/handler/shell/git.d.ts +3 -0
  241. package/dist/handler/shell/git.d.ts.map +1 -0
  242. package/dist/handler/shell/git.js +25 -0
  243. package/dist/handler/shell/git.js.map +1 -0
  244. package/dist/handler/shell/runShell.d.ts +7 -0
  245. package/dist/handler/shell/runShell.d.ts.map +1 -0
  246. package/dist/handler/shell/runShell.js +42 -0
  247. package/dist/handler/shell/runShell.js.map +1 -0
  248. package/dist/handler/shell/utils.d.ts +10 -0
  249. package/dist/handler/shell/utils.d.ts.map +1 -0
  250. package/dist/handler/shell/utils.js +63 -0
  251. package/dist/handler/shell/utils.js.map +1 -0
  252. package/dist/handler/streamHandler.d.ts +9 -0
  253. package/dist/handler/streamHandler.d.ts.map +1 -0
  254. package/dist/handler/streamHandler.js +49 -0
  255. package/dist/handler/streamHandler.js.map +1 -0
  256. package/dist/handler/types.d.ts +36 -0
  257. package/dist/handler/types.d.ts.map +1 -0
  258. package/dist/handler/types.js +3 -0
  259. package/dist/handler/types.js.map +1 -0
  260. package/dist/handlers/messageHandler.d.ts +3 -0
  261. package/dist/handlers/messageHandler.d.ts.map +1 -0
  262. package/dist/handlers/messageHandler.js +249 -0
  263. package/dist/handlers/messageHandler.js.map +1 -0
  264. package/dist/handlers/messageHandlerOfficial.d.ts +2 -0
  265. package/dist/handlers/messageHandlerOfficial.d.ts.map +1 -0
  266. package/dist/handlers/messageHandlerOfficial.js +302 -0
  267. package/dist/handlers/messageHandlerOfficial.js.map +1 -0
  268. package/dist/handlers/messageHandlerV2.d.ts +2 -0
  269. package/dist/handlers/messageHandlerV2.d.ts.map +1 -0
  270. package/dist/handlers/messageHandlerV2.js +250 -0
  271. package/dist/handlers/messageHandlerV2.js.map +1 -0
  272. package/dist/helloWorld.d.ts +5 -0
  273. package/dist/helloWorld.d.ts.map +1 -0
  274. package/dist/helloWorld.js +19 -0
  275. package/dist/helloWorld.js.map +1 -0
  276. package/dist/index.d.ts +2 -0
  277. package/dist/index.d.ts.map +1 -0
  278. package/dist/index.js +25 -0
  279. package/dist/index.js.map +1 -0
  280. package/dist/indexOfficial.d.ts +4 -0
  281. package/dist/indexOfficial.d.ts.map +1 -0
  282. package/dist/indexOfficial.js +92 -0
  283. package/dist/indexOfficial.js.map +1 -0
  284. package/dist/indexV2.d.ts +4 -0
  285. package/dist/indexV2.d.ts.map +1 -0
  286. package/dist/indexV2.js +109 -0
  287. package/dist/indexV2.js.map +1 -0
  288. package/dist/runtime/cliTools.d.ts +17 -0
  289. package/dist/runtime/cliTools.d.ts.map +1 -0
  290. package/dist/runtime/cliTools.js +97 -0
  291. package/dist/runtime/cliTools.js.map +1 -0
  292. package/dist/runtime/executor.d.ts +27 -0
  293. package/dist/runtime/executor.d.ts.map +1 -0
  294. package/dist/runtime/executor.js +108 -0
  295. package/dist/runtime/executor.js.map +1 -0
  296. package/dist/runtime/sessionManager.d.ts +42 -0
  297. package/dist/runtime/sessionManager.d.ts.map +1 -0
  298. package/dist/runtime/sessionManager.js +161 -0
  299. package/dist/runtime/sessionManager.js.map +1 -0
  300. package/dist/runtime/streamHandler.d.ts +9 -0
  301. package/dist/runtime/streamHandler.d.ts.map +1 -0
  302. package/dist/runtime/streamHandler.js +49 -0
  303. package/dist/runtime/streamHandler.js.map +1 -0
  304. package/dist/runtime/taskManager.d.ts +26 -0
  305. package/dist/runtime/taskManager.d.ts.map +1 -0
  306. package/dist/runtime/taskManager.js +153 -0
  307. package/dist/runtime/taskManager.js.map +1 -0
  308. package/dist/runtime/tools/base.d.ts +81 -0
  309. package/dist/runtime/tools/base.d.ts.map +1 -0
  310. package/dist/runtime/tools/base.js +100 -0
  311. package/dist/runtime/tools/base.js.map +1 -0
  312. package/dist/runtime/tools/claudecode.d.ts +19 -0
  313. package/dist/runtime/tools/claudecode.d.ts.map +1 -0
  314. package/dist/runtime/tools/claudecode.js +59 -0
  315. package/dist/runtime/tools/claudecode.js.map +1 -0
  316. package/dist/runtime/tools/codex.d.ts +19 -0
  317. package/dist/runtime/tools/codex.d.ts.map +1 -0
  318. package/dist/runtime/tools/codex.js +68 -0
  319. package/dist/runtime/tools/codex.js.map +1 -0
  320. package/dist/runtime/tools/cursor.d.ts +15 -0
  321. package/dist/runtime/tools/cursor.d.ts.map +1 -0
  322. package/dist/runtime/tools/cursor.js +33 -0
  323. package/dist/runtime/tools/cursor.js.map +1 -0
  324. package/dist/runtime/tools/cursorcode.d.ts +20 -0
  325. package/dist/runtime/tools/cursorcode.d.ts.map +1 -0
  326. package/dist/runtime/tools/cursorcode.js +99 -0
  327. package/dist/runtime/tools/cursorcode.js.map +1 -0
  328. package/dist/runtime/tools/geminicode.d.ts +20 -0
  329. package/dist/runtime/tools/geminicode.d.ts.map +1 -0
  330. package/dist/runtime/tools/geminicode.js +65 -0
  331. package/dist/runtime/tools/geminicode.js.map +1 -0
  332. package/dist/runtime/tools/index.d.ts +11 -0
  333. package/dist/runtime/tools/index.d.ts.map +1 -0
  334. package/dist/runtime/tools/index.js +36 -0
  335. package/dist/runtime/tools/index.js.map +1 -0
  336. package/dist/runtime/tools/kimi.d.ts +16 -0
  337. package/dist/runtime/tools/kimi.d.ts.map +1 -0
  338. package/dist/runtime/tools/kimi.js +32 -0
  339. package/dist/runtime/tools/kimi.js.map +1 -0
  340. package/dist/runtime/tools/kimicode.d.ts +16 -0
  341. package/dist/runtime/tools/kimicode.d.ts.map +1 -0
  342. package/dist/runtime/tools/kimicode.js +43 -0
  343. package/dist/runtime/tools/kimicode.js.map +1 -0
  344. package/dist/runtime/tools/nanobot.d.ts +19 -0
  345. package/dist/runtime/tools/nanobot.d.ts.map +1 -0
  346. package/dist/runtime/tools/nanobot.js +94 -0
  347. package/dist/runtime/tools/nanobot.js.map +1 -0
  348. package/dist/runtime/tools/openaicodex.d.ts +17 -0
  349. package/dist/runtime/tools/openaicodex.d.ts.map +1 -0
  350. package/dist/runtime/tools/openaicodex.js +54 -0
  351. package/dist/runtime/tools/openaicodex.js.map +1 -0
  352. package/dist/runtime/tools/openclaw.d.ts +24 -0
  353. package/dist/runtime/tools/openclaw.d.ts.map +1 -0
  354. package/dist/runtime/tools/openclaw.js +88 -0
  355. package/dist/runtime/tools/openclaw.js.map +1 -0
  356. package/dist/runtime/tools/opencode.d.ts +23 -0
  357. package/dist/runtime/tools/opencode.d.ts.map +1 -0
  358. package/dist/runtime/tools/opencode.js +82 -0
  359. package/dist/runtime/tools/opencode.js.map +1 -0
  360. package/dist/runtime/tools/qwencode.d.ts +17 -0
  361. package/dist/runtime/tools/qwencode.d.ts.map +1 -0
  362. package/dist/runtime/tools/qwencode.js +49 -0
  363. package/dist/runtime/tools/qwencode.js.map +1 -0
  364. package/dist/runtime/tools/registerAll.d.ts +9 -0
  365. package/dist/runtime/tools/registerAll.d.ts.map +1 -0
  366. package/dist/runtime/tools/registerAll.js +29 -0
  367. package/dist/runtime/tools/registerAll.js.map +1 -0
  368. package/dist/runtime/tools/registry.d.ts +21 -0
  369. package/dist/runtime/tools/registry.d.ts.map +1 -0
  370. package/dist/runtime/tools/registry.js +41 -0
  371. package/dist/runtime/tools/registry.js.map +1 -0
  372. package/dist/runtime/tools/types.d.ts +67 -0
  373. package/dist/runtime/tools/types.d.ts.map +1 -0
  374. package/dist/runtime/tools/types.js +3 -0
  375. package/dist/runtime/tools/types.js.map +1 -0
  376. package/dist/services/cliTools.d.ts +32 -0
  377. package/dist/services/cliTools.d.ts.map +1 -0
  378. package/dist/services/cliTools.js +149 -0
  379. package/dist/services/cliTools.js.map +1 -0
  380. package/dist/services/commandExecutor.d.ts +29 -0
  381. package/dist/services/commandExecutor.d.ts.map +1 -0
  382. package/dist/services/commandExecutor.js +125 -0
  383. package/dist/services/commandExecutor.js.map +1 -0
  384. package/dist/services/commandExecutor.test.d.ts +2 -0
  385. package/dist/services/commandExecutor.test.d.ts.map +1 -0
  386. package/dist/services/commandExecutor.test.js +54 -0
  387. package/dist/services/commandExecutor.test.js.map +1 -0
  388. package/dist/services/feishuService.d.ts +14 -0
  389. package/dist/services/feishuService.d.ts.map +1 -0
  390. package/dist/services/feishuService.js +103 -0
  391. package/dist/services/feishuService.js.map +1 -0
  392. package/dist/services/feishuServiceOfficial.d.ts +15 -0
  393. package/dist/services/feishuServiceOfficial.d.ts.map +1 -0
  394. package/dist/services/feishuServiceOfficial.js +167 -0
  395. package/dist/services/feishuServiceOfficial.js.map +1 -0
  396. package/dist/services/feishuServiceV2.d.ts +20 -0
  397. package/dist/services/feishuServiceV2.d.ts.map +1 -0
  398. package/dist/services/feishuServiceV2.js +222 -0
  399. package/dist/services/feishuServiceV2.js.map +1 -0
  400. package/dist/services/taskManager.d.ts +25 -0
  401. package/dist/services/taskManager.d.ts.map +1 -0
  402. package/dist/services/taskManager.js +129 -0
  403. package/dist/services/taskManager.js.map +1 -0
  404. package/dist/services/taskManagerSimple.d.ts +25 -0
  405. package/dist/services/taskManagerSimple.d.ts.map +1 -0
  406. package/dist/services/taskManagerSimple.js +147 -0
  407. package/dist/services/taskManagerSimple.js.map +1 -0
  408. package/dist/testHelloWorld.d.ts +2 -0
  409. package/dist/testHelloWorld.d.ts.map +1 -0
  410. package/dist/testHelloWorld.js +18 -0
  411. package/dist/testHelloWorld.js.map +1 -0
  412. package/dist/utils/encoding.d.ts +3 -0
  413. package/dist/utils/encoding.d.ts.map +1 -0
  414. package/dist/utils/encoding.js +110 -0
  415. package/dist/utils/encoding.js.map +1 -0
  416. package/dist/utils/logger.d.ts +19 -0
  417. package/dist/utils/logger.d.ts.map +1 -0
  418. package/dist/utils/logger.js +192 -0
  419. package/dist/utils/logger.js.map +1 -0
  420. package/dist/utils/shellEncoding.d.ts +5 -0
  421. package/dist/utils/shellEncoding.d.ts.map +1 -0
  422. package/dist/utils/shellEncoding.js +117 -0
  423. package/dist/utils/shellEncoding.js.map +1 -0
  424. package/openbotgate.example.yml +60 -0
  425. package/package.json +81 -0
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.msteams = exports.MsteamsGateway = void 0;
7
+ /**
8
+ * Microsoft Teams gateway: receives Bot Framework activities via HTTP, replies via Connector API.
9
+ * Configure Bot in Azure, set messaging endpoint to https://your-host/api/teams.
10
+ */
11
+ const express_1 = __importDefault(require("express"));
12
+ const logger_1 = __importDefault(require("../utils/logger"));
13
+ const config_1 = require("../config/config");
14
+ const MAX_MESSAGE_CACHE = 5000;
15
+ class MsteamsGateway {
16
+ constructor() {
17
+ this.id = 'msteams';
18
+ this.server = null;
19
+ this.messageToConversation = new Map();
20
+ }
21
+ start(messageHandler) {
22
+ const cfg = config_1.config.msteams;
23
+ if (!cfg?.appId || !cfg?.appPassword) {
24
+ throw new Error('MS Teams app id and password required (MSTEAMS_APP_ID, MSTEAMS_APP_PASSWORD)');
25
+ }
26
+ const port = cfg.port ?? 3005;
27
+ const app = (0, express_1.default)();
28
+ app.use(express_1.default.json());
29
+ app.post(cfg.path ?? '/api/messages', (req, res) => {
30
+ const body = req.body;
31
+ res.status(200).end();
32
+ if (body.type !== 'message' || !body.text)
33
+ return;
34
+ const messageId = body.id ?? `${body.conversation?.id}-${Date.now()}`;
35
+ const serviceUrl = body.serviceUrl ?? '';
36
+ const conversationId = body.conversation?.id ?? '';
37
+ if (this.messageToConversation.size >= MAX_MESSAGE_CACHE) {
38
+ const first = this.messageToConversation.keys().next().value;
39
+ if (first)
40
+ this.messageToConversation.delete(first);
41
+ }
42
+ this.messageToConversation.set(messageId, { serviceUrl, conversationId });
43
+ messageHandler({
44
+ messageId,
45
+ chatId: conversationId,
46
+ senderId: body.from?.id ?? '',
47
+ senderName: body.from?.name,
48
+ text: body.text,
49
+ chatType: 'group',
50
+ }).catch((err) => logger_1.default.error('MS Teams handler error', err));
51
+ });
52
+ this.server = app.listen(port, () => {
53
+ logger_1.default.info(`🟢 MS Teams bot listening on port ${port}`);
54
+ });
55
+ }
56
+ async reply(messageId, text) {
57
+ const cached = this.messageToConversation.get(messageId);
58
+ if (!cached || !config_1.config.msteams?.appId)
59
+ return;
60
+ const token = await this.getToken();
61
+ if (!token)
62
+ return;
63
+ const url = `${cached.serviceUrl}/v3/conversations/${encodeURIComponent(cached.conversationId)}/activities`;
64
+ const res = await fetch(url, {
65
+ method: 'POST',
66
+ headers: {
67
+ Authorization: `Bearer ${token}`,
68
+ 'Content-Type': 'application/json',
69
+ },
70
+ body: JSON.stringify({ type: 'message', text }),
71
+ });
72
+ if (!res.ok)
73
+ logger_1.default.error('MS Teams reply failed', res.status, await res.text());
74
+ }
75
+ async send(chatId, _chatIdType, title, content) {
76
+ const text = title ? `${title}\n\n${content}` : content;
77
+ const cached = this.messageToConversation.get(chatId);
78
+ const convId = cached?.conversationId ?? chatId;
79
+ const serviceUrl = cached?.serviceUrl ?? config_1.config.msteams?.serviceUrl ?? '';
80
+ if (!serviceUrl)
81
+ return;
82
+ const token = await this.getToken();
83
+ if (!token)
84
+ return;
85
+ const url = `${serviceUrl}/v3/conversations/${encodeURIComponent(convId)}/activities`;
86
+ const res = await fetch(url, {
87
+ method: 'POST',
88
+ headers: {
89
+ Authorization: `Bearer ${token}`,
90
+ 'Content-Type': 'application/json',
91
+ },
92
+ body: JSON.stringify({ type: 'message', text }),
93
+ });
94
+ if (!res.ok)
95
+ logger_1.default.error('MS Teams send failed', res.status, await res.text());
96
+ }
97
+ async getToken() {
98
+ const cfg = config_1.config.msteams;
99
+ if (!cfg?.appId || !cfg?.appPassword)
100
+ return null;
101
+ const res = await fetch('https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token', {
102
+ method: 'POST',
103
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
104
+ body: new URLSearchParams({
105
+ grant_type: 'client_credentials',
106
+ client_id: cfg.appId,
107
+ client_secret: cfg.appPassword,
108
+ scope: 'https://api.botframework.com/.default',
109
+ }),
110
+ });
111
+ if (!res.ok)
112
+ return null;
113
+ const data = (await res.json());
114
+ return data.access_token ?? null;
115
+ }
116
+ }
117
+ exports.MsteamsGateway = MsteamsGateway;
118
+ exports.msteams = new MsteamsGateway();
119
+ //# sourceMappingURL=msteams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msteams.js","sourceRoot":"","sources":["../../src/gateway/msteams.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { IGateway } from './types';
2
+ export declare class NextcloudTalkGateway implements IGateway {
3
+ readonly id = "nextcloud-talk";
4
+ private server;
5
+ private messageToRoom;
6
+ start(messageHandler: (data: unknown) => Promise<void>): void;
7
+ reply(messageId: string, text: string): Promise<void>;
8
+ send(chatId: string, _chatIdType: string, title: string, content: string): Promise<void>;
9
+ }
10
+ export declare const nextcloudTalk: NextcloudTalkGateway;
11
+ //# sourceMappingURL=nextcloud-talk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextcloud-talk.d.ts","sourceRoot":"","sources":["../../src/gateway/nextcloud-talk.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,qBAAa,oBAAqB,YAAW,QAAQ;IACnD,QAAQ,CAAC,EAAE,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,aAAa,CAA0D;IAE/E,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAwCvD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAe/F;AAED,eAAO,MAAM,aAAa,sBAA6B,CAAC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.nextcloudTalk = exports.NextcloudTalkGateway = void 0;
7
+ /**
8
+ * Nextcloud Talk gateway: incoming webhook + Talk REST API to send messages.
9
+ */
10
+ const express_1 = __importDefault(require("express"));
11
+ const logger_1 = __importDefault(require("../utils/logger"));
12
+ const config_1 = require("../config/config");
13
+ const MAX_MESSAGE_CACHE = 5000;
14
+ class NextcloudTalkGateway {
15
+ constructor() {
16
+ this.id = 'nextcloud-talk';
17
+ this.server = null;
18
+ this.messageToRoom = new Map();
19
+ }
20
+ start(messageHandler) {
21
+ const cfg = config_1.config.nextcloudTalk;
22
+ if (!cfg?.baseUrl || !cfg?.appToken) {
23
+ throw new Error('Nextcloud Talk base URL and app token required (NEXTCLOUD_TALK_BASE_URL, NEXTCLOUD_TALK_APP_TOKEN)');
24
+ }
25
+ const port = cfg.webhookPort ?? 3003;
26
+ const app = (0, express_1.default)();
27
+ app.use(express_1.default.json());
28
+ app.post(cfg.webhookPath ?? '/webhook', (req, res) => {
29
+ const body = req.body;
30
+ res.status(200).end();
31
+ const token = body.room?.token ?? '';
32
+ const roomType = body.room?.type ?? 2;
33
+ const messageId = body.message?.id ?? `${token}-${Date.now()}`;
34
+ const text = (body.message?.message ?? '').trim();
35
+ const senderId = body.actor?.id ?? '';
36
+ const senderName = body.actor?.name;
37
+ if (this.messageToRoom.size >= MAX_MESSAGE_CACHE) {
38
+ const first = this.messageToRoom.keys().next().value;
39
+ if (first)
40
+ this.messageToRoom.delete(first);
41
+ }
42
+ this.messageToRoom.set(messageId, { token, roomType });
43
+ messageHandler({
44
+ messageId,
45
+ chatId: token,
46
+ senderId,
47
+ senderName,
48
+ text,
49
+ chatType: roomType === 1 ? 'p2p' : 'group',
50
+ }).catch((err) => logger_1.default.error('Nextcloud Talk handler error', err));
51
+ });
52
+ this.server = app.listen(port, () => {
53
+ logger_1.default.info(`🟢 Nextcloud Talk webhook listening on port ${port}`);
54
+ });
55
+ }
56
+ async reply(messageId, text) {
57
+ const cached = this.messageToRoom.get(messageId);
58
+ if (!cached || !config_1.config.nextcloudTalk?.baseUrl)
59
+ return;
60
+ const base = config_1.config.nextcloudTalk.baseUrl.replace(/\/$/, '');
61
+ const url = `${base}/ocs/v2.php/apps/spreed/api/v4/chat/${cached.token}`;
62
+ const res = await fetch(url, {
63
+ method: 'POST',
64
+ headers: {
65
+ Authorization: `Basic ${Buffer.from(`app:${config_1.config.nextcloudTalk.appToken}`).toString('base64')}`,
66
+ 'OCS-APIRequest': 'true',
67
+ 'Content-Type': 'application/x-www-form-urlencoded',
68
+ },
69
+ body: new URLSearchParams({ message: text }),
70
+ });
71
+ if (!res.ok)
72
+ logger_1.default.error('Nextcloud Talk reply failed', res.status, await res.text());
73
+ }
74
+ async send(chatId, _chatIdType, title, content) {
75
+ const text = title ? `${title}\n\n${content}` : content;
76
+ const base = config_1.config.nextcloudTalk.baseUrl.replace(/\/$/, '');
77
+ const url = `${base}/ocs/v2.php/apps/spreed/api/v4/chat/${chatId}`;
78
+ const res = await fetch(url, {
79
+ method: 'POST',
80
+ headers: {
81
+ Authorization: `Basic ${Buffer.from(`app:${config_1.config.nextcloudTalk.appToken}`).toString('base64')}`,
82
+ 'OCS-APIRequest': 'true',
83
+ 'Content-Type': 'application/x-www-form-urlencoded',
84
+ },
85
+ body: new URLSearchParams({ message: text }),
86
+ });
87
+ if (!res.ok)
88
+ logger_1.default.error('Nextcloud Talk send failed', res.status, await res.text());
89
+ }
90
+ }
91
+ exports.NextcloudTalkGateway = NextcloudTalkGateway;
92
+ exports.nextcloudTalk = new NextcloudTalkGateway();
93
+ //# sourceMappingURL=nextcloud-talk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextcloud-talk.js","sourceRoot":"","sources":["../../src/gateway/nextcloud-talk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { IGateway } from './types';
2
+ export declare class NostrGateway implements IGateway {
3
+ readonly id = "nostr";
4
+ private pool;
5
+ private secret;
6
+ private pubkey;
7
+ private messageToPeer;
8
+ private sub;
9
+ start(messageHandler: (data: unknown) => Promise<void>): void;
10
+ private createAndPublishDm;
11
+ reply(messageId: string, text: string): Promise<void>;
12
+ send(chatId: string, _chatIdType: string, title: string, content: string): Promise<void>;
13
+ }
14
+ export declare const nostr: NostrGateway;
15
+ //# sourceMappingURL=nostr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nostr.d.ts","sourceRoot":"","sources":["../../src/gateway/nostr.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAYxC,qBAAa,YAAa,YAAW,QAAQ;IAC3C,QAAQ,CAAC,EAAE,WAAW;IACtB,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,GAAG,CAAqD;IAEhE,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;YA0C/C,kBAAkB;IAY1B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI/F;AAED,eAAO,MAAM,KAAK,cAAqB,CAAC"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.nostr = exports.NostrGateway = void 0;
7
+ /**
8
+ * Nostr gateway: NIP-04 encrypted DMs.
9
+ * Uses nostr-tools: connect to relays, subscribe to kind 4 (DM), decrypt and reply.
10
+ */
11
+ const nostr_tools_1 = require("nostr-tools");
12
+ const logger_1 = __importDefault(require("../utils/logger"));
13
+ const config_1 = require("../config/config");
14
+ const MAX_MESSAGE_CACHE = 5000;
15
+ function parseSecret(secret) {
16
+ const s = secret.trim();
17
+ if (s.length === 64 && /^[0-9a-fA-F]+$/.test(s)) {
18
+ return new Uint8Array(Buffer.from(s, 'hex'));
19
+ }
20
+ throw new Error('NOSTR_PRIVATE_KEY must be 64-char hex string');
21
+ }
22
+ class NostrGateway {
23
+ constructor() {
24
+ this.id = 'nostr';
25
+ this.pool = null;
26
+ this.secret = null;
27
+ this.pubkey = '';
28
+ this.messageToPeer = new Map();
29
+ this.sub = null;
30
+ }
31
+ start(messageHandler) {
32
+ const cfg = config_1.config.nostr;
33
+ if (!cfg?.privateKey || !cfg?.relays?.length) {
34
+ throw new Error('Nostr private key and relays required (NOSTR_PRIVATE_KEY, NOSTR_RELAYS)');
35
+ }
36
+ this.secret = parseSecret(cfg.privateKey);
37
+ this.pubkey = (0, nostr_tools_1.getPublicKey)(this.secret);
38
+ this.pool = new nostr_tools_1.SimplePool();
39
+ const relays = cfg.relays;
40
+ this.sub = this.pool.subscribe(relays, { kinds: [4], '#p': [this.pubkey] }, {
41
+ onevent: async (event) => {
42
+ if (event.pubkey === this.pubkey)
43
+ return;
44
+ let text = '';
45
+ try {
46
+ text = await nostr_tools_1.nip04.decrypt(this.secret, event.pubkey, event.content);
47
+ }
48
+ catch (e) {
49
+ logger_1.default.warn('Nostr decrypt failed', e);
50
+ return;
51
+ }
52
+ const messageId = event.id;
53
+ const peer = event.pubkey;
54
+ if (this.messageToPeer.size >= MAX_MESSAGE_CACHE) {
55
+ const first = this.messageToPeer.keys().next().value;
56
+ if (first)
57
+ this.messageToPeer.delete(first);
58
+ }
59
+ this.messageToPeer.set(messageId, peer);
60
+ await messageHandler({
61
+ messageId,
62
+ chatId: peer,
63
+ senderId: peer,
64
+ text,
65
+ chatType: 'p2p',
66
+ }).catch((err) => logger_1.default.error('Nostr handler error', err));
67
+ },
68
+ });
69
+ logger_1.default.info('🟢 Nostr subscribed to DMs');
70
+ }
71
+ async createAndPublishDm(peerPubkey, text) {
72
+ const cipher = await nostr_tools_1.nip04.encrypt(this.secret, peerPubkey, text);
73
+ const template = {
74
+ kind: 4,
75
+ content: cipher,
76
+ tags: [['p', peerPubkey]],
77
+ created_at: Math.floor(Date.now() / 1000),
78
+ };
79
+ const signed = (0, nostr_tools_1.finalizeEvent)(template, this.secret);
80
+ await this.pool.publish(config_1.config.nostr.relays, signed);
81
+ }
82
+ async reply(messageId, text) {
83
+ const peer = this.messageToPeer.get(messageId);
84
+ if (!peer || !this.pool)
85
+ return;
86
+ await this.createAndPublishDm(peer, text);
87
+ }
88
+ async send(chatId, _chatIdType, title, content) {
89
+ const text = title ? `${title}\n\n${content}` : content;
90
+ await this.createAndPublishDm(chatId, text);
91
+ }
92
+ }
93
+ exports.NostrGateway = NostrGateway;
94
+ exports.nostr = new NostrGateway();
95
+ //# sourceMappingURL=nostr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nostr.js","sourceRoot":"","sources":["../../src/gateway/nostr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { IGateway } from './types';
2
+ export declare class QqGuildGateway implements IGateway {
3
+ readonly id = "qq-guild";
4
+ private client;
5
+ private ws;
6
+ private messageToTarget;
7
+ start(messageHandler: (data: unknown) => Promise<void>): void;
8
+ private handleMessage;
9
+ private getClient;
10
+ reply(messageId: string, text: string): Promise<void>;
11
+ send(chatId: string, chatIdType: string, title: string, content: string): Promise<void>;
12
+ }
13
+ export declare const qqGuild: QqGuildGateway;
14
+ //# sourceMappingURL=qq-guild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qq-guild.d.ts","sourceRoot":"","sources":["../../src/gateway/qq-guild.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,EAAE,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiD;IAC/D,OAAO,CAAC,EAAE,CAAmD;IAC7D,OAAO,CAAC,eAAe,CAAmC;IAE1D,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAkC7D,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,SAAS;IAKX,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAa9F;AAED,eAAO,MAAM,OAAO,gBAAuB,CAAC"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.qqGuild = exports.QqGuildGateway = void 0;
7
+ /**
8
+ * QQ 频道网关:使用官方 qq-guild-bot SDK,长连接收消息、OpenAPI 发消息。
9
+ * 无需公网 IP,本机连接腾讯网关即可。
10
+ */
11
+ const qq_guild_bot_1 = require("qq-guild-bot");
12
+ const logger_1 = __importDefault(require("../utils/logger"));
13
+ const config_1 = require("../config/config");
14
+ const MAX_CACHE = 5000;
15
+ class QqGuildGateway {
16
+ constructor() {
17
+ this.id = 'qq-guild';
18
+ this.client = null;
19
+ this.ws = null;
20
+ this.messageToTarget = new Map();
21
+ }
22
+ start(messageHandler) {
23
+ const cfg = config_1.config.qqGuild;
24
+ if (!cfg?.appID || !cfg?.token) {
25
+ throw new Error('QQ 频道 appID 与 token 必填 (QQ_GUILD_APP_ID, QQ_GUILD_TOKEN)');
26
+ }
27
+ const intents = cfg.intents ?? ['PUBLIC_GUILD_MESSAGES', 'DIRECT_MESSAGE'];
28
+ const botConfig = {
29
+ appID: cfg.appID,
30
+ token: cfg.token,
31
+ intents,
32
+ sandbox: cfg.sandbox ?? false,
33
+ };
34
+ this.client = (0, qq_guild_bot_1.createOpenAPI)(botConfig);
35
+ this.ws = (0, qq_guild_bot_1.createWebsocket)(botConfig);
36
+ this.ws.on('PUBLIC_GUILD_MESSAGES', (data) => {
37
+ if (data.eventType !== 'AT_MESSAGE_CREATE' || !data.msg)
38
+ return;
39
+ this.handleMessage(data.msg, false, messageHandler);
40
+ });
41
+ this.ws.on('DIRECT_MESSAGE', (data) => {
42
+ if (data.eventType !== 'DIRECT_MESSAGE_CREATE' || !data.msg)
43
+ return;
44
+ this.handleMessage(data.msg, true, messageHandler);
45
+ });
46
+ this.ws.on('READY', () => {
47
+ logger_1.default.info('🟢 QQ 频道 WebSocket 已连接');
48
+ });
49
+ this.ws.on('ERROR', (err) => {
50
+ logger_1.default.warn('QQ 频道 WS 错误', err);
51
+ });
52
+ this.ws.connect(botConfig);
53
+ }
54
+ handleMessage(msg, isDirect, messageHandler) {
55
+ const messageId = String(msg.id ?? '');
56
+ const content = String(msg.content ?? '').trim();
57
+ const author = msg.author;
58
+ const authorId = author ? String(author.id ?? '') : '';
59
+ const authorName = author ? String(author.username ?? '') : '';
60
+ const channelId = String(msg.channel_id ?? '');
61
+ const guildId = String(msg.guild_id ?? '');
62
+ if (!messageId)
63
+ return;
64
+ if (this.messageToTarget.size >= MAX_CACHE) {
65
+ const first = this.messageToTarget.keys().next().value;
66
+ if (first)
67
+ this.messageToTarget.delete(first);
68
+ }
69
+ this.messageToTarget.set(messageId, { channelId, guildId, isDirect });
70
+ const chatId = isDirect ? guildId : channelId;
71
+ messageHandler({
72
+ messageId,
73
+ chatId,
74
+ senderId: authorId,
75
+ senderName: authorName || undefined,
76
+ text: content,
77
+ chatType: isDirect ? 'p2p' : 'group',
78
+ }).catch((err) => logger_1.default.error('QQ 频道 handler 错误', err));
79
+ }
80
+ getClient() {
81
+ if (!this.client)
82
+ throw new Error('QQ 频道 client 未初始化');
83
+ return this.client;
84
+ }
85
+ async reply(messageId, text) {
86
+ const cached = this.messageToTarget.get(messageId);
87
+ if (!cached) {
88
+ logger_1.default.warn('QQ 频道: 未知 messageId,无法回复');
89
+ return;
90
+ }
91
+ const client = this.getClient();
92
+ const body = { content: text, msg_id: messageId };
93
+ if (cached.isDirect) {
94
+ await client.directMessageApi.postDirectMessage(cached.guildId, body).catch((err) => {
95
+ logger_1.default.warn('QQ 频道 私信回复失败', err);
96
+ });
97
+ }
98
+ else {
99
+ await client.messageApi.postMessage(cached.channelId, body).catch((err) => {
100
+ logger_1.default.warn('QQ 频道 频道消息回复失败', err);
101
+ });
102
+ }
103
+ }
104
+ async send(chatId, chatIdType, title, content) {
105
+ const text = title ? `${title}\n\n${content}` : content;
106
+ const client = this.getClient();
107
+ if (chatIdType === 'private' || chatIdType === 'p2p') {
108
+ await client.directMessageApi.postDirectMessage(chatId, { content: text }).catch((err) => {
109
+ logger_1.default.warn('QQ 频道 私信发送失败', err);
110
+ });
111
+ }
112
+ else {
113
+ await client.messageApi.postMessage(chatId, { content: text }).catch((err) => {
114
+ logger_1.default.warn('QQ 频道 频道消息发送失败', err);
115
+ });
116
+ }
117
+ }
118
+ }
119
+ exports.QqGuildGateway = QqGuildGateway;
120
+ exports.qqGuild = new QqGuildGateway();
121
+ //# sourceMappingURL=qq-guild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qq-guild.js","sourceRoot":"","sources":["../../src/gateway/qq-guild.ts"],"names":[],"mappings":";;;;;;AAAA;;;GAGG;AACH,+CAA+F;AAC/F,6DAAqC;AACrC,6CAA0C;AAG1C,MAAM,SAAS,GAAG,IAAI,CAAC;AAIvB,MAAa,cAAc;IAA3B;QACW,OAAE,GAAG,UAAU,CAAC;QACjB,WAAM,GAA4C,IAAI,CAAC;QACvD,OAAE,GAA8C,IAAI,CAAC;QACrD,oBAAe,GAAG,IAAI,GAAG,EAAwB,CAAC;IAsG5D,CAAC;IApGC,KAAK,CAAC,cAAgD;QACpD,MAAM,GAAG,GAAG,eAAM,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,OAAO,GACV,GAAG,CAAC,OAAwC,IAAK,CAAC,uBAAuB,EAAE,gBAAgB,CAAW,CAAC;QAC1G,MAAM,SAAS,GAAG;YAChB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO;YACP,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,KAAK;SAC9B,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAA,4BAAa,EAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,GAAG,IAAA,8BAAe,EAAC,SAAS,CAAC,CAAC;QAErC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAA6E,EAAE,EAAE;YACpH,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,IAAI,CAAC,IAAI,CAAC,GAAG;gBAAE,OAAO;YAChE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,IAA6E,EAAE,EAAE;YAC7G,IAAI,IAAI,CAAC,SAAS,KAAK,uBAAuB,IAAI,CAAC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACpE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,gBAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE;YACnC,gBAAM,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAEO,aAAa,CACnB,GAA4B,EAC5B,QAAiB,EACjB,cAAgD;QAEhD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,GAAG,CAAC,MAA6C,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACvD,IAAI,KAAK;gBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9C,cAAc,CAAC;YACb,SAAS;YACT,MAAM;YACN,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,UAAU,IAAI,SAAS;YACnC,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;SACrC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,IAAY;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,gBAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAClD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClF,gBAAM,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACxE,gBAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,UAAkB,EAAE,KAAa,EAAE,OAAe;QAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACrD,MAAM,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACvF,gBAAM,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3E,gBAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AA1GD,wCA0GC;AAEY,QAAA,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { IGateway } from './types';
2
+ export declare class QqGateway implements IGateway {
3
+ readonly id = "qq";
4
+ private client;
5
+ private ws;
6
+ private messageToTarget;
7
+ start(messageHandler: (data: unknown) => Promise<void>): void;
8
+ private handleMessage;
9
+ private getClient;
10
+ reply(messageId: string, text: string): Promise<void>;
11
+ send(chatId: string, chatIdType: string, title: string, content: string): Promise<void>;
12
+ }
13
+ export declare const qq: QqGateway;
14
+ //# sourceMappingURL=qq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qq.d.ts","sourceRoot":"","sources":["../../src/gateway/qq.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,qBAAa,SAAU,YAAW,QAAQ;IACxC,QAAQ,CAAC,EAAE,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiD;IAC/D,OAAO,CAAC,EAAE,CAAmD;IAC7D,OAAO,CAAC,eAAe,CAA8B;IAErD,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAkC7D,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,SAAS;IAKX,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAa9F;AAED,eAAO,MAAM,EAAE,WAAkB,CAAC"}