@juzi/wechaty 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 (1026) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +565 -0
  3. package/bin/clean-json.js +15 -0
  4. package/bin/cli.ts +36 -0
  5. package/bin/doctor.ts +55 -0
  6. package/bin/entrypoint.sh +338 -0
  7. package/bin/io-client.ts +95 -0
  8. package/bin/providers-trends.ts +13 -0
  9. package/bin/puppet-install.ts +69 -0
  10. package/bin/version.ts +24 -0
  11. package/dist/cjs/bin/cli.d.ts +14 -0
  12. package/dist/cjs/bin/cli.d.ts.map +1 -0
  13. package/dist/cjs/bin/cli.js +50 -0
  14. package/dist/cjs/bin/cli.js.map +1 -0
  15. package/dist/cjs/bin/doctor.d.ts +22 -0
  16. package/dist/cjs/bin/doctor.d.ts.map +1 -0
  17. package/dist/cjs/bin/doctor.js +55 -0
  18. package/dist/cjs/bin/doctor.js.map +1 -0
  19. package/dist/cjs/bin/io-client.d.ts +22 -0
  20. package/dist/cjs/bin/io-client.d.ts.map +1 -0
  21. package/dist/cjs/bin/io-client.js +74 -0
  22. package/dist/cjs/bin/io-client.js.map +1 -0
  23. package/dist/cjs/bin/providers-trends.d.ts +3 -0
  24. package/dist/cjs/bin/providers-trends.d.ts.map +1 -0
  25. package/dist/cjs/bin/providers-trends.js +14 -0
  26. package/dist/cjs/bin/providers-trends.js.map +1 -0
  27. package/dist/cjs/bin/puppet-install.d.ts +3 -0
  28. package/dist/cjs/bin/puppet-install.d.ts.map +1 -0
  29. package/dist/cjs/bin/puppet-install.js +60 -0
  30. package/dist/cjs/bin/puppet-install.js.map +1 -0
  31. package/dist/cjs/bin/version.d.ts +22 -0
  32. package/dist/cjs/bin/version.d.ts.map +1 -0
  33. package/dist/cjs/bin/version.js +25 -0
  34. package/dist/cjs/bin/version.js.map +1 -0
  35. package/dist/cjs/examples/ding-dong-bot.d.ts +2 -0
  36. package/dist/cjs/examples/ding-dong-bot.d.ts.map +1 -0
  37. package/dist/cjs/examples/ding-dong-bot.js +183 -0
  38. package/dist/cjs/examples/ding-dong-bot.js.map +1 -0
  39. package/dist/cjs/examples/video-post.d.ts +2 -0
  40. package/dist/cjs/examples/video-post.d.ts.map +1 -0
  41. package/dist/cjs/examples/video-post.js +75 -0
  42. package/dist/cjs/examples/video-post.js.map +1 -0
  43. package/dist/cjs/package.json +3 -0
  44. package/dist/cjs/scripts/retry-unit-tests.d.ts +3 -0
  45. package/dist/cjs/scripts/retry-unit-tests.d.ts.map +1 -0
  46. package/dist/cjs/scripts/retry-unit-tests.js +58 -0
  47. package/dist/cjs/scripts/retry-unit-tests.js.map +1 -0
  48. package/dist/cjs/scripts/sort-contributiveness.d.ts +3 -0
  49. package/dist/cjs/scripts/sort-contributiveness.d.ts.map +1 -0
  50. package/dist/cjs/scripts/sort-contributiveness.js +122 -0
  51. package/dist/cjs/scripts/sort-contributiveness.js.map +1 -0
  52. package/dist/cjs/scripts/update-license.d.ts +3 -0
  53. package/dist/cjs/scripts/update-license.d.ts.map +1 -0
  54. package/dist/cjs/scripts/update-license.js +163 -0
  55. package/dist/cjs/scripts/update-license.js.map +1 -0
  56. package/dist/cjs/src/cli/friday.d.ts +7 -0
  57. package/dist/cjs/src/cli/friday.d.ts.map +1 -0
  58. package/dist/cjs/src/cli/friday.js +18 -0
  59. package/dist/cjs/src/cli/friday.js.map +1 -0
  60. package/dist/cjs/src/cli/gateway.d.ts +17 -0
  61. package/dist/cjs/src/cli/gateway.d.ts.map +1 -0
  62. package/dist/cjs/src/cli/gateway.js +154 -0
  63. package/dist/cjs/src/cli/gateway.js.map +1 -0
  64. package/dist/cjs/src/cli/mod.d.ts +6 -0
  65. package/dist/cjs/src/cli/mod.d.ts.map +1 -0
  66. package/dist/cjs/src/cli/mod.js +14 -0
  67. package/dist/cjs/src/cli/mod.js.map +1 -0
  68. package/dist/cjs/src/cli/provider.d.ts +7 -0
  69. package/dist/cjs/src/cli/provider.d.ts.map +1 -0
  70. package/dist/cjs/src/cli/provider.js +18 -0
  71. package/dist/cjs/src/cli/provider.js.map +1 -0
  72. package/dist/cjs/src/cli/service.d.ts +7 -0
  73. package/dist/cjs/src/cli/service.d.ts.map +1 -0
  74. package/dist/cjs/src/cli/service.js +18 -0
  75. package/dist/cjs/src/cli/service.js.map +1 -0
  76. package/dist/cjs/src/cli/token.d.ts +39 -0
  77. package/dist/cjs/src/cli/token.d.ts.map +1 -0
  78. package/dist/cjs/src/cli/token.js +15 -0
  79. package/dist/cjs/src/cli/token.js.map +1 -0
  80. package/dist/cjs/src/config.d.ts +61 -0
  81. package/dist/cjs/src/config.d.ts.map +1 -0
  82. package/dist/cjs/src/config.js +110 -0
  83. package/dist/cjs/src/config.js.map +1 -0
  84. package/dist/cjs/src/config.spec.d.ts +22 -0
  85. package/dist/cjs/src/config.spec.d.ts.map +1 -0
  86. package/dist/cjs/src/config.spec.js +84 -0
  87. package/dist/cjs/src/config.spec.js.map +1 -0
  88. package/dist/cjs/src/doctor.d.ts +9 -0
  89. package/dist/cjs/src/doctor.d.ts.map +1 -0
  90. package/dist/cjs/src/doctor.js +82 -0
  91. package/dist/cjs/src/doctor.js.map +1 -0
  92. package/dist/cjs/src/helper-functions/open-graph.d.ts +22 -0
  93. package/dist/cjs/src/helper-functions/open-graph.d.ts.map +1 -0
  94. package/dist/cjs/src/helper-functions/open-graph.js +43 -0
  95. package/dist/cjs/src/helper-functions/open-graph.js.map +1 -0
  96. package/dist/cjs/src/helper-functions/stringify-filter.d.ts +3 -0
  97. package/dist/cjs/src/helper-functions/stringify-filter.d.ts.map +1 -0
  98. package/dist/cjs/src/helper-functions/stringify-filter.js +12 -0
  99. package/dist/cjs/src/helper-functions/stringify-filter.js.map +1 -0
  100. package/dist/cjs/src/io-client.d.ts +28 -0
  101. package/dist/cjs/src/io-client.d.ts.map +1 -0
  102. package/dist/cjs/src/io-client.js +217 -0
  103. package/dist/cjs/src/io-client.js.map +1 -0
  104. package/dist/cjs/src/io-peer/io-peer.d.ts +12 -0
  105. package/dist/cjs/src/io-peer/io-peer.d.ts.map +1 -0
  106. package/dist/cjs/src/io-peer/io-peer.js +71 -0
  107. package/dist/cjs/src/io-peer/io-peer.js.map +1 -0
  108. package/dist/cjs/src/io-peer/io-peer.spec.d.ts +3 -0
  109. package/dist/cjs/src/io-peer/io-peer.spec.d.ts.map +1 -0
  110. package/dist/cjs/src/io-peer/io-peer.spec.js +61 -0
  111. package/dist/cjs/src/io-peer/io-peer.spec.js.map +1 -0
  112. package/dist/cjs/src/io.d.ts +98 -0
  113. package/dist/cjs/src/io.d.ts.map +1 -0
  114. package/dist/cjs/src/io.js +468 -0
  115. package/dist/cjs/src/io.js.map +1 -0
  116. package/dist/cjs/src/io.spec.d.ts +3 -0
  117. package/dist/cjs/src/io.spec.d.ts.map +1 -0
  118. package/dist/cjs/src/io.spec.js +45 -0
  119. package/dist/cjs/src/io.spec.js.map +1 -0
  120. package/dist/cjs/src/mods/helpers.d.ts +2 -0
  121. package/dist/cjs/src/mods/helpers.d.ts.map +1 -0
  122. package/dist/cjs/src/mods/helpers.js +8 -0
  123. package/dist/cjs/src/mods/helpers.js.map +1 -0
  124. package/dist/cjs/src/mods/impls.d.ts +36 -0
  125. package/dist/cjs/src/mods/impls.d.ts.map +1 -0
  126. package/dist/cjs/src/mods/impls.js +53 -0
  127. package/dist/cjs/src/mods/impls.js.map +1 -0
  128. package/dist/cjs/src/mods/impls.spec.d.ts +3 -0
  129. package/dist/cjs/src/mods/impls.spec.d.ts.map +1 -0
  130. package/dist/cjs/src/mods/impls.spec.js +36 -0
  131. package/dist/cjs/src/mods/impls.spec.js.map +1 -0
  132. package/dist/cjs/src/mods/mod.d.ts +40 -0
  133. package/dist/cjs/src/mods/mod.d.ts.map +1 -0
  134. package/dist/cjs/src/mods/mod.js +67 -0
  135. package/dist/cjs/src/mods/mod.js.map +1 -0
  136. package/dist/cjs/src/mods/mod.spec.d.ts +3 -0
  137. package/dist/cjs/src/mods/mod.spec.d.ts.map +1 -0
  138. package/dist/cjs/src/mods/mod.spec.js +39 -0
  139. package/dist/cjs/src/mods/mod.spec.js.map +1 -0
  140. package/dist/cjs/src/mods/users.d.ts +26 -0
  141. package/dist/cjs/src/mods/users.d.ts.map +1 -0
  142. package/dist/cjs/src/mods/users.js +22 -0
  143. package/dist/cjs/src/mods/users.js.map +1 -0
  144. package/dist/cjs/src/package-json.d.ts +7 -0
  145. package/dist/cjs/src/package-json.d.ts.map +1 -0
  146. package/dist/cjs/src/package-json.js +178 -0
  147. package/dist/cjs/src/package-json.js.map +1 -0
  148. package/dist/cjs/src/package-json.spec.d.ts +3 -0
  149. package/dist/cjs/src/package-json.spec.d.ts.map +1 -0
  150. package/dist/cjs/src/package-json.spec.js +17 -0
  151. package/dist/cjs/src/package-json.spec.js.map +1 -0
  152. package/dist/cjs/src/plugin.d.ts +9 -0
  153. package/dist/cjs/src/plugin.d.ts.map +1 -0
  154. package/dist/cjs/src/plugin.js +8 -0
  155. package/dist/cjs/src/plugin.js.map +1 -0
  156. package/dist/cjs/src/plugin.spec.d.ts +3 -0
  157. package/dist/cjs/src/plugin.spec.d.ts.map +1 -0
  158. package/dist/cjs/src/plugin.spec.js +70 -0
  159. package/dist/cjs/src/plugin.spec.js.map +1 -0
  160. package/dist/cjs/src/puppet-config.d.ts +78 -0
  161. package/dist/cjs/src/puppet-config.d.ts.map +1 -0
  162. package/dist/cjs/src/puppet-config.js +84 -0
  163. package/dist/cjs/src/puppet-config.js.map +1 -0
  164. package/dist/cjs/src/pure-functions/escape-regexp.d.ts +21 -0
  165. package/dist/cjs/src/pure-functions/escape-regexp.d.ts.map +1 -0
  166. package/dist/cjs/src/pure-functions/escape-regexp.js +27 -0
  167. package/dist/cjs/src/pure-functions/escape-regexp.js.map +1 -0
  168. package/dist/cjs/src/pure-functions/guard-qr-code-value.d.ts +2 -0
  169. package/dist/cjs/src/pure-functions/guard-qr-code-value.d.ts.map +1 -0
  170. package/dist/cjs/src/pure-functions/guard-qr-code-value.js +31 -0
  171. package/dist/cjs/src/pure-functions/guard-qr-code-value.js.map +1 -0
  172. package/dist/cjs/src/pure-functions/is-template-string-array.d.ts +3 -0
  173. package/dist/cjs/src/pure-functions/is-template-string-array.d.ts.map +1 -0
  174. package/dist/cjs/src/pure-functions/is-template-string-array.js +8 -0
  175. package/dist/cjs/src/pure-functions/is-template-string-array.js.map +1 -0
  176. package/dist/cjs/src/pure-functions/is-template-string-array.spec.d.ts +3 -0
  177. package/dist/cjs/src/pure-functions/is-template-string-array.spec.d.ts.map +1 -0
  178. package/dist/cjs/src/pure-functions/is-template-string-array.spec.js +40 -0
  179. package/dist/cjs/src/pure-functions/is-template-string-array.spec.js.map +1 -0
  180. package/dist/cjs/src/pure-functions/mod.d.ts +22 -0
  181. package/dist/cjs/src/pure-functions/mod.d.ts.map +1 -0
  182. package/dist/cjs/src/pure-functions/mod.js +32 -0
  183. package/dist/cjs/src/pure-functions/mod.js.map +1 -0
  184. package/dist/cjs/src/pure-functions/retry-policy.d.ts +10 -0
  185. package/dist/cjs/src/pure-functions/retry-policy.d.ts.map +1 -0
  186. package/dist/cjs/src/pure-functions/retry-policy.js +32 -0
  187. package/dist/cjs/src/pure-functions/retry-policy.js.map +1 -0
  188. package/dist/cjs/src/pure-functions/timestamp-to-date.d.ts +21 -0
  189. package/dist/cjs/src/pure-functions/timestamp-to-date.d.ts.map +1 -0
  190. package/dist/cjs/src/pure-functions/timestamp-to-date.js +35 -0
  191. package/dist/cjs/src/pure-functions/timestamp-to-date.js.map +1 -0
  192. package/dist/cjs/src/pure-functions/timestamp-to-date.spec.d.ts +3 -0
  193. package/dist/cjs/src/pure-functions/timestamp-to-date.spec.d.ts.map +1 -0
  194. package/dist/cjs/src/pure-functions/timestamp-to-date.spec.js +42 -0
  195. package/dist/cjs/src/pure-functions/timestamp-to-date.spec.js.map +1 -0
  196. package/dist/cjs/src/pure-functions/xml.d.ts +33 -0
  197. package/dist/cjs/src/pure-functions/xml.d.ts.map +1 -0
  198. package/dist/cjs/src/pure-functions/xml.js +83 -0
  199. package/dist/cjs/src/pure-functions/xml.js.map +1 -0
  200. package/dist/cjs/src/pure-functions/xml.spec.d.ts +3 -0
  201. package/dist/cjs/src/pure-functions/xml.spec.d.ts.map +1 -0
  202. package/dist/cjs/src/pure-functions/xml.spec.js +97 -0
  203. package/dist/cjs/src/pure-functions/xml.spec.js.map +1 -0
  204. package/dist/cjs/src/raven.d.ts +4 -0
  205. package/dist/cjs/src/raven.d.ts.map +1 -0
  206. package/dist/cjs/src/raven.js +83 -0
  207. package/dist/cjs/src/raven.js.map +1 -0
  208. package/dist/cjs/src/sayable/deliver-sayable.d.ts +8 -0
  209. package/dist/cjs/src/sayable/deliver-sayable.d.ts.map +1 -0
  210. package/dist/cjs/src/sayable/deliver-sayable.js +75 -0
  211. package/dist/cjs/src/sayable/deliver-sayable.js.map +1 -0
  212. package/dist/cjs/src/sayable/message-to-sayable.d.ts +5 -0
  213. package/dist/cjs/src/sayable/message-to-sayable.d.ts.map +1 -0
  214. package/dist/cjs/src/sayable/message-to-sayable.js +57 -0
  215. package/dist/cjs/src/sayable/message-to-sayable.js.map +1 -0
  216. package/dist/cjs/src/sayable/mod.d.ts +8 -0
  217. package/dist/cjs/src/sayable/mod.d.ts.map +1 -0
  218. package/dist/cjs/src/sayable/mod.js +12 -0
  219. package/dist/cjs/src/sayable/mod.js.map +1 -0
  220. package/dist/cjs/src/sayable/payload-to-sayable.d.ts +6 -0
  221. package/dist/cjs/src/sayable/payload-to-sayable.d.ts.map +1 -0
  222. package/dist/cjs/src/sayable/payload-to-sayable.js +55 -0
  223. package/dist/cjs/src/sayable/payload-to-sayable.js.map +1 -0
  224. package/dist/cjs/src/sayable/sayable-to-payload.d.ts +5 -0
  225. package/dist/cjs/src/sayable/sayable-to-payload.d.ts.map +1 -0
  226. package/dist/cjs/src/sayable/sayable-to-payload.js +73 -0
  227. package/dist/cjs/src/sayable/sayable-to-payload.js.map +1 -0
  228. package/dist/cjs/src/sayable/types.d.ts +30 -0
  229. package/dist/cjs/src/sayable/types.d.ts.map +1 -0
  230. package/dist/cjs/src/sayable/types.js +3 -0
  231. package/dist/cjs/src/sayable/types.js.map +1 -0
  232. package/dist/cjs/src/schemas/acceptable.d.ts +27 -0
  233. package/dist/cjs/src/schemas/acceptable.d.ts.map +1 -0
  234. package/dist/cjs/src/schemas/acceptable.js +3 -0
  235. package/dist/cjs/src/schemas/acceptable.js.map +1 -0
  236. package/dist/cjs/src/schemas/contact-events.d.ts +12 -0
  237. package/dist/cjs/src/schemas/contact-events.d.ts.map +1 -0
  238. package/dist/cjs/src/schemas/contact-events.js +7 -0
  239. package/dist/cjs/src/schemas/contact-events.js.map +1 -0
  240. package/dist/cjs/src/schemas/mod.d.ts +7 -0
  241. package/dist/cjs/src/schemas/mod.d.ts.map +1 -0
  242. package/dist/cjs/src/schemas/mod.js +10 -0
  243. package/dist/cjs/src/schemas/mod.js.map +1 -0
  244. package/dist/cjs/src/schemas/room-events.d.ts +103 -0
  245. package/dist/cjs/src/schemas/room-events.d.ts.map +1 -0
  246. package/dist/cjs/src/schemas/room-events.js +14 -0
  247. package/dist/cjs/src/schemas/room-events.js.map +1 -0
  248. package/dist/cjs/src/schemas/wechaty-events.d.ts +218 -0
  249. package/dist/cjs/src/schemas/wechaty-events.d.ts.map +1 -0
  250. package/dist/cjs/src/schemas/wechaty-events.js +41 -0
  251. package/dist/cjs/src/schemas/wechaty-events.js.map +1 -0
  252. package/dist/cjs/src/schemas/wechaty-options.d.ts +20 -0
  253. package/dist/cjs/src/schemas/wechaty-options.d.ts.map +1 -0
  254. package/dist/cjs/src/schemas/wechaty-options.js +3 -0
  255. package/dist/cjs/src/schemas/wechaty-options.js.map +1 -0
  256. package/dist/cjs/src/user-mixins/mod.d.ts +7 -0
  257. package/dist/cjs/src/user-mixins/mod.d.ts.map +1 -0
  258. package/dist/cjs/src/user-mixins/mod.js +11 -0
  259. package/dist/cjs/src/user-mixins/mod.js.map +1 -0
  260. package/dist/cjs/src/user-mixins/poolify.d.ts +32 -0
  261. package/dist/cjs/src/user-mixins/poolify.d.ts.map +1 -0
  262. package/dist/cjs/src/user-mixins/poolify.js +47 -0
  263. package/dist/cjs/src/user-mixins/poolify.js.map +1 -0
  264. package/dist/cjs/src/user-mixins/poolify.spec.d.ts +3 -0
  265. package/dist/cjs/src/user-mixins/poolify.spec.d.ts.map +1 -0
  266. package/dist/cjs/src/user-mixins/poolify.spec.js +53 -0
  267. package/dist/cjs/src/user-mixins/poolify.spec.js.map +1 -0
  268. package/dist/cjs/src/user-mixins/validation.d.ts +9 -0
  269. package/dist/cjs/src/user-mixins/validation.d.ts.map +1 -0
  270. package/dist/cjs/src/user-mixins/validation.js +29 -0
  271. package/dist/cjs/src/user-mixins/validation.js.map +1 -0
  272. package/dist/cjs/src/user-mixins/validation.spec.d.ts +3 -0
  273. package/dist/cjs/src/user-mixins/validation.spec.d.ts.map +1 -0
  274. package/dist/cjs/src/user-mixins/validation.spec.js +56 -0
  275. package/dist/cjs/src/user-mixins/validation.spec.js.map +1 -0
  276. package/dist/cjs/src/user-mixins/wechatify.d.ts +24 -0
  277. package/dist/cjs/src/user-mixins/wechatify.d.ts.map +1 -0
  278. package/dist/cjs/src/user-mixins/wechatify.js +47 -0
  279. package/dist/cjs/src/user-mixins/wechatify.js.map +1 -0
  280. package/dist/cjs/src/user-mixins/wechatify.spec.d.ts +3 -0
  281. package/dist/cjs/src/user-mixins/wechatify.spec.d.ts.map +1 -0
  282. package/dist/cjs/src/user-mixins/wechatify.spec.js +20 -0
  283. package/dist/cjs/src/user-mixins/wechatify.spec.js.map +1 -0
  284. package/dist/cjs/src/user-modules/contact-self.d.ts +110 -0
  285. package/dist/cjs/src/user-modules/contact-self.d.ts.map +1 -0
  286. package/dist/cjs/src/user-modules/contact-self.js +133 -0
  287. package/dist/cjs/src/user-modules/contact-self.js.map +1 -0
  288. package/dist/cjs/src/user-modules/contact.d.ts +388 -0
  289. package/dist/cjs/src/user-modules/contact.d.ts.map +1 -0
  290. package/dist/cjs/src/user-modules/contact.js +667 -0
  291. package/dist/cjs/src/user-modules/contact.js.map +1 -0
  292. package/dist/cjs/src/user-modules/contact.spec.d.ts +3 -0
  293. package/dist/cjs/src/user-modules/contact.spec.d.ts.map +1 -0
  294. package/dist/cjs/src/user-modules/contact.spec.js +71 -0
  295. package/dist/cjs/src/user-modules/contact.spec.js.map +1 -0
  296. package/dist/cjs/src/user-modules/delay.d.ts +47 -0
  297. package/dist/cjs/src/user-modules/delay.d.ts.map +1 -0
  298. package/dist/cjs/src/user-modules/delay.js +24 -0
  299. package/dist/cjs/src/user-modules/delay.js.map +1 -0
  300. package/dist/cjs/src/user-modules/favorite.d.ts +38 -0
  301. package/dist/cjs/src/user-modules/favorite.d.ts.map +1 -0
  302. package/dist/cjs/src/user-modules/favorite.js +68 -0
  303. package/dist/cjs/src/user-modules/favorite.js.map +1 -0
  304. package/dist/cjs/src/user-modules/friendship.d.ts +244 -0
  305. package/dist/cjs/src/user-modules/friendship.d.ts.map +1 -0
  306. package/dist/cjs/src/user-modules/friendship.js +369 -0
  307. package/dist/cjs/src/user-modules/friendship.js.map +1 -0
  308. package/dist/cjs/src/user-modules/image.d.ts +31 -0
  309. package/dist/cjs/src/user-modules/image.d.ts.map +1 -0
  310. package/dist/cjs/src/user-modules/image.js +81 -0
  311. package/dist/cjs/src/user-modules/image.js.map +1 -0
  312. package/dist/cjs/src/user-modules/location.d.ts +59 -0
  313. package/dist/cjs/src/user-modules/location.d.ts.map +1 -0
  314. package/dist/cjs/src/user-modules/location.js +58 -0
  315. package/dist/cjs/src/user-modules/location.js.map +1 -0
  316. package/dist/cjs/src/user-modules/message.d.ts +459 -0
  317. package/dist/cjs/src/user-modules/message.d.ts.map +1 -0
  318. package/dist/cjs/src/user-modules/message.js +932 -0
  319. package/dist/cjs/src/user-modules/message.js.map +1 -0
  320. package/dist/cjs/src/user-modules/message.spec.d.ts +22 -0
  321. package/dist/cjs/src/user-modules/message.spec.d.ts.map +1 -0
  322. package/dist/cjs/src/user-modules/message.spec.js +125 -0
  323. package/dist/cjs/src/user-modules/message.spec.js.map +1 -0
  324. package/dist/cjs/src/user-modules/mini-program.d.ts +59 -0
  325. package/dist/cjs/src/user-modules/mini-program.d.ts.map +1 -0
  326. package/dist/cjs/src/user-modules/mini-program.js +63 -0
  327. package/dist/cjs/src/user-modules/mini-program.js.map +1 -0
  328. package/dist/cjs/src/user-modules/mod.d.ts +40 -0
  329. package/dist/cjs/src/user-modules/mod.d.ts.map +1 -0
  330. package/dist/cjs/src/user-modules/mod.js +57 -0
  331. package/dist/cjs/src/user-modules/mod.js.map +1 -0
  332. package/dist/cjs/src/user-modules/moment.d.ts +28 -0
  333. package/dist/cjs/src/user-modules/moment.d.ts.map +1 -0
  334. package/dist/cjs/src/user-modules/moment.js +46 -0
  335. package/dist/cjs/src/user-modules/moment.js.map +1 -0
  336. package/dist/cjs/src/user-modules/money.d.ts +44 -0
  337. package/dist/cjs/src/user-modules/money.d.ts.map +1 -0
  338. package/dist/cjs/src/user-modules/money.js +14 -0
  339. package/dist/cjs/src/user-modules/money.js.map +1 -0
  340. package/dist/cjs/src/user-modules/post.d.ts +114 -0
  341. package/dist/cjs/src/user-modules/post.d.ts.map +1 -0
  342. package/dist/cjs/src/user-modules/post.js +372 -0
  343. package/dist/cjs/src/user-modules/post.js.map +1 -0
  344. package/dist/cjs/src/user-modules/post.spec.d.ts +3 -0
  345. package/dist/cjs/src/user-modules/post.spec.d.ts.map +1 -0
  346. package/dist/cjs/src/user-modules/post.spec.js +89 -0
  347. package/dist/cjs/src/user-modules/post.spec.js.map +1 -0
  348. package/dist/cjs/src/user-modules/room-invitation.d.ts +154 -0
  349. package/dist/cjs/src/user-modules/room-invitation.d.ts.map +1 -0
  350. package/dist/cjs/src/user-modules/room-invitation.js +201 -0
  351. package/dist/cjs/src/user-modules/room-invitation.js.map +1 -0
  352. package/dist/cjs/src/user-modules/room.d.ts +404 -0
  353. package/dist/cjs/src/user-modules/room.d.ts.map +1 -0
  354. package/dist/cjs/src/user-modules/room.js +932 -0
  355. package/dist/cjs/src/user-modules/room.js.map +1 -0
  356. package/dist/cjs/src/user-modules/room.spec.d.ts +3 -0
  357. package/dist/cjs/src/user-modules/room.spec.d.ts.map +1 -0
  358. package/dist/cjs/src/user-modules/room.spec.js +135 -0
  359. package/dist/cjs/src/user-modules/room.spec.js.map +1 -0
  360. package/dist/cjs/src/user-modules/tag.d.ts +92 -0
  361. package/dist/cjs/src/user-modules/tag.d.ts.map +1 -0
  362. package/dist/cjs/src/user-modules/tag.js +163 -0
  363. package/dist/cjs/src/user-modules/tag.js.map +1 -0
  364. package/dist/cjs/src/user-modules/url-link.d.ts +38 -0
  365. package/dist/cjs/src/user-modules/url-link.d.ts.map +1 -0
  366. package/dist/cjs/src/user-modules/url-link.js +116 -0
  367. package/dist/cjs/src/user-modules/url-link.js.map +1 -0
  368. package/dist/cjs/src/user-modules/url-link.spec.d.ts +3 -0
  369. package/dist/cjs/src/user-modules/url-link.spec.d.ts.map +1 -0
  370. package/dist/cjs/src/user-modules/url-link.spec.js +31 -0
  371. package/dist/cjs/src/user-modules/url-link.spec.js.map +1 -0
  372. package/dist/cjs/src/wechaty/mod.d.ts +6 -0
  373. package/dist/cjs/src/wechaty/mod.d.ts.map +1 -0
  374. package/dist/cjs/src/wechaty/mod.js +8 -0
  375. package/dist/cjs/src/wechaty/mod.js.map +1 -0
  376. package/dist/cjs/src/wechaty/wechaty-base.d.ts +545 -0
  377. package/dist/cjs/src/wechaty/wechaty-base.d.ts.map +1 -0
  378. package/dist/cjs/src/wechaty/wechaty-base.js +221 -0
  379. package/dist/cjs/src/wechaty/wechaty-base.js.map +1 -0
  380. package/dist/cjs/src/wechaty/wechaty-base.spec.d.ts +14 -0
  381. package/dist/cjs/src/wechaty/wechaty-base.spec.d.ts.map +1 -0
  382. package/dist/cjs/src/wechaty/wechaty-base.spec.js +288 -0
  383. package/dist/cjs/src/wechaty/wechaty-base.spec.js.map +1 -0
  384. package/dist/cjs/src/wechaty/wechaty-impl.d.ts +56 -0
  385. package/dist/cjs/src/wechaty/wechaty-impl.d.ts.map +1 -0
  386. package/dist/cjs/src/wechaty/wechaty-impl.js +17 -0
  387. package/dist/cjs/src/wechaty/wechaty-impl.js.map +1 -0
  388. package/dist/cjs/src/wechaty/wechaty-impl.spec.d.ts +3 -0
  389. package/dist/cjs/src/wechaty/wechaty-impl.spec.d.ts.map +1 -0
  390. package/dist/cjs/src/wechaty/wechaty-impl.spec.js +64 -0
  391. package/dist/cjs/src/wechaty/wechaty-impl.spec.js.map +1 -0
  392. package/dist/cjs/src/wechaty/wechaty-skeleton.d.ts +51 -0
  393. package/dist/cjs/src/wechaty/wechaty-skeleton.d.ts.map +1 -0
  394. package/dist/cjs/src/wechaty/wechaty-skeleton.js +119 -0
  395. package/dist/cjs/src/wechaty/wechaty-skeleton.js.map +1 -0
  396. package/dist/cjs/src/wechaty/wechaty-skelton.spec.d.ts +3 -0
  397. package/dist/cjs/src/wechaty/wechaty-skelton.spec.d.ts.map +1 -0
  398. package/dist/cjs/src/wechaty/wechaty-skelton.spec.js +9 -0
  399. package/dist/cjs/src/wechaty/wechaty-skelton.spec.js.map +1 -0
  400. package/dist/cjs/src/wechaty-builder.d.ts +38 -0
  401. package/dist/cjs/src/wechaty-builder.d.ts.map +1 -0
  402. package/dist/cjs/src/wechaty-builder.js +98 -0
  403. package/dist/cjs/src/wechaty-builder.js.map +1 -0
  404. package/dist/cjs/src/wechaty-builder.spec.d.ts +22 -0
  405. package/dist/cjs/src/wechaty-builder.spec.d.ts.map +1 -0
  406. package/dist/cjs/src/wechaty-builder.spec.js +66 -0
  407. package/dist/cjs/src/wechaty-builder.spec.js.map +1 -0
  408. package/dist/cjs/src/wechaty-mixins/gerror-mixin.d.ts +52 -0
  409. package/dist/cjs/src/wechaty-mixins/gerror-mixin.d.ts.map +1 -0
  410. package/dist/cjs/src/wechaty-mixins/gerror-mixin.js +54 -0
  411. package/dist/cjs/src/wechaty-mixins/gerror-mixin.js.map +1 -0
  412. package/dist/cjs/src/wechaty-mixins/gerror-mixin.spec.d.ts +3 -0
  413. package/dist/cjs/src/wechaty-mixins/gerror-mixin.spec.d.ts.map +1 -0
  414. package/dist/cjs/src/wechaty-mixins/gerror-mixin.spec.js +9 -0
  415. package/dist/cjs/src/wechaty-mixins/gerror-mixin.spec.js.map +1 -0
  416. package/dist/cjs/src/wechaty-mixins/io-mixin.d.ts +75 -0
  417. package/dist/cjs/src/wechaty-mixins/io-mixin.d.ts.map +1 -0
  418. package/dist/cjs/src/wechaty-mixins/io-mixin.js +86 -0
  419. package/dist/cjs/src/wechaty-mixins/io-mixin.js.map +1 -0
  420. package/dist/cjs/src/wechaty-mixins/login-mixin.d.ts +290 -0
  421. package/dist/cjs/src/wechaty-mixins/login-mixin.d.ts.map +1 -0
  422. package/dist/cjs/src/wechaty-mixins/login-mixin.js +89 -0
  423. package/dist/cjs/src/wechaty-mixins/login-mixin.js.map +1 -0
  424. package/dist/cjs/src/wechaty-mixins/login-mixin.spec.d.ts +3 -0
  425. package/dist/cjs/src/wechaty-mixins/login-mixin.spec.d.ts.map +1 -0
  426. package/dist/cjs/src/wechaty-mixins/login-mixin.spec.js +9 -0
  427. package/dist/cjs/src/wechaty-mixins/login-mixin.spec.js.map +1 -0
  428. package/dist/cjs/src/wechaty-mixins/misc-mixin.d.ts +295 -0
  429. package/dist/cjs/src/wechaty-mixins/misc-mixin.d.ts.map +1 -0
  430. package/dist/cjs/src/wechaty-mixins/misc-mixin.js +67 -0
  431. package/dist/cjs/src/wechaty-mixins/misc-mixin.js.map +1 -0
  432. package/dist/cjs/src/wechaty-mixins/mod.d.ts +18 -0
  433. package/dist/cjs/src/wechaty-mixins/mod.d.ts.map +1 -0
  434. package/dist/cjs/src/wechaty-mixins/mod.js +18 -0
  435. package/dist/cjs/src/wechaty-mixins/mod.js.map +1 -0
  436. package/dist/cjs/src/wechaty-mixins/plugin-mixin.d.ts +384 -0
  437. package/dist/cjs/src/wechaty-mixins/plugin-mixin.d.ts.map +1 -0
  438. package/dist/cjs/src/wechaty-mixins/plugin-mixin.js +56 -0
  439. package/dist/cjs/src/wechaty-mixins/plugin-mixin.js.map +1 -0
  440. package/dist/cjs/src/wechaty-mixins/plugin-mixin.spec.d.ts +13 -0
  441. package/dist/cjs/src/wechaty-mixins/plugin-mixin.spec.d.ts.map +1 -0
  442. package/dist/cjs/src/wechaty-mixins/plugin-mixin.spec.js +60 -0
  443. package/dist/cjs/src/wechaty-mixins/plugin-mixin.spec.js.map +1 -0
  444. package/dist/cjs/src/wechaty-mixins/puppet-mixin.d.ts +194 -0
  445. package/dist/cjs/src/wechaty-mixins/puppet-mixin.d.ts.map +1 -0
  446. package/dist/cjs/src/wechaty-mixins/puppet-mixin.js +425 -0
  447. package/dist/cjs/src/wechaty-mixins/puppet-mixin.js.map +1 -0
  448. package/dist/cjs/src/wechaty-mixins/puppet-mixin.spec.d.ts +3 -0
  449. package/dist/cjs/src/wechaty-mixins/puppet-mixin.spec.d.ts.map +1 -0
  450. package/dist/cjs/src/wechaty-mixins/puppet-mixin.spec.js +9 -0
  451. package/dist/cjs/src/wechaty-mixins/puppet-mixin.spec.js.map +1 -0
  452. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.d.ts +61 -0
  453. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.d.ts.map +1 -0
  454. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.js +84 -0
  455. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.js.map +1 -0
  456. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.spec.d.ts +3 -0
  457. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.spec.d.ts.map +1 -0
  458. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.spec.js +9 -0
  459. package/dist/cjs/src/wechaty-mixins/wechatify-user-module-mixin.spec.js.map +1 -0
  460. package/dist/cjs/tests/electron.spec.d.ts +3 -0
  461. package/dist/cjs/tests/electron.spec.d.ts.map +1 -0
  462. package/dist/cjs/tests/electron.spec.js +30 -0
  463. package/dist/cjs/tests/electron.spec.js.map +1 -0
  464. package/dist/cjs/tests/node.spec.d.ts +3 -0
  465. package/dist/cjs/tests/node.spec.d.ts.map +1 -0
  466. package/dist/cjs/tests/node.spec.js +43 -0
  467. package/dist/cjs/tests/node.spec.js.map +1 -0
  468. package/dist/esm/bin/cli.d.ts +14 -0
  469. package/dist/esm/bin/cli.d.ts.map +1 -0
  470. package/dist/esm/bin/cli.js +25 -0
  471. package/dist/esm/bin/cli.js.map +1 -0
  472. package/dist/esm/bin/doctor.d.ts +22 -0
  473. package/dist/esm/bin/doctor.d.ts.map +1 -0
  474. package/dist/esm/bin/doctor.js +50 -0
  475. package/dist/esm/bin/doctor.js.map +1 -0
  476. package/dist/esm/bin/io-client.d.ts +22 -0
  477. package/dist/esm/bin/io-client.d.ts.map +1 -0
  478. package/dist/esm/bin/io-client.js +72 -0
  479. package/dist/esm/bin/io-client.js.map +1 -0
  480. package/dist/esm/bin/providers-trends.d.ts +3 -0
  481. package/dist/esm/bin/providers-trends.d.ts.map +1 -0
  482. package/dist/esm/bin/providers-trends.js +12 -0
  483. package/dist/esm/bin/providers-trends.js.map +1 -0
  484. package/dist/esm/bin/puppet-install.d.ts +3 -0
  485. package/dist/esm/bin/puppet-install.d.ts.map +1 -0
  486. package/dist/esm/bin/puppet-install.js +55 -0
  487. package/dist/esm/bin/puppet-install.js.map +1 -0
  488. package/dist/esm/bin/version.d.ts +22 -0
  489. package/dist/esm/bin/version.d.ts.map +1 -0
  490. package/dist/esm/bin/version.js +23 -0
  491. package/dist/esm/bin/version.js.map +1 -0
  492. package/dist/esm/examples/ding-dong-bot.d.ts +2 -0
  493. package/dist/esm/examples/ding-dong-bot.d.ts.map +1 -0
  494. package/dist/esm/examples/ding-dong-bot.js +178 -0
  495. package/dist/esm/examples/ding-dong-bot.js.map +1 -0
  496. package/dist/esm/examples/video-post.d.ts +2 -0
  497. package/dist/esm/examples/video-post.d.ts.map +1 -0
  498. package/dist/esm/examples/video-post.js +70 -0
  499. package/dist/esm/examples/video-post.js.map +1 -0
  500. package/dist/esm/scripts/retry-unit-tests.d.ts +3 -0
  501. package/dist/esm/scripts/retry-unit-tests.d.ts.map +1 -0
  502. package/dist/esm/scripts/retry-unit-tests.js +56 -0
  503. package/dist/esm/scripts/retry-unit-tests.js.map +1 -0
  504. package/dist/esm/scripts/sort-contributiveness.d.ts +3 -0
  505. package/dist/esm/scripts/sort-contributiveness.d.ts.map +1 -0
  506. package/dist/esm/scripts/sort-contributiveness.js +117 -0
  507. package/dist/esm/scripts/sort-contributiveness.js.map +1 -0
  508. package/dist/esm/scripts/update-license.d.ts +3 -0
  509. package/dist/esm/scripts/update-license.d.ts.map +1 -0
  510. package/dist/esm/scripts/update-license.js +163 -0
  511. package/dist/esm/scripts/update-license.js.map +1 -0
  512. package/dist/esm/src/cli/friday.d.ts +7 -0
  513. package/dist/esm/src/cli/friday.d.ts.map +1 -0
  514. package/dist/esm/src/cli/friday.js +15 -0
  515. package/dist/esm/src/cli/friday.js.map +1 -0
  516. package/dist/esm/src/cli/gateway.d.ts +17 -0
  517. package/dist/esm/src/cli/gateway.d.ts.map +1 -0
  518. package/dist/esm/src/cli/gateway.js +148 -0
  519. package/dist/esm/src/cli/gateway.js.map +1 -0
  520. package/dist/esm/src/cli/mod.d.ts +6 -0
  521. package/dist/esm/src/cli/mod.d.ts.map +1 -0
  522. package/dist/esm/src/cli/mod.js +6 -0
  523. package/dist/esm/src/cli/mod.js.map +1 -0
  524. package/dist/esm/src/cli/provider.d.ts +7 -0
  525. package/dist/esm/src/cli/provider.d.ts.map +1 -0
  526. package/dist/esm/src/cli/provider.js +15 -0
  527. package/dist/esm/src/cli/provider.js.map +1 -0
  528. package/dist/esm/src/cli/service.d.ts +7 -0
  529. package/dist/esm/src/cli/service.d.ts.map +1 -0
  530. package/dist/esm/src/cli/service.js +15 -0
  531. package/dist/esm/src/cli/service.js.map +1 -0
  532. package/dist/esm/src/cli/token.d.ts +39 -0
  533. package/dist/esm/src/cli/token.d.ts.map +1 -0
  534. package/dist/esm/src/cli/token.js +12 -0
  535. package/dist/esm/src/cli/token.js.map +1 -0
  536. package/dist/esm/src/config.d.ts +61 -0
  537. package/dist/esm/src/config.d.ts.map +1 -0
  538. package/dist/esm/src/config.js +100 -0
  539. package/dist/esm/src/config.js.map +1 -0
  540. package/dist/esm/src/config.spec.d.ts +22 -0
  541. package/dist/esm/src/config.spec.d.ts.map +1 -0
  542. package/dist/esm/src/config.spec.js +82 -0
  543. package/dist/esm/src/config.spec.js.map +1 -0
  544. package/dist/esm/src/doctor.d.ts +9 -0
  545. package/dist/esm/src/doctor.d.ts.map +1 -0
  546. package/dist/esm/src/doctor.js +78 -0
  547. package/dist/esm/src/doctor.js.map +1 -0
  548. package/dist/esm/src/helper-functions/open-graph.d.ts +22 -0
  549. package/dist/esm/src/helper-functions/open-graph.d.ts.map +1 -0
  550. package/dist/esm/src/helper-functions/open-graph.js +36 -0
  551. package/dist/esm/src/helper-functions/open-graph.js.map +1 -0
  552. package/dist/esm/src/helper-functions/stringify-filter.d.ts +3 -0
  553. package/dist/esm/src/helper-functions/stringify-filter.d.ts.map +1 -0
  554. package/dist/esm/src/helper-functions/stringify-filter.js +9 -0
  555. package/dist/esm/src/helper-functions/stringify-filter.js.map +1 -0
  556. package/dist/esm/src/io-client.d.ts +28 -0
  557. package/dist/esm/src/io-client.d.ts.map +1 -0
  558. package/dist/esm/src/io-client.js +213 -0
  559. package/dist/esm/src/io-client.js.map +1 -0
  560. package/dist/esm/src/io-peer/io-peer.d.ts +12 -0
  561. package/dist/esm/src/io-peer/io-peer.d.ts.map +1 -0
  562. package/dist/esm/src/io-peer/io-peer.js +61 -0
  563. package/dist/esm/src/io-peer/io-peer.js.map +1 -0
  564. package/dist/esm/src/io-peer/io-peer.spec.d.ts +3 -0
  565. package/dist/esm/src/io-peer/io-peer.spec.d.ts.map +1 -0
  566. package/dist/esm/src/io-peer/io-peer.spec.js +56 -0
  567. package/dist/esm/src/io-peer/io-peer.spec.js.map +1 -0
  568. package/dist/esm/src/io.d.ts +98 -0
  569. package/dist/esm/src/io.d.ts.map +1 -0
  570. package/dist/esm/src/io.js +438 -0
  571. package/dist/esm/src/io.js.map +1 -0
  572. package/dist/esm/src/io.spec.d.ts +3 -0
  573. package/dist/esm/src/io.spec.d.ts.map +1 -0
  574. package/dist/esm/src/io.spec.js +43 -0
  575. package/dist/esm/src/io.spec.js.map +1 -0
  576. package/dist/esm/src/mods/helpers.d.ts +2 -0
  577. package/dist/esm/src/mods/helpers.d.ts.map +1 -0
  578. package/dist/esm/src/mods/helpers.js +2 -0
  579. package/dist/esm/src/mods/helpers.js.map +1 -0
  580. package/dist/esm/src/mods/impls.d.ts +36 -0
  581. package/dist/esm/src/mods/impls.d.ts.map +1 -0
  582. package/dist/esm/src/mods/impls.js +33 -0
  583. package/dist/esm/src/mods/impls.js.map +1 -0
  584. package/dist/esm/src/mods/impls.spec.d.ts +3 -0
  585. package/dist/esm/src/mods/impls.spec.d.ts.map +1 -0
  586. package/dist/esm/src/mods/impls.spec.js +11 -0
  587. package/dist/esm/src/mods/impls.spec.js.map +1 -0
  588. package/dist/esm/src/mods/mod.d.ts +40 -0
  589. package/dist/esm/src/mods/mod.d.ts.map +1 -0
  590. package/dist/esm/src/mods/mod.js +31 -0
  591. package/dist/esm/src/mods/mod.js.map +1 -0
  592. package/dist/esm/src/mods/mod.spec.d.ts +3 -0
  593. package/dist/esm/src/mods/mod.spec.d.ts.map +1 -0
  594. package/dist/esm/src/mods/mod.spec.js +14 -0
  595. package/dist/esm/src/mods/mod.spec.js.map +1 -0
  596. package/dist/esm/src/mods/users.d.ts +26 -0
  597. package/dist/esm/src/mods/users.d.ts.map +1 -0
  598. package/dist/esm/src/mods/users.js +21 -0
  599. package/dist/esm/src/mods/users.js.map +1 -0
  600. package/dist/esm/src/package-json.d.ts +7 -0
  601. package/dist/esm/src/package-json.d.ts.map +1 -0
  602. package/dist/esm/src/package-json.js +175 -0
  603. package/dist/esm/src/package-json.js.map +1 -0
  604. package/dist/esm/src/package-json.spec.d.ts +3 -0
  605. package/dist/esm/src/package-json.spec.d.ts.map +1 -0
  606. package/dist/esm/src/package-json.spec.js +15 -0
  607. package/dist/esm/src/package-json.spec.js.map +1 -0
  608. package/dist/esm/src/plugin.d.ts +9 -0
  609. package/dist/esm/src/plugin.d.ts.map +1 -0
  610. package/dist/esm/src/plugin.js +5 -0
  611. package/dist/esm/src/plugin.js.map +1 -0
  612. package/dist/esm/src/plugin.spec.d.ts +3 -0
  613. package/dist/esm/src/plugin.spec.d.ts.map +1 -0
  614. package/dist/esm/src/plugin.spec.js +68 -0
  615. package/dist/esm/src/plugin.spec.js.map +1 -0
  616. package/dist/esm/src/puppet-config.d.ts +78 -0
  617. package/dist/esm/src/puppet-config.d.ts.map +1 -0
  618. package/dist/esm/src/puppet-config.js +80 -0
  619. package/dist/esm/src/puppet-config.js.map +1 -0
  620. package/dist/esm/src/pure-functions/escape-regexp.d.ts +21 -0
  621. package/dist/esm/src/pure-functions/escape-regexp.d.ts.map +1 -0
  622. package/dist/esm/src/pure-functions/escape-regexp.js +23 -0
  623. package/dist/esm/src/pure-functions/escape-regexp.js.map +1 -0
  624. package/dist/esm/src/pure-functions/guard-qr-code-value.d.ts +2 -0
  625. package/dist/esm/src/pure-functions/guard-qr-code-value.d.ts.map +1 -0
  626. package/dist/esm/src/pure-functions/guard-qr-code-value.js +27 -0
  627. package/dist/esm/src/pure-functions/guard-qr-code-value.js.map +1 -0
  628. package/dist/esm/src/pure-functions/is-template-string-array.d.ts +3 -0
  629. package/dist/esm/src/pure-functions/is-template-string-array.d.ts.map +1 -0
  630. package/dist/esm/src/pure-functions/is-template-string-array.js +5 -0
  631. package/dist/esm/src/pure-functions/is-template-string-array.js.map +1 -0
  632. package/dist/esm/src/pure-functions/is-template-string-array.spec.d.ts +3 -0
  633. package/dist/esm/src/pure-functions/is-template-string-array.spec.d.ts.map +1 -0
  634. package/dist/esm/src/pure-functions/is-template-string-array.spec.js +38 -0
  635. package/dist/esm/src/pure-functions/is-template-string-array.spec.js.map +1 -0
  636. package/dist/esm/src/pure-functions/mod.d.ts +22 -0
  637. package/dist/esm/src/pure-functions/mod.d.ts.map +1 -0
  638. package/dist/esm/src/pure-functions/mod.js +22 -0
  639. package/dist/esm/src/pure-functions/mod.js.map +1 -0
  640. package/dist/esm/src/pure-functions/retry-policy.d.ts +10 -0
  641. package/dist/esm/src/pure-functions/retry-policy.d.ts.map +1 -0
  642. package/dist/esm/src/pure-functions/retry-policy.js +29 -0
  643. package/dist/esm/src/pure-functions/retry-policy.js.map +1 -0
  644. package/dist/esm/src/pure-functions/timestamp-to-date.d.ts +21 -0
  645. package/dist/esm/src/pure-functions/timestamp-to-date.d.ts.map +1 -0
  646. package/dist/esm/src/pure-functions/timestamp-to-date.js +31 -0
  647. package/dist/esm/src/pure-functions/timestamp-to-date.js.map +1 -0
  648. package/dist/esm/src/pure-functions/timestamp-to-date.spec.d.ts +3 -0
  649. package/dist/esm/src/pure-functions/timestamp-to-date.spec.d.ts.map +1 -0
  650. package/dist/esm/src/pure-functions/timestamp-to-date.spec.js +40 -0
  651. package/dist/esm/src/pure-functions/timestamp-to-date.spec.js.map +1 -0
  652. package/dist/esm/src/pure-functions/xml.d.ts +33 -0
  653. package/dist/esm/src/pure-functions/xml.d.ts.map +1 -0
  654. package/dist/esm/src/pure-functions/xml.js +74 -0
  655. package/dist/esm/src/pure-functions/xml.js.map +1 -0
  656. package/dist/esm/src/pure-functions/xml.spec.d.ts +3 -0
  657. package/dist/esm/src/pure-functions/xml.spec.d.ts.map +1 -0
  658. package/dist/esm/src/pure-functions/xml.spec.js +95 -0
  659. package/dist/esm/src/pure-functions/xml.spec.js.map +1 -0
  660. package/dist/esm/src/raven.d.ts +4 -0
  661. package/dist/esm/src/raven.d.ts.map +1 -0
  662. package/dist/esm/src/raven.js +54 -0
  663. package/dist/esm/src/raven.js.map +1 -0
  664. package/dist/esm/src/sayable/deliver-sayable.d.ts +8 -0
  665. package/dist/esm/src/sayable/deliver-sayable.d.ts.map +1 -0
  666. package/dist/esm/src/sayable/deliver-sayable.js +72 -0
  667. package/dist/esm/src/sayable/deliver-sayable.js.map +1 -0
  668. package/dist/esm/src/sayable/message-to-sayable.d.ts +5 -0
  669. package/dist/esm/src/sayable/message-to-sayable.d.ts.map +1 -0
  670. package/dist/esm/src/sayable/message-to-sayable.js +31 -0
  671. package/dist/esm/src/sayable/message-to-sayable.js.map +1 -0
  672. package/dist/esm/src/sayable/mod.d.ts +8 -0
  673. package/dist/esm/src/sayable/mod.d.ts.map +1 -0
  674. package/dist/esm/src/sayable/mod.js +6 -0
  675. package/dist/esm/src/sayable/mod.js.map +1 -0
  676. package/dist/esm/src/sayable/payload-to-sayable.d.ts +6 -0
  677. package/dist/esm/src/sayable/payload-to-sayable.d.ts.map +1 -0
  678. package/dist/esm/src/sayable/payload-to-sayable.js +29 -0
  679. package/dist/esm/src/sayable/payload-to-sayable.js.map +1 -0
  680. package/dist/esm/src/sayable/sayable-to-payload.d.ts +5 -0
  681. package/dist/esm/src/sayable/sayable-to-payload.d.ts.map +1 -0
  682. package/dist/esm/src/sayable/sayable-to-payload.js +47 -0
  683. package/dist/esm/src/sayable/sayable-to-payload.js.map +1 -0
  684. package/dist/esm/src/sayable/types.d.ts +30 -0
  685. package/dist/esm/src/sayable/types.d.ts.map +1 -0
  686. package/dist/esm/src/sayable/types.js +2 -0
  687. package/dist/esm/src/sayable/types.js.map +1 -0
  688. package/dist/esm/src/schemas/acceptable.d.ts +27 -0
  689. package/dist/esm/src/schemas/acceptable.d.ts.map +1 -0
  690. package/dist/esm/src/schemas/acceptable.js +2 -0
  691. package/dist/esm/src/schemas/acceptable.js.map +1 -0
  692. package/dist/esm/src/schemas/contact-events.d.ts +12 -0
  693. package/dist/esm/src/schemas/contact-events.d.ts.map +1 -0
  694. package/dist/esm/src/schemas/contact-events.js +4 -0
  695. package/dist/esm/src/schemas/contact-events.js.map +1 -0
  696. package/dist/esm/src/schemas/mod.d.ts +7 -0
  697. package/dist/esm/src/schemas/mod.d.ts.map +1 -0
  698. package/dist/esm/src/schemas/mod.js +5 -0
  699. package/dist/esm/src/schemas/mod.js.map +1 -0
  700. package/dist/esm/src/schemas/room-events.d.ts +103 -0
  701. package/dist/esm/src/schemas/room-events.d.ts.map +1 -0
  702. package/dist/esm/src/schemas/room-events.js +11 -0
  703. package/dist/esm/src/schemas/room-events.js.map +1 -0
  704. package/dist/esm/src/schemas/wechaty-events.d.ts +218 -0
  705. package/dist/esm/src/schemas/wechaty-events.d.ts.map +1 -0
  706. package/dist/esm/src/schemas/wechaty-events.js +15 -0
  707. package/dist/esm/src/schemas/wechaty-events.js.map +1 -0
  708. package/dist/esm/src/schemas/wechaty-options.d.ts +20 -0
  709. package/dist/esm/src/schemas/wechaty-options.d.ts.map +1 -0
  710. package/dist/esm/src/schemas/wechaty-options.js +2 -0
  711. package/dist/esm/src/schemas/wechaty-options.js.map +1 -0
  712. package/dist/esm/src/user-mixins/mod.d.ts +7 -0
  713. package/dist/esm/src/user-mixins/mod.d.ts.map +1 -0
  714. package/dist/esm/src/user-mixins/mod.js +5 -0
  715. package/dist/esm/src/user-mixins/mod.js.map +1 -0
  716. package/dist/esm/src/user-mixins/poolify.d.ts +32 -0
  717. package/dist/esm/src/user-mixins/poolify.d.ts.map +1 -0
  718. package/dist/esm/src/user-mixins/poolify.js +44 -0
  719. package/dist/esm/src/user-mixins/poolify.js.map +1 -0
  720. package/dist/esm/src/user-mixins/poolify.spec.d.ts +3 -0
  721. package/dist/esm/src/user-mixins/poolify.spec.d.ts.map +1 -0
  722. package/dist/esm/src/user-mixins/poolify.spec.js +51 -0
  723. package/dist/esm/src/user-mixins/poolify.spec.js.map +1 -0
  724. package/dist/esm/src/user-mixins/validation.d.ts +9 -0
  725. package/dist/esm/src/user-mixins/validation.d.ts.map +1 -0
  726. package/dist/esm/src/user-mixins/validation.js +26 -0
  727. package/dist/esm/src/user-mixins/validation.js.map +1 -0
  728. package/dist/esm/src/user-mixins/validation.spec.d.ts +3 -0
  729. package/dist/esm/src/user-mixins/validation.spec.d.ts.map +1 -0
  730. package/dist/esm/src/user-mixins/validation.spec.js +54 -0
  731. package/dist/esm/src/user-mixins/validation.spec.js.map +1 -0
  732. package/dist/esm/src/user-mixins/wechatify.d.ts +24 -0
  733. package/dist/esm/src/user-mixins/wechatify.d.ts.map +1 -0
  734. package/dist/esm/src/user-mixins/wechatify.js +41 -0
  735. package/dist/esm/src/user-mixins/wechatify.js.map +1 -0
  736. package/dist/esm/src/user-mixins/wechatify.spec.d.ts +3 -0
  737. package/dist/esm/src/user-mixins/wechatify.spec.d.ts.map +1 -0
  738. package/dist/esm/src/user-mixins/wechatify.spec.js +18 -0
  739. package/dist/esm/src/user-mixins/wechatify.spec.js.map +1 -0
  740. package/dist/esm/src/user-modules/contact-self.d.ts +110 -0
  741. package/dist/esm/src/user-modules/contact-self.d.ts.map +1 -0
  742. package/dist/esm/src/user-modules/contact-self.js +130 -0
  743. package/dist/esm/src/user-modules/contact-self.js.map +1 -0
  744. package/dist/esm/src/user-modules/contact.d.ts +388 -0
  745. package/dist/esm/src/user-modules/contact.d.ts.map +1 -0
  746. package/dist/esm/src/user-modules/contact.js +641 -0
  747. package/dist/esm/src/user-modules/contact.js.map +1 -0
  748. package/dist/esm/src/user-modules/contact.spec.d.ts +3 -0
  749. package/dist/esm/src/user-modules/contact.spec.d.ts.map +1 -0
  750. package/dist/esm/src/user-modules/contact.spec.js +69 -0
  751. package/dist/esm/src/user-modules/contact.spec.js.map +1 -0
  752. package/dist/esm/src/user-modules/delay.d.ts +47 -0
  753. package/dist/esm/src/user-modules/delay.d.ts.map +1 -0
  754. package/dist/esm/src/user-modules/delay.js +21 -0
  755. package/dist/esm/src/user-modules/delay.js.map +1 -0
  756. package/dist/esm/src/user-modules/favorite.d.ts +38 -0
  757. package/dist/esm/src/user-modules/favorite.d.ts.map +1 -0
  758. package/dist/esm/src/user-modules/favorite.js +65 -0
  759. package/dist/esm/src/user-modules/favorite.js.map +1 -0
  760. package/dist/esm/src/user-modules/friendship.d.ts +244 -0
  761. package/dist/esm/src/user-modules/friendship.d.ts.map +1 -0
  762. package/dist/esm/src/user-modules/friendship.js +343 -0
  763. package/dist/esm/src/user-modules/friendship.js.map +1 -0
  764. package/dist/esm/src/user-modules/image.d.ts +31 -0
  765. package/dist/esm/src/user-modules/image.d.ts.map +1 -0
  766. package/dist/esm/src/user-modules/image.js +55 -0
  767. package/dist/esm/src/user-modules/image.js.map +1 -0
  768. package/dist/esm/src/user-modules/location.d.ts +59 -0
  769. package/dist/esm/src/user-modules/location.d.ts.map +1 -0
  770. package/dist/esm/src/user-modules/location.js +55 -0
  771. package/dist/esm/src/user-modules/location.js.map +1 -0
  772. package/dist/esm/src/user-modules/message.d.ts +459 -0
  773. package/dist/esm/src/user-modules/message.d.ts.map +1 -0
  774. package/dist/esm/src/user-modules/message.js +906 -0
  775. package/dist/esm/src/user-modules/message.js.map +1 -0
  776. package/dist/esm/src/user-modules/message.spec.d.ts +22 -0
  777. package/dist/esm/src/user-modules/message.spec.d.ts.map +1 -0
  778. package/dist/esm/src/user-modules/message.spec.js +100 -0
  779. package/dist/esm/src/user-modules/message.spec.js.map +1 -0
  780. package/dist/esm/src/user-modules/mini-program.d.ts +59 -0
  781. package/dist/esm/src/user-modules/mini-program.d.ts.map +1 -0
  782. package/dist/esm/src/user-modules/mini-program.js +60 -0
  783. package/dist/esm/src/user-modules/mini-program.js.map +1 -0
  784. package/dist/esm/src/user-modules/mod.d.ts +40 -0
  785. package/dist/esm/src/user-modules/mod.d.ts.map +1 -0
  786. package/dist/esm/src/user-modules/mod.js +38 -0
  787. package/dist/esm/src/user-modules/mod.js.map +1 -0
  788. package/dist/esm/src/user-modules/moment.d.ts +28 -0
  789. package/dist/esm/src/user-modules/moment.d.ts.map +1 -0
  790. package/dist/esm/src/user-modules/moment.js +43 -0
  791. package/dist/esm/src/user-modules/moment.js.map +1 -0
  792. package/dist/esm/src/user-modules/money.d.ts +44 -0
  793. package/dist/esm/src/user-modules/money.d.ts.map +1 -0
  794. package/dist/esm/src/user-modules/money.js +11 -0
  795. package/dist/esm/src/user-modules/money.js.map +1 -0
  796. package/dist/esm/src/user-modules/post.d.ts +114 -0
  797. package/dist/esm/src/user-modules/post.d.ts.map +1 -0
  798. package/dist/esm/src/user-modules/post.js +345 -0
  799. package/dist/esm/src/user-modules/post.js.map +1 -0
  800. package/dist/esm/src/user-modules/post.spec.d.ts +3 -0
  801. package/dist/esm/src/user-modules/post.spec.d.ts.map +1 -0
  802. package/dist/esm/src/user-modules/post.spec.js +61 -0
  803. package/dist/esm/src/user-modules/post.spec.js.map +1 -0
  804. package/dist/esm/src/user-modules/room-invitation.d.ts +154 -0
  805. package/dist/esm/src/user-modules/room-invitation.d.ts.map +1 -0
  806. package/dist/esm/src/user-modules/room-invitation.js +198 -0
  807. package/dist/esm/src/user-modules/room-invitation.js.map +1 -0
  808. package/dist/esm/src/user-modules/room.d.ts +404 -0
  809. package/dist/esm/src/user-modules/room.d.ts.map +1 -0
  810. package/dist/esm/src/user-modules/room.js +929 -0
  811. package/dist/esm/src/user-modules/room.js.map +1 -0
  812. package/dist/esm/src/user-modules/room.spec.d.ts +3 -0
  813. package/dist/esm/src/user-modules/room.spec.d.ts.map +1 -0
  814. package/dist/esm/src/user-modules/room.spec.js +133 -0
  815. package/dist/esm/src/user-modules/room.spec.js.map +1 -0
  816. package/dist/esm/src/user-modules/tag.d.ts +92 -0
  817. package/dist/esm/src/user-modules/tag.d.ts.map +1 -0
  818. package/dist/esm/src/user-modules/tag.js +160 -0
  819. package/dist/esm/src/user-modules/tag.js.map +1 -0
  820. package/dist/esm/src/user-modules/url-link.d.ts +38 -0
  821. package/dist/esm/src/user-modules/url-link.d.ts.map +1 -0
  822. package/dist/esm/src/user-modules/url-link.js +110 -0
  823. package/dist/esm/src/user-modules/url-link.js.map +1 -0
  824. package/dist/esm/src/user-modules/url-link.spec.d.ts +3 -0
  825. package/dist/esm/src/user-modules/url-link.spec.d.ts.map +1 -0
  826. package/dist/esm/src/user-modules/url-link.spec.js +29 -0
  827. package/dist/esm/src/user-modules/url-link.spec.js.map +1 -0
  828. package/dist/esm/src/wechaty/mod.d.ts +6 -0
  829. package/dist/esm/src/wechaty/mod.d.ts.map +1 -0
  830. package/dist/esm/src/wechaty/mod.js +4 -0
  831. package/dist/esm/src/wechaty/mod.js.map +1 -0
  832. package/dist/esm/src/wechaty/wechaty-base.d.ts +545 -0
  833. package/dist/esm/src/wechaty/wechaty-base.d.ts.map +1 -0
  834. package/dist/esm/src/wechaty/wechaty-base.js +218 -0
  835. package/dist/esm/src/wechaty/wechaty-base.js.map +1 -0
  836. package/dist/esm/src/wechaty/wechaty-base.spec.d.ts +14 -0
  837. package/dist/esm/src/wechaty/wechaty-base.spec.d.ts.map +1 -0
  838. package/dist/esm/src/wechaty/wechaty-base.spec.js +286 -0
  839. package/dist/esm/src/wechaty/wechaty-base.spec.js.map +1 -0
  840. package/dist/esm/src/wechaty/wechaty-impl.d.ts +56 -0
  841. package/dist/esm/src/wechaty/wechaty-impl.d.ts.map +1 -0
  842. package/dist/esm/src/wechaty/wechaty-impl.js +14 -0
  843. package/dist/esm/src/wechaty/wechaty-impl.js.map +1 -0
  844. package/dist/esm/src/wechaty/wechaty-impl.spec.d.ts +3 -0
  845. package/dist/esm/src/wechaty/wechaty-impl.spec.d.ts.map +1 -0
  846. package/dist/esm/src/wechaty/wechaty-impl.spec.js +61 -0
  847. package/dist/esm/src/wechaty/wechaty-impl.spec.js.map +1 -0
  848. package/dist/esm/src/wechaty/wechaty-skeleton.d.ts +51 -0
  849. package/dist/esm/src/wechaty/wechaty-skeleton.d.ts.map +1 -0
  850. package/dist/esm/src/wechaty/wechaty-skeleton.js +93 -0
  851. package/dist/esm/src/wechaty/wechaty-skeleton.js.map +1 -0
  852. package/dist/esm/src/wechaty/wechaty-skelton.spec.d.ts +3 -0
  853. package/dist/esm/src/wechaty/wechaty-skelton.spec.d.ts.map +1 -0
  854. package/dist/esm/src/wechaty/wechaty-skelton.spec.js +7 -0
  855. package/dist/esm/src/wechaty/wechaty-skelton.spec.js.map +1 -0
  856. package/dist/esm/src/wechaty-builder.d.ts +38 -0
  857. package/dist/esm/src/wechaty-builder.d.ts.map +1 -0
  858. package/dist/esm/src/wechaty-builder.js +95 -0
  859. package/dist/esm/src/wechaty-builder.js.map +1 -0
  860. package/dist/esm/src/wechaty-builder.spec.d.ts +22 -0
  861. package/dist/esm/src/wechaty-builder.spec.d.ts.map +1 -0
  862. package/dist/esm/src/wechaty-builder.spec.js +64 -0
  863. package/dist/esm/src/wechaty-builder.spec.js.map +1 -0
  864. package/dist/esm/src/wechaty-mixins/gerror-mixin.d.ts +52 -0
  865. package/dist/esm/src/wechaty-mixins/gerror-mixin.d.ts.map +1 -0
  866. package/dist/esm/src/wechaty-mixins/gerror-mixin.js +51 -0
  867. package/dist/esm/src/wechaty-mixins/gerror-mixin.js.map +1 -0
  868. package/dist/esm/src/wechaty-mixins/gerror-mixin.spec.d.ts +3 -0
  869. package/dist/esm/src/wechaty-mixins/gerror-mixin.spec.d.ts.map +1 -0
  870. package/dist/esm/src/wechaty-mixins/gerror-mixin.spec.js +7 -0
  871. package/dist/esm/src/wechaty-mixins/gerror-mixin.spec.js.map +1 -0
  872. package/dist/esm/src/wechaty-mixins/io-mixin.d.ts +75 -0
  873. package/dist/esm/src/wechaty-mixins/io-mixin.d.ts.map +1 -0
  874. package/dist/esm/src/wechaty-mixins/io-mixin.js +83 -0
  875. package/dist/esm/src/wechaty-mixins/io-mixin.js.map +1 -0
  876. package/dist/esm/src/wechaty-mixins/login-mixin.d.ts +290 -0
  877. package/dist/esm/src/wechaty-mixins/login-mixin.d.ts.map +1 -0
  878. package/dist/esm/src/wechaty-mixins/login-mixin.js +86 -0
  879. package/dist/esm/src/wechaty-mixins/login-mixin.js.map +1 -0
  880. package/dist/esm/src/wechaty-mixins/login-mixin.spec.d.ts +3 -0
  881. package/dist/esm/src/wechaty-mixins/login-mixin.spec.d.ts.map +1 -0
  882. package/dist/esm/src/wechaty-mixins/login-mixin.spec.js +7 -0
  883. package/dist/esm/src/wechaty-mixins/login-mixin.spec.js.map +1 -0
  884. package/dist/esm/src/wechaty-mixins/misc-mixin.d.ts +295 -0
  885. package/dist/esm/src/wechaty-mixins/misc-mixin.d.ts.map +1 -0
  886. package/dist/esm/src/wechaty-mixins/misc-mixin.js +64 -0
  887. package/dist/esm/src/wechaty-mixins/misc-mixin.js.map +1 -0
  888. package/dist/esm/src/wechaty-mixins/mod.d.ts +18 -0
  889. package/dist/esm/src/wechaty-mixins/mod.d.ts.map +1 -0
  890. package/dist/esm/src/wechaty-mixins/mod.js +9 -0
  891. package/dist/esm/src/wechaty-mixins/mod.js.map +1 -0
  892. package/dist/esm/src/wechaty-mixins/plugin-mixin.d.ts +384 -0
  893. package/dist/esm/src/wechaty-mixins/plugin-mixin.d.ts.map +1 -0
  894. package/dist/esm/src/wechaty-mixins/plugin-mixin.js +53 -0
  895. package/dist/esm/src/wechaty-mixins/plugin-mixin.js.map +1 -0
  896. package/dist/esm/src/wechaty-mixins/plugin-mixin.spec.d.ts +13 -0
  897. package/dist/esm/src/wechaty-mixins/plugin-mixin.spec.d.ts.map +1 -0
  898. package/dist/esm/src/wechaty-mixins/plugin-mixin.spec.js +58 -0
  899. package/dist/esm/src/wechaty-mixins/plugin-mixin.spec.js.map +1 -0
  900. package/dist/esm/src/wechaty-mixins/puppet-mixin.d.ts +194 -0
  901. package/dist/esm/src/wechaty-mixins/puppet-mixin.d.ts.map +1 -0
  902. package/dist/esm/src/wechaty-mixins/puppet-mixin.js +399 -0
  903. package/dist/esm/src/wechaty-mixins/puppet-mixin.js.map +1 -0
  904. package/dist/esm/src/wechaty-mixins/puppet-mixin.spec.d.ts +3 -0
  905. package/dist/esm/src/wechaty-mixins/puppet-mixin.spec.d.ts.map +1 -0
  906. package/dist/esm/src/wechaty-mixins/puppet-mixin.spec.js +7 -0
  907. package/dist/esm/src/wechaty-mixins/puppet-mixin.spec.js.map +1 -0
  908. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.d.ts +61 -0
  909. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.d.ts.map +1 -0
  910. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.js +81 -0
  911. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.js.map +1 -0
  912. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.spec.d.ts +3 -0
  913. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.spec.d.ts.map +1 -0
  914. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.spec.js +7 -0
  915. package/dist/esm/src/wechaty-mixins/wechatify-user-module-mixin.spec.js.map +1 -0
  916. package/dist/esm/tests/electron.spec.d.ts +3 -0
  917. package/dist/esm/tests/electron.spec.d.ts.map +1 -0
  918. package/dist/esm/tests/electron.spec.js +28 -0
  919. package/dist/esm/tests/electron.spec.js.map +1 -0
  920. package/dist/esm/tests/node.spec.d.ts +3 -0
  921. package/dist/esm/tests/node.spec.d.ts.map +1 -0
  922. package/dist/esm/tests/node.spec.js +41 -0
  923. package/dist/esm/tests/node.spec.js.map +1 -0
  924. package/package.json +173 -0
  925. package/src/cli/friday.ts +20 -0
  926. package/src/cli/gateway.ts +190 -0
  927. package/src/cli/mod.ts +5 -0
  928. package/src/cli/provider.ts +20 -0
  929. package/src/cli/service.ts +20 -0
  930. package/src/cli/token.ts +19 -0
  931. package/src/config.spec.ts +97 -0
  932. package/src/config.ts +165 -0
  933. package/src/doctor.ts +92 -0
  934. package/src/helper-functions/open-graph.ts +34 -0
  935. package/src/helper-functions/stringify-filter.ts +13 -0
  936. package/src/io-client.ts +276 -0
  937. package/src/io-peer/io-peer.spec.ts +64 -0
  938. package/src/io-peer/io-peer.ts +79 -0
  939. package/src/io-peer/json-rpc-peer.d.ts +68 -0
  940. package/src/io.spec.ts +44 -0
  941. package/src/io.ts +585 -0
  942. package/src/mods/helpers.ts +5 -0
  943. package/src/mods/impls.spec.ts +13 -0
  944. package/src/mods/impls.ts +115 -0
  945. package/src/mods/mod.spec.ts +17 -0
  946. package/src/mods/mod.ts +74 -0
  947. package/src/mods/users.ts +44 -0
  948. package/src/package-json.spec.ts +18 -0
  949. package/src/package-json.ts +180 -0
  950. package/src/plugin.spec.ts +87 -0
  951. package/src/plugin.ts +19 -0
  952. package/src/puppet-config.ts +104 -0
  953. package/src/pure-functions/escape-regexp.ts +22 -0
  954. package/src/pure-functions/guard-qr-code-value.ts +27 -0
  955. package/src/pure-functions/is-template-string-array.spec.ts +44 -0
  956. package/src/pure-functions/is-template-string-array.ts +5 -0
  957. package/src/pure-functions/mod.ts +28 -0
  958. package/src/pure-functions/retry-policy.ts +45 -0
  959. package/src/pure-functions/timestamp-to-date.spec.ts +43 -0
  960. package/src/pure-functions/timestamp-to-date.ts +31 -0
  961. package/src/pure-functions/xml.spec.ts +116 -0
  962. package/src/pure-functions/xml.ts +98 -0
  963. package/src/raven.ts +75 -0
  964. package/src/sayable/deliver-sayable.ts +107 -0
  965. package/src/sayable/message-to-sayable.ts +57 -0
  966. package/src/sayable/mod.ts +27 -0
  967. package/src/sayable/payload-to-sayable.ts +51 -0
  968. package/src/sayable/sayable-to-payload.ts +54 -0
  969. package/src/sayable/types.ts +62 -0
  970. package/src/schemas/acceptable.ts +30 -0
  971. package/src/schemas/contact-events.ts +29 -0
  972. package/src/schemas/mod.ts +29 -0
  973. package/src/schemas/room-events.ts +128 -0
  974. package/src/schemas/wechaty-events.ts +251 -0
  975. package/src/schemas/wechaty-options.ts +40 -0
  976. package/src/user-mixins/mod.ts +23 -0
  977. package/src/user-mixins/poolify.spec.ts +110 -0
  978. package/src/user-mixins/poolify.ts +72 -0
  979. package/src/user-mixins/validation.spec.ts +87 -0
  980. package/src/user-mixins/validation.ts +39 -0
  981. package/src/user-mixins/wechatify.spec.ts +27 -0
  982. package/src/user-mixins/wechatify.ts +72 -0
  983. package/src/user-modules/contact-self.ts +217 -0
  984. package/src/user-modules/contact.spec.ts +91 -0
  985. package/src/user-modules/contact.ts +806 -0
  986. package/src/user-modules/delay.ts +61 -0
  987. package/src/user-modules/favorite.ts +89 -0
  988. package/src/user-modules/friendship.ts +441 -0
  989. package/src/user-modules/image.ts +91 -0
  990. package/src/user-modules/location.ts +103 -0
  991. package/src/user-modules/message.spec.ts +124 -0
  992. package/src/user-modules/message.ts +1109 -0
  993. package/src/user-modules/mini-program.ts +111 -0
  994. package/src/user-modules/mod.ts +160 -0
  995. package/src/user-modules/moment.ts +64 -0
  996. package/src/user-modules/money.ts +49 -0
  997. package/src/user-modules/post.spec.ts +77 -0
  998. package/src/user-modules/post.ts +549 -0
  999. package/src/user-modules/room-invitation.ts +291 -0
  1000. package/src/user-modules/room.spec.ts +170 -0
  1001. package/src/user-modules/room.ts +1158 -0
  1002. package/src/user-modules/tag.ts +202 -0
  1003. package/src/user-modules/url-link.spec.ts +35 -0
  1004. package/src/user-modules/url-link.ts +145 -0
  1005. package/src/wechaty/mod.ts +18 -0
  1006. package/src/wechaty/wechaty-base.spec.ts +392 -0
  1007. package/src/wechaty/wechaty-base.ts +307 -0
  1008. package/src/wechaty/wechaty-impl.spec.ts +118 -0
  1009. package/src/wechaty/wechaty-impl.ts +65 -0
  1010. package/src/wechaty/wechaty-skeleton.ts +129 -0
  1011. package/src/wechaty/wechaty-skelton.spec.ts +18 -0
  1012. package/src/wechaty-builder.spec.ts +79 -0
  1013. package/src/wechaty-builder.ts +123 -0
  1014. package/src/wechaty-mixins/gerror-mixin.spec.ts +15 -0
  1015. package/src/wechaty-mixins/gerror-mixin.ts +78 -0
  1016. package/src/wechaty-mixins/io-mixin.ts +117 -0
  1017. package/src/wechaty-mixins/login-mixin.spec.ts +15 -0
  1018. package/src/wechaty-mixins/login-mixin.ts +124 -0
  1019. package/src/wechaty-mixins/misc-mixin.ts +93 -0
  1020. package/src/wechaty-mixins/mod.ts +84 -0
  1021. package/src/wechaty-mixins/plugin-mixin.spec.ts +98 -0
  1022. package/src/wechaty-mixins/plugin-mixin.ts +99 -0
  1023. package/src/wechaty-mixins/puppet-mixin.spec.ts +15 -0
  1024. package/src/wechaty-mixins/puppet-mixin.ts +501 -0
  1025. package/src/wechaty-mixins/wechatify-user-module-mixin.spec.ts +18 -0
  1026. package/src/wechaty-mixins/wechatify-user-module-mixin.ts +151 -0
@@ -0,0 +1,1158 @@
1
+ /**
2
+ * Wechaty Chatbot SDK - https://github.com/wechaty/wechaty
3
+ *
4
+ * @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
5
+ * Wechaty Contributors <https://github.com/wechaty>.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ *
19
+ */
20
+ import type * as PUPPET from 'wechaty-puppet'
21
+ import type { FileBoxInterface } from 'file-box'
22
+ import { concurrencyExecuter } from 'rx-queue'
23
+ import type {
24
+ Constructor,
25
+ } from 'clone-class'
26
+
27
+ import {
28
+ FOUR_PER_EM_SPACE,
29
+ log,
30
+ } from '../config.js'
31
+ import {
32
+ wechatyCaptureException,
33
+ } from '../raven.js'
34
+
35
+ import {
36
+ guardQrCodeValue,
37
+ } from '../pure-functions/guard-qr-code-value.js'
38
+ import {
39
+ isTemplateStringArray,
40
+ } from '../pure-functions/is-template-string-array.js'
41
+
42
+ import { RoomEventEmitter } from '../schemas/mod.js'
43
+ import {
44
+ poolifyMixin,
45
+ wechatifyMixin,
46
+ validationMixin,
47
+ } from '../user-mixins/mod.js'
48
+ import {
49
+ deliverSayableConversationPuppet,
50
+ } from '../sayable/mod.js'
51
+ import type {
52
+ SayableSayer,
53
+ Sayable,
54
+ } from '../sayable/mod.js'
55
+ import { stringifyFilter } from '../helper-functions/stringify-filter.js'
56
+
57
+ import {
58
+ ContactInterface,
59
+ ContactImpl,
60
+ } from './contact.js'
61
+ import type {
62
+ MessageInterface,
63
+ } from './message.js'
64
+
65
+ const MixinBase = wechatifyMixin(
66
+ poolifyMixin(
67
+ RoomEventEmitter,
68
+ )<RoomImplInterface>(),
69
+ )
70
+
71
+ /**
72
+ * All WeChat rooms(groups) will be encapsulated as a Room.
73
+ *
74
+ * [Examples/Room-Bot]{@link https://github.com/wechaty/wechaty/blob/1523c5e02be46ebe2cc172a744b2fbe53351540e/examples/room-bot.ts}
75
+ *
76
+ */
77
+ class RoomMixin extends MixinBase implements SayableSayer {
78
+
79
+ /**
80
+ * Create a new room.
81
+ *
82
+ * @static
83
+ * @param {ContactInterface[]} contactList
84
+ * @param {string} [topic]
85
+ * @returns {Promise<RoomInterface>}
86
+ * @example <caption>Creat a room with 'lijiarui' and 'huan', the room topic is 'ding - created'</caption>
87
+ * const helperContactA = await Contact.find({ name: 'lijiarui' }) // change 'lijiarui' to any contact in your WeChat
88
+ * const helperContactB = await Contact.find({ name: 'huan' }) // change 'huan' to any contact in your WeChat
89
+ * const contactList = [helperContactA, helperContactB]
90
+ * console.log('Bot', 'contactList: %s', contactList.join(','))
91
+ * const room = await Room.create(contactList, 'ding')
92
+ * console.log('Bot', 'createDingRoom() new ding room created: %s', room)
93
+ * await room.topic('ding - created')
94
+ * await room.say('ding - created')
95
+ */
96
+ static async create (
97
+ contactList : ContactInterface[],
98
+ topic? : string,
99
+ ): Promise<RoomInterface> {
100
+ log.verbose('Room', 'create(%s, %s)', contactList.join(','), topic)
101
+
102
+ if (contactList.length < 2) {
103
+ throw new Error('contactList need at least 2 contact to create a new room')
104
+ }
105
+
106
+ try {
107
+ const contactIdList = contactList.map(contact => contact.id)
108
+ const roomId = await this.wechaty.puppet.roomCreate(contactIdList, topic)
109
+ const room = this.load(roomId)
110
+ return room
111
+ } catch (e) {
112
+ this.wechaty.emitError(e)
113
+ log.error('Room', 'create() exception: %s', (e && (e as Error).stack) || (e as Error).message || (e as Error))
114
+ throw e
115
+ }
116
+ }
117
+
118
+ /**
119
+ * The filter to find the room: {topic: string | RegExp}
120
+ *
121
+ * @typedef RoomQueryFilter
122
+ * @property {string} topic
123
+ */
124
+
125
+ /**
126
+ * Find room by filter: {topic: string | RegExp}, return all the matched room.
127
+ *
128
+ * NOTE: The returned list would be limited by the underlying puppet
129
+ * implementation of `puppet.roomList`. Some implementation (i.e.
130
+ * wechaty-puppet-wechat) would only return rooms which have received messges
131
+ * after a log-in.
132
+ *
133
+ * @static
134
+ * @param {RoomQueryFilter} [query]
135
+ * @returns {Promise<RoomInterface[]>}
136
+ * @example
137
+ * const bot = new Wechaty()
138
+ * await bot.start()
139
+ * // after logged in
140
+ * const roomList = await bot.Room.findAll() // get the room list of the bot
141
+ * const roomList = await bot.Room.findAll({topic: 'wechaty'}) // find all of the rooms with name 'wechaty'
142
+ */
143
+ static async findAll (
144
+ query? : PUPPET.filters.Room,
145
+ ): Promise<RoomInterface[]> {
146
+ log.verbose('Room', 'findAll(%s)', JSON.stringify(query, stringifyFilter) || '')
147
+
148
+ try {
149
+ const roomIdList = await this.wechaty.puppet.roomSearch(query)
150
+
151
+ const idToRoom = async (id: string) =>
152
+ this.wechaty.Room.find({ id })
153
+ .catch(e => this.wechaty.emitError(e))
154
+
155
+ /**
156
+ * we need to use concurrencyExecuter to reduce the parallel number of the requests
157
+ */
158
+ const CONCURRENCY = 17
159
+ const roomIterator = concurrencyExecuter(CONCURRENCY)(idToRoom)(roomIdList)
160
+
161
+ const roomList: RoomInterface[] = []
162
+
163
+ for await (const room of roomIterator) {
164
+ if (room) {
165
+ roomList.push(room)
166
+ }
167
+ }
168
+
169
+ return roomList
170
+
171
+ } catch (e) {
172
+ this.wechaty.emitError(e)
173
+ log.verbose('Room', 'findAll() rejected: %s', (e as Error).message)
174
+ return [] as RoomInterface[] // fail safe
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Try to find a room by filter: {topic: string | RegExp}. If get many, return the first one.
180
+ *
181
+ * NOTE: The search space is limited by the underlying puppet
182
+ * implementation of `puppet.roomList`. Some implementation (i.e.
183
+ * wechaty-puppet-wechat) would only return rooms which have received messges
184
+ * after a log-in.
185
+ *
186
+ * @param {RoomQueryFilter} query
187
+ * @returns {Promise<undefined | RoomInterface>} If can find the room, return Room, or return null
188
+ * @example
189
+ * const bot = new Wechaty()
190
+ * await bot.start()
191
+ * // after logged in...
192
+ * const roomList = await bot.Room.find()
193
+ * const roomList = await bot.Room.find({topic: 'wechaty'})
194
+ */
195
+
196
+ static async find (
197
+ query : string | PUPPET.filters.Room,
198
+ ): Promise<undefined | RoomInterface> {
199
+ log.silly('Room', 'find(%s)', JSON.stringify(query, stringifyFilter))
200
+
201
+ if (typeof query === 'string') {
202
+ query = { topic: query }
203
+ }
204
+
205
+ if (query.id) {
206
+ const room = (this.wechaty.Room as any as typeof RoomImpl).load(query.id)
207
+ try {
208
+ await room.ready()
209
+ } catch (e) {
210
+ this.wechaty.emitError(e)
211
+ return undefined
212
+ }
213
+
214
+ return room
215
+ }
216
+
217
+ const roomList = await this.findAll(query)
218
+ // if (!roomList) {
219
+ // return null
220
+ // }
221
+ if (roomList.length < 1) {
222
+ return undefined
223
+ }
224
+
225
+ if (roomList.length > 1) {
226
+ log.warn('Room', 'find() got more than one(%d) result', roomList.length)
227
+ }
228
+
229
+ for (const [idx, room] of roomList.entries()) {
230
+ // use puppet.roomValidate() to confirm double confirm that this roomId is valid.
231
+ // https://github.com/wechaty/wechaty-puppet-padchat/issues/64
232
+ // https://github.com/wechaty/wechaty/issues/1345
233
+ const valid = await this.wechaty.puppet.roomValidate(room.id)
234
+ if (valid) {
235
+ log.verbose('Room', 'find() room<id=%s> is valid: return it', idx, room.id)
236
+ return room
237
+ } else {
238
+ log.verbose('Room', 'find() room<id=%s> is invalid: skip it', idx, room.id)
239
+ }
240
+ }
241
+ log.warn('Room', 'find() all %d rooms are invalid', roomList.length)
242
+ return undefined
243
+ }
244
+
245
+ /** const roomList: RoomInterface[] = []
246
+
247
+ * @ignore
248
+ *
249
+ * Instance Properties
250
+ *
251
+ *
252
+ */
253
+ payload?: PUPPET.payloads.Room
254
+
255
+ /**
256
+ * @hideconstructor
257
+ * @property {string} id - Room id.
258
+ * This function is depending on the Puppet Implementation, see [puppet-compatible-table](https://github.com/wechaty/wechaty/wiki/Puppet#3-puppet-compatible-table)
259
+ */
260
+ constructor (
261
+ public readonly id: string,
262
+ ) {
263
+ super()
264
+ log.silly('Room', `constructor(${id})`)
265
+ }
266
+
267
+ /**
268
+ * @ignore
269
+ */
270
+ override toString () {
271
+ if (!this.payload) {
272
+ return this.constructor.name
273
+ }
274
+
275
+ return `Room<${this.payload.topic || 'loading...'}>`
276
+ }
277
+
278
+ async * [Symbol.asyncIterator] (): AsyncIterableIterator<ContactInterface> {
279
+ const memberList = await this.memberList()
280
+ for (const contact of memberList) {
281
+ yield contact
282
+ }
283
+ }
284
+
285
+ /**
286
+ * Proposal: add a handle field to RoomPayload #181
287
+ * @link https://github.com/wechaty/puppet/issues/181
288
+ */
289
+ handle (): undefined | string {
290
+ return this.payload?.handle
291
+ }
292
+
293
+ /**
294
+ * Force reload data for Room, Sync data from puppet API again.
295
+ *
296
+ * @returns {Promise<void>}
297
+ * @example
298
+ * await room.sync()
299
+ */
300
+ async sync (): Promise<void> {
301
+ await this.wechaty.puppet.roomPayloadDirty(this.id)
302
+ await this.wechaty.puppet.roomMemberPayloadDirty(this.id)
303
+ await this.ready(true)
304
+ }
305
+
306
+ /**
307
+ * Warning: `ready()` is for the framework internally use ONLY!
308
+ *
309
+ * Please not to use `ready()` at the user land.
310
+ * If you want to sync data, use `sync()` instead.
311
+ *
312
+ * @ignore
313
+ */
314
+ async ready (
315
+ forceSync = false,
316
+ ): Promise<void> {
317
+ log.silly('Room', 'ready()')
318
+
319
+ if (!forceSync && this.isReady()) {
320
+ return
321
+ }
322
+
323
+ this.payload = await this.wechaty.puppet.roomPayload(this.id)
324
+
325
+ /**
326
+ * Sync all room member contacts
327
+ */
328
+ const memberIdList = await this.wechaty.puppet.roomMemberList(this.id)
329
+
330
+ const doReady = async (id: string): Promise<void> => {
331
+ try {
332
+ await this.wechaty.Contact.find({ id })
333
+ } catch (e) {
334
+ this.wechaty.emitError(e)
335
+ }
336
+ }
337
+
338
+ /**
339
+ * we need to use concurrencyExecuter to reduce the parallel number of the requests
340
+ */
341
+ const CONCURRENCY = 17
342
+ const contactIterator = concurrencyExecuter(CONCURRENCY)(doReady)(memberIdList)
343
+
344
+ for await (const contact of contactIterator) {
345
+ void contact // just a empty loop to wait all iterator finished
346
+ }
347
+
348
+ }
349
+
350
+ /**
351
+ * @ignore
352
+ */
353
+ isReady (): boolean {
354
+ return !!(this.payload)
355
+ }
356
+
357
+ say (sayable: Sayable) : Promise<void | MessageInterface>
358
+ say (text: string, ...mentionList: ContactInterface[]) : Promise<void | MessageInterface>
359
+ say (textList: TemplateStringsArray, ...varList: any[]) : Promise<void | MessageInterface>
360
+
361
+ // Huan(202006): allow fall down to the defination to get more flexibility.
362
+ // public say (...args: never[]): never
363
+
364
+ /**
365
+ * Send message inside Room, if set [replyTo], wechaty will mention the contact as well.
366
+ * > Tips:
367
+ * This function is depending on the Puppet Implementation, see [puppet-compatible-table](https://github.com/wechaty/wechaty/wiki/Puppet#3-puppet-compatible-table)
368
+ *
369
+ * @param {(string | ContactInterface | FileBox)} textOrContactOrFileOrUrlOrMini - Send `text` or `media file` inside Room. <br>
370
+ * You can use {@link https://www.npmjs.com/package/file-box|FileBox} to send file
371
+ * @param {(ContactInterface | ContactInterface[])} [mention] - Optional parameter, send content inside Room, and mention @replyTo contact or contactList.
372
+ * @returns {Promise<void | MessageInterface>}
373
+ *
374
+ * @example
375
+ * const bot = new Wechaty()
376
+ * await bot.start()
377
+ * // after logged in...
378
+ * const room = await bot.Room.find({topic: 'wechaty'})
379
+ *
380
+ * // 1. Send text inside Room
381
+ *
382
+ * await room.say('Hello world!')
383
+ * const msg = await room.say('Hello world!') // only supported by puppet-padplus
384
+ *
385
+ * // 2. Send media file inside Room
386
+ * import { FileBox } from 'wechaty'
387
+ * const fileBox1 = FileBox.fromUrl('https://wechaty.github.io/wechaty/images/bot-qr-code.png')
388
+ * const fileBox2 = FileBox.fromLocal('/tmp/text.txt')
389
+ * await room.say(fileBox1)
390
+ * const msg1 = await room.say(fileBox1) // only supported by puppet-padplus
391
+ * await room.say(fileBox2)
392
+ * const msg2 = await room.say(fileBox2) // only supported by puppet-padplus
393
+ *
394
+ * // 3. Send Contact Card in a room
395
+ * const contactCard = await bot.Contact.find({name: 'lijiarui'}) // change 'lijiarui' to any of the room member
396
+ * await room.say(contactCard)
397
+ * const msg = await room.say(contactCard) // only supported by puppet-padplus
398
+ *
399
+ * // 4. Send text inside room and mention @mention contact
400
+ * const contact = await bot.Contact.find({name: 'lijiarui'}) // change 'lijiarui' to any of the room member
401
+ * await room.say('Hello world!', contact)
402
+ * const msg = await room.say('Hello world!', contact) // only supported by puppet-padplus
403
+ *
404
+ * // 5. Send text inside room and mention someone with Tagged Template
405
+ * const contact2 = await bot.Contact.find({name: 'zixia'}) // change 'zixia' to any of the room member
406
+ * await room.say`Hello ${contact}, here is the world ${contact2}`
407
+ * const msg = await room.say`Hello ${contact}, here is the world ${contact2}` // only supported by puppet-padplus
408
+ *
409
+ * // 6. send url link in a room
410
+ *
411
+ * const urlLink = new UrlLink ({
412
+ * description : 'WeChat Bot SDK for Individual Account, Powered by TypeScript, Docker, and Love',
413
+ * thumbnailUrl: 'https://avatars0.githubusercontent.com/u/25162437?s=200&v=4',
414
+ * title : 'Welcome to Wechaty',
415
+ * url : 'https://github.com/wechaty/wechaty',
416
+ * })
417
+ * await room.say(urlLink)
418
+ * const msg = await room.say(urlLink) // only supported by puppet-padplus
419
+ *
420
+ * // 7. send mini program in a room
421
+ *
422
+ * const miniProgram = new MiniProgram ({
423
+ * username : 'gh_xxxxxxx', //get from mp.weixin.qq.com
424
+ * appid : '', //optional, get from mp.weixin.qq.com
425
+ * title : '', //optional
426
+ * pagepath : '', //optional
427
+ * description : '', //optional
428
+ * thumbnailurl : '', //optional
429
+ * })
430
+ * await room.say(miniProgram)
431
+ * const msg = await room.say(miniProgram) // only supported by puppet-padplus
432
+ *
433
+ * // 8. send location in a room
434
+ * const location = new Location ({
435
+ * accuracy : 15,
436
+ * address : '北京市北京市海淀区45 Chengfu Rd',
437
+ * latitude : 39.995120999999997,
438
+ * longitude : 116.334154,
439
+ * name : '东升乡人民政府(海淀区成府路45号)',
440
+ * })
441
+ * await room.say(location)
442
+ * const msg = await room.say(location)
443
+ */
444
+ async say (
445
+ sayable : Sayable | TemplateStringsArray,
446
+ ...varList : unknown[]
447
+ ): Promise<void | MessageInterface> {
448
+
449
+ log.verbose('Room', 'say(%s, %s)',
450
+ sayable,
451
+ varList.join(', '),
452
+ )
453
+
454
+ let msgId
455
+ let text: string
456
+
457
+ if (isTemplateStringArray(sayable)) {
458
+ msgId = await this.sayTemplateStringsArray(
459
+ sayable as TemplateStringsArray,
460
+ ...varList,
461
+ )
462
+ } else if (typeof sayable === 'string') {
463
+ /**
464
+ * 1. string
465
+ */
466
+ let mentionList: ContactInterface[] = []
467
+
468
+ if (varList.length > 0) {
469
+ const allIsContact = varList.every(c => ContactImpl.valid(c))
470
+ if (!allIsContact) {
471
+ throw new Error('mentionList must be contact when not using TemplateStringsArray function call.')
472
+ }
473
+
474
+ mentionList = [...varList as any]
475
+
476
+ const AT_SEPARATOR = FOUR_PER_EM_SPACE
477
+ const mentionAlias = await Promise.all(mentionList.map(async contact =>
478
+ '@' + (await this.alias(contact) || contact.name()),
479
+ ))
480
+ const mentionText = mentionAlias.join(AT_SEPARATOR)
481
+
482
+ text = mentionText + ' ' + sayable
483
+ } else {
484
+ text = sayable
485
+ }
486
+ // const receiver = {
487
+ // contactId : (mentionList.length && mentionList[0].id) || undefined,
488
+ // roomId : this.id,
489
+ // }
490
+ msgId = await this.wechaty.puppet.messageSendText(
491
+ this.id,
492
+ text,
493
+ mentionList.map(c => c.id),
494
+ )
495
+ } else {
496
+ msgId = await deliverSayableConversationPuppet(this.wechaty.puppet)(this.id)(sayable)
497
+ }
498
+
499
+ if (msgId) {
500
+ const msg = await this.wechaty.Message.find({ id: msgId })
501
+ return msg
502
+ }
503
+ }
504
+
505
+ private async sayTemplateStringsArray (
506
+ textList: TemplateStringsArray,
507
+ ...varList: unknown[]
508
+ ) {
509
+ const mentionList = varList.filter(c => ContactImpl.valid(c)) as ContactInterface[]
510
+
511
+ // const receiver = {
512
+ // contactId : (mentionList.length && mentionList[0].id) || undefined,
513
+ // roomId : this.id,
514
+ // }
515
+ if (varList.length === 0) {
516
+ /**
517
+ * No mention in the string
518
+ */
519
+ return this.wechaty.puppet.messageSendText(
520
+ this.id,
521
+ textList[0]!,
522
+ )
523
+ // TODO(huan) 20191222 it seems the following code will not happen,
524
+ // because it's equal the mentionList.length === 0 situation?
525
+ //
526
+ // XXX(huan) 20200101: See issue https://github.com/wechaty/wechaty/issues/1893
527
+ // This is an anti-pattern usage.
528
+ //
529
+ // } else if (textList.length === 1) {
530
+ // /**
531
+ // * Constructed mention string, skip inserting @ signs
532
+ // */
533
+ // return this.wechaty.puppet.messageSendText(
534
+ // receiver,
535
+ // textList[0],
536
+ // mentionList.map(c => c.id),
537
+ // )
538
+ } else { // mentionList.length > 0
539
+ /**
540
+ * Mention in the string
541
+ */
542
+ const textListLength = textList.length
543
+ const varListLength = varList.length
544
+ if (textListLength - varListLength !== 1) {
545
+ throw new Error('Can not say message, invalid Template String Array.')
546
+ }
547
+ let finalText = ''
548
+
549
+ let i = 0
550
+ for (; i < varListLength; i++) {
551
+ if (ContactImpl.valid(varList[i])) {
552
+ const mentionContact: ContactInterface = varList[i] as any
553
+ const mentionName = await this.alias(mentionContact) || mentionContact.name()
554
+ finalText += textList[i] + '@' + mentionName
555
+ } else {
556
+ finalText += textList[i]! + varList[i]!
557
+ }
558
+ }
559
+ finalText += textList[i]
560
+
561
+ return this.wechaty.puppet.messageSendText(
562
+ this.id,
563
+ finalText,
564
+ mentionList.map(c => c.id),
565
+ )
566
+ }
567
+ }
568
+
569
+ /**
570
+ * @desc Room Class Event Type
571
+ * @typedef RoomEventName
572
+ * @property {string} join - Emit when anyone join any room.
573
+ * @property {string} topic - Get topic event, emitted when someone change room topic.
574
+ * @property {string} leave - Emit when anyone leave the room.<br>
575
+ * If someone leaves the room by themselves, WeChat will not notice other people in the room, so the bot will never get the "leave" event.
576
+ */
577
+
578
+ /**
579
+ * @desc Room Class Event Function
580
+ * @typedef RoomEventFunction
581
+ * @property {Function} room-join - (this: Room, inviteeList: Contact[] , inviter: Contact) => void
582
+ * @property {Function} room-topic - (this: Room, topic: string, oldTopic: string, changer: Contact) => void
583
+ * @property {Function} room-leave - (this: Room, leaver: Contact) => void
584
+ */
585
+
586
+ /**
587
+ * @listens Room
588
+ * @param {RoomEventName} event - Emit WechatyEvent
589
+ * @param {RoomEventFunction} listener - Depends on the WechatyEvent
590
+ * @return {this} - this for chain
591
+ *
592
+ * @example <caption>Event:join </caption>
593
+ * const bot = new Wechaty()
594
+ * await bot.start()
595
+ * // after logged in...
596
+ * const room = await bot.Room.find({topic: 'topic of your room'}) // change `event-room` to any room topic in your WeChat
597
+ * if (room) {
598
+ * room.on('join', (room, inviteeList, inviter) => {
599
+ * const nameList = inviteeList.map(c => c.name()).join(',')
600
+ * console.log(`Room got new member ${nameList}, invited by ${inviter}`)
601
+ * })
602
+ * }
603
+ *
604
+ * @example <caption>Event:leave </caption>
605
+ * const bot = new Wechaty()
606
+ * await bot.start()
607
+ * // after logged in...
608
+ * const room = await bot.Room.find({topic: 'topic of your room'}) // change `event-room` to any room topic in your WeChat
609
+ * if (room) {
610
+ * room.on('leave', (room, leaverList) => {
611
+ * const nameList = leaverList.map(c => c.name()).join(',')
612
+ * console.log(`Room lost member ${nameList}`)
613
+ * })
614
+ * }
615
+ *
616
+ * @example <caption>Event:message </caption>
617
+ * const bot = new Wechaty()
618
+ * await bot.start()
619
+ * // after logged in...
620
+ * const room = await bot.Room.find({topic: 'topic of your room'}) // change `event-room` to any room topic in your WeChat
621
+ * if (room) {
622
+ * room.on('message', (message) => {
623
+ * console.log(`Room received new message: ${message}`)
624
+ * })
625
+ * }
626
+ *
627
+ * @example <caption>Event:topic </caption>
628
+ * const bot = new Wechaty()
629
+ * await bot.start()
630
+ * // after logged in...
631
+ * const room = await bot.Room.find({topic: 'topic of your room'}) // change `event-room` to any room topic in your WeChat
632
+ * if (room) {
633
+ * room.on('topic', (room, topic, oldTopic, changer) => {
634
+ * console.log(`Room topic changed from ${oldTopic} to ${topic} by ${changer.name()}`)
635
+ * })
636
+ * }
637
+ *
638
+ * @example <caption>Event:invite </caption>
639
+ * const bot = new Wechaty()
640
+ * await bot.start()
641
+ * // after logged in...
642
+ * const room = await bot.Room.find({topic: 'topic of your room'}) // change `event-room` to any room topic in your WeChat
643
+ * if (room) {
644
+ * room.on('invite', roomInvitation => roomInvitation.accept())
645
+ * }
646
+ *
647
+ */
648
+ // public on (event: RoomEventName, listener: (...args: any[]) => any): this {
649
+ // log.verbose('Room', 'on(%s, %s)', event, typeof listener)
650
+
651
+ // super.on(event, listener) // Room is `Sayable`
652
+ // return this
653
+ // }
654
+
655
+ /**
656
+ * Add contact in a room
657
+ *
658
+ * > Tips:
659
+ * This function is depending on the Puppet Implementation, see [puppet-compatible-table](https://github.com/wechaty/wechaty/wiki/Puppet#3-puppet-compatible-table)
660
+ * >
661
+ * > see {@link https://github.com/wechaty/wechaty/issues/1441|Web version of WeChat closed group interface}
662
+ *
663
+ * @param {ContactInterface} contact
664
+ * @returns {Promise<void>}
665
+ * @example
666
+ * const bot = new Wechaty()
667
+ * await bot.start()
668
+ * // after logged in...
669
+ * const contact = await bot.Contact.find({name: 'lijiarui'}) // change 'lijiarui' to any contact in your WeChat
670
+ * const room = await bot.Room.find({topic: 'WeChat'}) // change 'WeChat' to any room topic in your WeChat
671
+ * if (room) {
672
+ * try {
673
+ * await room.add(contact)
674
+ * } catch(e) {
675
+ * console.error(e)
676
+ * }
677
+ * }
678
+ */
679
+ async add (contact: ContactInterface): Promise<void> {
680
+ log.verbose('Room', 'add(%s)', contact)
681
+ await this.wechaty.puppet.roomAdd(this.id, contact.id)
682
+ }
683
+
684
+ /**
685
+ * Remove a contact from the room
686
+ * It works only when the bot is the owner of the room
687
+ *
688
+ * > Tips:
689
+ * This function is depending on the Puppet Implementation, see [puppet-compatible-table](https://github.com/wechaty/wechaty/wiki/Puppet#3-puppet-compatible-table)
690
+ * >
691
+ * > see {@link https://github.com/wechaty/wechaty/issues/1441|Web version of WeChat closed group interface}
692
+ *
693
+ * @param {ContactInterface} contact
694
+ * @returns {Promise<void>}
695
+ * @example
696
+ * const bot = new Wechaty()
697
+ * await bot.start()
698
+ * // after logged in...
699
+ * const room = await bot.Room.find({topic: 'WeChat'}) // change 'WeChat' to any room topic in your WeChat
700
+ * const contact = await bot.Contact.find({name: 'lijiarui'}) // change 'lijiarui' to any room member in the room you just set
701
+ * if (room) {
702
+ * try {
703
+ * await room.remove(contact)
704
+ * } catch(e) {
705
+ * console.error(e)
706
+ * }
707
+ * }
708
+ */
709
+ async remove (contact: ContactInterface): Promise<void> {
710
+ log.verbose('Room', 'del(%s)', contact)
711
+ await this.wechaty.puppet.roomDel(this.id, contact.id)
712
+ // this.delLocal(contact)
713
+ }
714
+
715
+ /**
716
+ * Huan(202106): will be removed after Dec 31, 2023
717
+ * @deprecated use remove(contact) instead.
718
+ */
719
+ async del (contact: ContactImpl): Promise<void> {
720
+ log.warn('Room', 'del() is DEPRECATED, use remove() instead.\n%s', new Error().stack)
721
+ return this.remove(contact)
722
+ }
723
+
724
+ // private delLocal(contact: Contact): void {
725
+ // log.verbose('Room', 'delLocal(%s)', contact)
726
+
727
+ // const memberIdList = this.payload && this.payload.memberIdList
728
+ // if (memberIdList && memberIdList.length > 0) {
729
+ // for (let i = 0; i < memberIdList.length; i++) {
730
+ // if (memberIdList[i] === contact.id) {
731
+ // memberIdList.splice(i, 1)
732
+ // break
733
+ // }
734
+ // }
735
+ // }
736
+ // }
737
+
738
+ /**
739
+ * Bot quit the room itself
740
+ *
741
+ * > Tips:
742
+ * This function is depending on the Puppet Implementation, see [puppet-compatible-table](https://github.com/wechaty/wechaty/wiki/Puppet#3-puppet-compatible-table)
743
+ *
744
+ * @returns {Promise<void>}
745
+ * @example
746
+ * await room.quit()
747
+ */
748
+ async quit (): Promise<void> {
749
+ log.verbose('Room', 'quit() %s', this)
750
+ await this.wechaty.puppet.roomQuit(this.id)
751
+ }
752
+
753
+ async topic () : Promise<string>
754
+ async topic (newTopic: string): Promise<void>
755
+
756
+ /**
757
+ * SET/GET topic from the room
758
+ *
759
+ * @param {string} [newTopic] If set this para, it will change room topic.
760
+ * @returns {Promise<string | void>}
761
+ *
762
+ * @example <caption>When you say anything in a room, it will get room topic. </caption>
763
+ * const bot = new Wechaty()
764
+ * bot
765
+ * .on('message', async m => {
766
+ * const room = m.room()
767
+ * if (room) {
768
+ * const topic = await room.topic()
769
+ * console.log(`room topic is : ${topic}`)
770
+ * }
771
+ * })
772
+ * .start()
773
+ *
774
+ * @example <caption>When you say anything in a room, it will change room topic. </caption>
775
+ * const bot = new Wechaty()
776
+ * bot
777
+ * .on('message', async m => {
778
+ * const room = m.room()
779
+ * if (room) {
780
+ * const oldTopic = await room.topic()
781
+ * await room.topic('change topic to wechaty!')
782
+ * console.log(`room topic change from ${oldTopic} to ${room.topic()}`)
783
+ * }
784
+ * })
785
+ * .start()
786
+ */
787
+ async topic (newTopic?: string): Promise<void | string> {
788
+ log.verbose('Room', 'topic(%s)', newTopic || '')
789
+ if (!this.isReady()) {
790
+ log.warn('Room', 'topic() room not ready')
791
+ throw new Error('not ready')
792
+ }
793
+
794
+ if (typeof newTopic === 'undefined') {
795
+ if (this.payload && this.payload.topic) {
796
+ return this.payload.topic
797
+ } else {
798
+ const memberIdList = await this.wechaty.puppet.roomMemberList(this.id)
799
+ const memberListFuture = memberIdList
800
+ .filter(id => id !== this.wechaty.puppet.currentUserId)
801
+ .map(id => this.wechaty.Contact.find({ id }))
802
+
803
+ const memberList = (await Promise.all(memberListFuture))
804
+ .filter(Boolean) as ContactInterface[]
805
+
806
+ let defaultTopic = (memberList[0] && memberList[0].name()) || ''
807
+ for (let i = 1; i < 3 && memberList[i]; i++) {
808
+ defaultTopic += ',' + memberList[i]!.name()
809
+ }
810
+ return defaultTopic
811
+ }
812
+ }
813
+
814
+ const future = this.wechaty.puppet
815
+ .roomTopic(this.id, newTopic)
816
+ .catch(e => {
817
+ log.warn('Room', 'topic(newTopic=%s) exception: %s',
818
+ newTopic, (e && e.message) || e,
819
+ )
820
+ wechatyCaptureException(e)
821
+ })
822
+
823
+ return future
824
+ }
825
+
826
+ async announce () : Promise<string>
827
+ async announce (text: string) : Promise<void>
828
+
829
+ /**
830
+ * SET/GET announce from the room
831
+ * > Tips: It only works when bot is the owner of the room.
832
+ * >
833
+ * > This function is depending on the Puppet Implementation, see [puppet-compatible-table](https://github.com/wechaty/wechaty/wiki/Puppet#3-puppet-compatible-table)
834
+ *
835
+ * @param {string} [text] If set this para, it will change room announce.
836
+ * @returns {(Promise<void | string>)}
837
+ *
838
+ * @example <caption>When you say anything in a room, it will get room announce. </caption>
839
+ * const bot = new Wechaty()
840
+ * await bot.start()
841
+ * // after logged in...
842
+ * const room = await bot.Room.find({topic: 'your room'})
843
+ * const announce = await room.announce()
844
+ * console.log(`room announce is : ${announce}`)
845
+ *
846
+ * @example <caption>When you say anything in a room, it will change room announce. </caption>
847
+ * const bot = new Wechaty()
848
+ * await bot.start()
849
+ * // after logged in...
850
+ * const room = await bot.Room.find({topic: 'your room'})
851
+ * const oldAnnounce = await room.announce()
852
+ * await room.announce('change announce to wechaty!')
853
+ * console.log(`room announce change from ${oldAnnounce} to ${room.announce()}`)
854
+ */
855
+ async announce (text?: string): Promise<void | string> {
856
+ log.verbose('Room', 'announce(%s)',
857
+ typeof text === 'undefined'
858
+ ? ''
859
+ : `"${text || ''}"`,
860
+ )
861
+
862
+ if (typeof text === 'undefined') {
863
+ const announcement = await this.wechaty.puppet.roomAnnounce(this.id)
864
+ return announcement
865
+ } else {
866
+ await this.wechaty.puppet.roomAnnounce(this.id, text)
867
+ }
868
+ }
869
+
870
+ /**
871
+ * Get QR Code Value of the Room from the room, which can be used as scan and join the room.
872
+ * > Tips:
873
+ * 1. This function is depending on the Puppet Implementation, see [puppet-compatible-table](https://github.com/wechaty/wechaty/wiki/Puppet#3-puppet-compatible-table)
874
+ * 2. The return should be the QR Code Data, instead of the QR Code Image. (the data should be less than 8KB. See: https://stackoverflow.com/a/12764370/1123955 )
875
+ * @returns {Promise<string>}
876
+ */
877
+ async qrCode (): Promise<string> {
878
+ log.verbose('Room', 'qrCode()')
879
+ const qrcodeValue = await this.wechaty.puppet.roomQRCode(this.id)
880
+ return guardQrCodeValue(qrcodeValue)
881
+ }
882
+
883
+ /**
884
+ * Return contact's roomAlias in the room
885
+ * @param {ContactInterface} contact
886
+ * @returns {Promise<string | null>} - If a contact has an alias in room, return string, otherwise return null
887
+ * @example
888
+ * const bot = new Wechaty()
889
+ * bot
890
+ * .on('message', async m => {
891
+ * const room = m.room()
892
+ * const contact = m.from()
893
+ * if (room) {
894
+ * const alias = await room.alias(contact)
895
+ * console.log(`${contact.name()} alias is ${alias}`)
896
+ * }
897
+ * })
898
+ * .start()
899
+ */
900
+ async alias (contact: ContactInterface): Promise<undefined | string> {
901
+ const memberPayload = await this.wechaty.puppet.roomMemberPayload(this.id, contact.id)
902
+
903
+ if (memberPayload.roomAlias) {
904
+ return memberPayload.roomAlias
905
+ }
906
+
907
+ return undefined
908
+ }
909
+
910
+ async readMark (hasRead: boolean): Promise<void>
911
+ async readMark (): Promise<boolean>
912
+
913
+ /**
914
+ * Mark the conversation as read
915
+ * @param { undefined | boolean } hasRead
916
+ *
917
+ * @example
918
+ * const bot = new Wechaty()
919
+ * const room = await bot.Room.find({topic: 'xxx'})
920
+ * await room.readMark()
921
+ */
922
+ async readMark (hasRead?: boolean): Promise<void | boolean> {
923
+ try {
924
+ if (typeof hasRead === 'undefined') {
925
+ return this.wechaty.puppet.conversationReadMark(this.id)
926
+ } else {
927
+ await this.wechaty.puppet.conversationReadMark(this.id, hasRead)
928
+ }
929
+ } catch (e) {
930
+ this.wechaty.emitError(e)
931
+ log.error('Room', 'readMark() exception: %s', (e as Error).message)
932
+ }
933
+ }
934
+
935
+ /**
936
+ * Check if the room has member `contact`, the return is a Promise and must be `await`-ed
937
+ *
938
+ * @param {ContactInterface} contact
939
+ * @returns {Promise<boolean>} Return `true` if has contact, else return `false`.
940
+ * @example <caption>Check whether 'lijiarui' is in the room 'wechaty'</caption>
941
+ * const bot = new Wechaty()
942
+ * await bot.start()
943
+ * // after logged in...
944
+ * const contact = await bot.Contact.find({name: 'lijiarui'}) // change 'lijiarui' to any of contact in your WeChat
945
+ * const room = await bot.Room.find({topic: 'wechaty'}) // change 'wechaty' to any of the room in your WeChat
946
+ * if (contact && room) {
947
+ * if (await room.has(contact)) {
948
+ * console.log(`${contact.name()} is in the room wechaty!`)
949
+ * } else {
950
+ * console.log(`${contact.name()} is not in the room wechaty!`)
951
+ * }
952
+ * }
953
+ */
954
+ async has (contact: ContactInterface): Promise<boolean> {
955
+ const memberIdList = await this.wechaty.puppet.roomMemberList(this.id)
956
+
957
+ // if (!memberIdList) {
958
+ // return false
959
+ // }
960
+
961
+ return memberIdList
962
+ .filter(id => id === contact.id)
963
+ .length > 0
964
+ }
965
+
966
+ async memberAll () : Promise<ContactInterface[]>
967
+ async memberAll (name: string) : Promise<ContactInterface[]>
968
+ async memberAll (filter: PUPPET.filters.RoomMember) : Promise<ContactInterface[]>
969
+
970
+ /**
971
+ * The way to search member by Room.member()
972
+ *
973
+ * @typedef RoomMemberQueryFilter
974
+ * @property {string} name -Find the contact by WeChat name in a room, equal to `Contact.name()`.
975
+ * @property {string} roomAlias -Find the contact by alias set by the bot for others in a room.
976
+ * @property {string} contactAlias -Find the contact by alias set by the contact out of a room, equal to `Contact.alias()`.
977
+ * [More Detail]{@link https://github.com/wechaty/wechaty/issues/365}
978
+ */
979
+
980
+ /**
981
+ * Find all contacts in a room
982
+ *
983
+ * #### definition
984
+ * - `name` the name-string set by user-self, should be called name, equal to `Contact.name()`
985
+ * - `roomAlias` the name-string set by user-self in the room, should be called roomAlias
986
+ * - `contactAlias` the name-string set by bot for others, should be called alias, equal to `Contact.alias()`
987
+ * @param {(RoomMemberQueryFilter | string)} [query] -Optional parameter, When use memberAll(name:string), return all matched members, including name, roomAlias, contactAlias
988
+ * @returns {Promise<ContactInterface[]>}
989
+ * @example
990
+ * const roomList:Contact[] | null = await room.findAll()
991
+ * if(roomList)
992
+ * console.log(`room all member list: `, roomList)
993
+ * const memberContactList: Contact[] | null =await room.findAll(`abc`)
994
+ * console.log(`contact list with all name, room alias, alias are abc:`, memberContactList)
995
+ */
996
+ async memberAll (
997
+ query?: string | PUPPET.filters.RoomMember,
998
+ ): Promise<ContactInterface[]> {
999
+ log.silly('Room', 'memberAll(%s)',
1000
+ JSON.stringify(query) || '',
1001
+ )
1002
+
1003
+ if (!query) {
1004
+ return this.memberList()
1005
+ }
1006
+
1007
+ const contactIdList = await this.wechaty.puppet.roomMemberSearch(this.id, query)
1008
+ const contactListAll = await Promise.all(
1009
+ contactIdList.map(id => this.wechaty.Contact.find({ id })),
1010
+ )
1011
+
1012
+ const contactList = contactListAll.filter(c => !!c) as ContactInterface[]
1013
+ return contactList
1014
+ }
1015
+
1016
+ async member (name : string) : Promise<undefined | ContactInterface>
1017
+ async member (filter: PUPPET.filters.RoomMember): Promise<undefined | ContactInterface>
1018
+
1019
+ /**
1020
+ * Find all contacts in a room, if get many, return the first one.
1021
+ *
1022
+ * @param {(RoomMemberQueryFilter | string)} queryArg -When use member(name:string), return all matched members, including name, roomAlias, contactAlias
1023
+ * @returns {Promise<undefined | ContactInterface>}
1024
+ *
1025
+ * @example <caption>Find member by name</caption>
1026
+ * const bot = new Wechaty()
1027
+ * await bot.start()
1028
+ * // after logged in...
1029
+ * const room = await bot.Room.find({topic: 'wechaty'}) // change 'wechaty' to any room name in your WeChat
1030
+ * if (room) {
1031
+ * const member = await room.member('lijiarui') // change 'lijiarui' to any room member in your WeChat
1032
+ * if (member) {load
1033
+ * @example <caption>Find member by MemberQueryFilter</caption>
1034
+ * const bot = new Wechaty()
1035
+ * await bot.start()
1036
+ * // after logged in...
1037
+ * const room = await bot.Room.find({topic: 'wechaty'}) // change 'wechaty' to any room name in your WeChat
1038
+ * if (room) {
1039
+ * const member = await room.member({name: 'lijiarui'}) // change 'lijiarui' to any room member in your WeChat
1040
+ * if (member) {
1041
+ * console.log(`wechaty room got the member: ${member.name()}`)
1042
+ * } else {
1043
+ * console.log(`cannot get member in wechaty room!`)
1044
+ * }
1045
+ * }
1046
+ */
1047
+ async member (
1048
+ queryArg: string | PUPPET.filters.RoomMember,
1049
+ ): Promise<undefined | ContactInterface> {
1050
+ log.verbose('Room', 'member(%s)', JSON.stringify(queryArg))
1051
+
1052
+ let memberList: ContactInterface[]
1053
+ // ISSUE #622
1054
+ // error TS2345: Argument of type 'string | MemberQueryFilter' is not assignable to parameter of type 'MemberQueryFilter' #622
1055
+ if (typeof queryArg === 'string') {
1056
+ memberList = await this.memberAll(queryArg)
1057
+ } else {
1058
+ memberList = await this.memberAll(queryArg)
1059
+ }
1060
+
1061
+ if (memberList.length <= 0) {
1062
+ return undefined
1063
+ }
1064
+
1065
+ if (memberList.length > 1) {
1066
+ log.warn('Room', 'member(%s) get %d contacts, use the first one by default', JSON.stringify(queryArg), memberList.length)
1067
+ }
1068
+ return memberList[0]!
1069
+ }
1070
+
1071
+ /**
1072
+ * Huan(202110):
1073
+ * - Q: why this method marked as `privated` before?
1074
+ * - A: it is for supporting the `memberAll()` API
1075
+ *
1076
+ * Get all room member from the room
1077
+ *
1078
+ * @returns {Promise<ContactInterface[]>}
1079
+ * @example
1080
+ * await room.memberList()
1081
+ */
1082
+ protected async memberList (): Promise<ContactInterface[]> {
1083
+ log.verbose('Room', 'memberList()')
1084
+
1085
+ const memberIdList = await this.wechaty.puppet.roomMemberList(this.id)
1086
+
1087
+ // if (!memberIdList) {
1088
+ // log.warn('Room', 'memberList() not ready')
1089
+ // return []
1090
+ // }
1091
+
1092
+ const contactListAll = await Promise.all(
1093
+ memberIdList.map(
1094
+ id => this.wechaty.Contact.find({ id }),
1095
+ ),
1096
+ )
1097
+
1098
+ const contactList = contactListAll.filter(c => !!c) as ContactInterface[]
1099
+ return contactList
1100
+ }
1101
+
1102
+ /**
1103
+ * Get room's owner from the room.
1104
+ * > Tips:
1105
+ * This function is depending on the Puppet Implementation, see [puppet-compatible-table](https://github.com/wechaty/wechaty/wiki/Puppet#3-puppet-compatible-table)
1106
+ * @returns {(ContactInterface | undefined)}
1107
+ * @example
1108
+ * const owner = room.owner()
1109
+ */
1110
+ owner (): undefined | ContactInterface {
1111
+ log.verbose('Room', 'owner()')
1112
+
1113
+ const ownerId = this.payload && this.payload.ownerId
1114
+ if (!ownerId) {
1115
+ return undefined
1116
+ }
1117
+
1118
+ const owner = (this.wechaty.Contact as typeof ContactImpl).load(ownerId)
1119
+ return owner
1120
+ }
1121
+
1122
+ /**
1123
+ * Get avatar from the room.
1124
+ * @returns {FileBox}
1125
+ * @example
1126
+ * const fileBox = await room.avatar()
1127
+ * const name = fileBox.name
1128
+ * fileBox.toFile(name)
1129
+ */
1130
+ async avatar (): Promise<FileBoxInterface> {
1131
+ log.verbose('Room', 'avatar()')
1132
+
1133
+ return this.wechaty.puppet.roomAvatar(this.id)
1134
+ }
1135
+
1136
+ }
1137
+
1138
+ class RoomImpl extends validationMixin(RoomMixin)<RoomImplInterface>() {}
1139
+ interface RoomImplInterface extends RoomImpl {}
1140
+
1141
+ type RoomProtectedProperty =
1142
+ | 'ready'
1143
+
1144
+ type RoomInterface = Omit<RoomImplInterface, RoomProtectedProperty>
1145
+
1146
+ type RoomConstructor = Constructor<
1147
+ RoomImplInterface,
1148
+ Omit<typeof RoomImpl, 'load'>
1149
+ >
1150
+
1151
+ export type {
1152
+ RoomConstructor,
1153
+ RoomProtectedProperty,
1154
+ RoomInterface,
1155
+ }
1156
+ export {
1157
+ RoomImpl,
1158
+ }