wechaty-puppet-padplus2 3.1.2

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 (182) hide show
  1. package/README.md +50 -0
  2. package/dist/cjs/cleanup.cjs +1 -0
  3. package/dist/cjs/config.cjs +1 -0
  4. package/dist/cjs/mock/cache-manager.cjs +1 -0
  5. package/dist/cjs/mock/events/event-friendship.cjs +1 -0
  6. package/dist/cjs/mock/events/event-message.cjs +1 -0
  7. package/dist/cjs/mock/events/event-room-invite.cjs +1 -0
  8. package/dist/cjs/mock/events/event-room-join.cjs +1 -0
  9. package/dist/cjs/mock/events/event-room-leave.cjs +1 -0
  10. package/dist/cjs/mock/events/event-room-topic.cjs +1 -0
  11. package/dist/cjs/mock/events/event.cjs +1 -0
  12. package/dist/cjs/mock/events/mod.cjs +1 -0
  13. package/dist/cjs/mock/messages/message-appmsg.cjs +1 -0
  14. package/dist/cjs/mock/messages/message-emotion.cjs +1 -0
  15. package/dist/cjs/mock/messages/message-miniprogram.cjs +1 -0
  16. package/dist/cjs/mock/messages/message-sysmsg.cjs +1 -0
  17. package/dist/cjs/mock/messages/sysmsg/message-pat.cjs +1 -0
  18. package/dist/cjs/mock/messages/sysmsg/message-revokemsg.cjs +1 -0
  19. package/dist/cjs/mock/messages/sysmsg/message-sysmsgtemplate.cjs +1 -0
  20. package/dist/cjs/mock/messages/sysmsg/message-todo.cjs +1 -0
  21. package/dist/cjs/mock/schema-mapper/contact.cjs +1 -0
  22. package/dist/cjs/mock/schema-mapper/message/message-parser-appmsg.cjs +1 -0
  23. package/dist/cjs/mock/schema-mapper/message/message-parser-refermsg.cjs +1 -0
  24. package/dist/cjs/mock/schema-mapper/message/message-parser-room.cjs +1 -0
  25. package/dist/cjs/mock/schema-mapper/message/message-parser-single-chat.cjs +1 -0
  26. package/dist/cjs/mock/schema-mapper/message/message-parser-sysmsg.cjs +1 -0
  27. package/dist/cjs/mock/schema-mapper/message/message-parser-type.cjs +1 -0
  28. package/dist/cjs/mock/schema-mapper/message/message-parser.cjs +1 -0
  29. package/dist/cjs/mock/schema-mapper/message/mod.cjs +1 -0
  30. package/dist/cjs/mock/schema-mapper/message.cjs +1 -0
  31. package/dist/cjs/mock/schema-mapper/room.cjs +1 -0
  32. package/dist/cjs/mock/types.cjs +1 -0
  33. package/dist/cjs/mock/utils/cached-promise.cjs +1 -0
  34. package/dist/cjs/mock/utils/is-type.cjs +1 -0
  35. package/dist/cjs/mock/utils/regex.cjs +1 -0
  36. package/dist/cjs/mock/utils/runner.cjs +1 -0
  37. package/dist/cjs/mock/utils/xml-to-json.cjs +1 -0
  38. package/dist/cjs/mod.cjs +1 -0
  39. package/dist/cjs/package-json.cjs +1 -0
  40. package/dist/cjs/puppet-plus.cjs +1 -0
  41. package/dist/cjs/server/cache-manager.cjs +1 -0
  42. package/dist/cjs/server/index.cjs +1 -0
  43. package/dist/cjs/server/map/AppMessageLink.cjs +1 -0
  44. package/dist/cjs/server/map/Label.cjs +1 -0
  45. package/dist/cjs/server/map/RoomMemberList.cjs +1 -0
  46. package/dist/cjs/server/map/contact.cjs +1 -0
  47. package/dist/cjs/server/map/index.cjs +1 -0
  48. package/dist/cjs/server/map/message.cjs +1 -0
  49. package/dist/cjs/server/map/response.cjs +1 -0
  50. package/dist/cjs/server/service/api/index3.cjs +1 -0
  51. package/dist/cjs/server/service/config/index.cjs +1 -0
  52. package/dist/cjs/server/service/index.cjs +1 -0
  53. package/dist/cjs/server/service/request/index.cjs +1 -0
  54. package/dist/cjs/server/service/utils/polling.cjs +1 -0
  55. package/dist/cjs/server/utils/PromiseUtils.cjs +1 -0
  56. package/dist/cjs/server/utils/SerialExecutor.cjs +1 -0
  57. package/dist/cjs/server/utils/Utils.cjs +1 -0
  58. package/dist/cjs/server/utils/xml-to-json.cjs +1 -0
  59. package/dist/esm/cleanup.js +26 -0
  60. package/dist/esm/config.js +9 -0
  61. package/dist/esm/mock/cache-manager.js +182 -0
  62. package/dist/esm/mock/events/event-friendship.js +59 -0
  63. package/dist/esm/mock/events/event-message.js +3 -0
  64. package/dist/esm/mock/events/event-room-invite.js +33 -0
  65. package/dist/esm/mock/events/event-room-join.js +105 -0
  66. package/dist/esm/mock/events/event-room-leave.js +83 -0
  67. package/dist/esm/mock/events/event-room-topic.js +50 -0
  68. package/dist/esm/mock/events/event.js +38 -0
  69. package/dist/esm/mock/events/mod.js +20 -0
  70. package/dist/esm/mock/messages/message-appmsg.js +41 -0
  71. package/dist/esm/mock/messages/message-emotion.js +24 -0
  72. package/dist/esm/mock/messages/message-miniprogram.js +18 -0
  73. package/dist/esm/mock/messages/message-sysmsg.js +50 -0
  74. package/dist/esm/mock/messages/sysmsg/message-pat.js +10 -0
  75. package/dist/esm/mock/messages/sysmsg/message-revokemsg.js +20 -0
  76. package/dist/esm/mock/messages/sysmsg/message-sysmsgtemplate.js +45 -0
  77. package/dist/esm/mock/messages/sysmsg/message-todo.js +15 -0
  78. package/dist/esm/mock/schema-mapper/contact.js +22 -0
  79. package/dist/esm/mock/schema-mapper/message/message-parser-appmsg.js +64 -0
  80. package/dist/esm/mock/schema-mapper/message/message-parser-refermsg.js +46 -0
  81. package/dist/esm/mock/schema-mapper/message/message-parser-room.js +33 -0
  82. package/dist/esm/mock/schema-mapper/message/message-parser-single-chat.js +4 -0
  83. package/dist/esm/mock/schema-mapper/message/message-parser-sysmsg.js +33 -0
  84. package/dist/esm/mock/schema-mapper/message/message-parser-type.js +31 -0
  85. package/dist/esm/mock/schema-mapper/message/message-parser.js +20 -0
  86. package/dist/esm/mock/schema-mapper/message/mod.js +19 -0
  87. package/dist/esm/mock/schema-mapper/message.js +21 -0
  88. package/dist/esm/mock/schema-mapper/room.js +30 -0
  89. package/dist/esm/mock/types.js +13 -0
  90. package/dist/esm/mock/utils/cached-promise.js +12 -0
  91. package/dist/esm/mock/utils/is-type.js +21 -0
  92. package/dist/esm/mock/utils/regex.js +11 -0
  93. package/dist/esm/mock/utils/runner.js +11 -0
  94. package/dist/esm/mock/utils/xml-to-json.js +14 -0
  95. package/dist/esm/mod.js +5 -0
  96. package/dist/esm/package-json.js +5 -0
  97. package/dist/esm/puppet-plus.js +829 -0
  98. package/dist/esm/server/cache-manager.js +77 -0
  99. package/dist/esm/server/index.js +19 -0
  100. package/dist/esm/server/map/AppMessageLink.js +58 -0
  101. package/dist/esm/server/map/Label.js +30 -0
  102. package/dist/esm/server/map/RoomMemberList.js +48 -0
  103. package/dist/esm/server/map/contact.js +192 -0
  104. package/dist/esm/server/map/index.js +7 -0
  105. package/dist/esm/server/map/message.js +107 -0
  106. package/dist/esm/server/map/response.js +78 -0
  107. package/dist/esm/server/service/api/index3.js +960 -0
  108. package/dist/esm/server/service/config/index.js +7 -0
  109. package/dist/esm/server/service/index.js +30 -0
  110. package/dist/esm/server/service/request/index.js +47 -0
  111. package/dist/esm/server/service/utils/polling.js +24 -0
  112. package/dist/esm/server/utils/PromiseUtils.js +19 -0
  113. package/dist/esm/server/utils/SerialExecutor.js +41 -0
  114. package/dist/esm/server/utils/Utils.js +7 -0
  115. package/dist/esm/server/utils/xml-to-json.js +18 -0
  116. package/dist/types/cleanup.d.ts +4 -0
  117. package/dist/types/config.d.ts +9 -0
  118. package/dist/types/mock/cache-manager.d.ts +55 -0
  119. package/dist/types/mock/events/event-friendship.d.ts +5 -0
  120. package/dist/types/mock/events/event-message.d.ts +5 -0
  121. package/dist/types/mock/events/event-room-invite.d.ts +5 -0
  122. package/dist/types/mock/events/event-room-join.d.ts +5 -0
  123. package/dist/types/mock/events/event-room-leave.d.ts +7 -0
  124. package/dist/types/mock/events/event-room-topic.d.ts +5 -0
  125. package/dist/types/mock/events/event.d.ts +28 -0
  126. package/dist/types/mock/events/mod.d.ts +4 -0
  127. package/dist/types/mock/messages/message-appmsg.d.ts +57 -0
  128. package/dist/types/mock/messages/message-emotion.d.ts +12 -0
  129. package/dist/types/mock/messages/message-miniprogram.d.ts +3 -0
  130. package/dist/types/mock/messages/message-sysmsg.d.ts +18 -0
  131. package/dist/types/mock/messages/sysmsg/message-pat.d.ts +14 -0
  132. package/dist/types/mock/messages/sysmsg/message-revokemsg.d.ts +19 -0
  133. package/dist/types/mock/messages/sysmsg/message-sysmsgtemplate.d.ts +60 -0
  134. package/dist/types/mock/messages/sysmsg/message-todo.d.ts +31 -0
  135. package/dist/types/mock/schema-mapper/contact.d.ts +4 -0
  136. package/dist/types/mock/schema-mapper/message/message-parser-appmsg.d.ts +4 -0
  137. package/dist/types/mock/schema-mapper/message/message-parser-refermsg.d.ts +4 -0
  138. package/dist/types/mock/schema-mapper/message/message-parser-room.d.ts +4 -0
  139. package/dist/types/mock/schema-mapper/message/message-parser-single-chat.d.ts +4 -0
  140. package/dist/types/mock/schema-mapper/message/message-parser-sysmsg.d.ts +4 -0
  141. package/dist/types/mock/schema-mapper/message/message-parser-type.d.ts +4 -0
  142. package/dist/types/mock/schema-mapper/message/message-parser.d.ts +12 -0
  143. package/dist/types/mock/schema-mapper/message/mod.d.ts +4 -0
  144. package/dist/types/mock/schema-mapper/message.d.ts +3 -0
  145. package/dist/types/mock/schema-mapper/room.d.ts +5 -0
  146. package/dist/types/mock/types.d.ts +35 -0
  147. package/dist/types/mock/utils/cached-promise.d.ts +5 -0
  148. package/dist/types/mock/utils/is-type.d.ts +9 -0
  149. package/dist/types/mock/utils/regex.d.ts +3 -0
  150. package/dist/types/mock/utils/runner.d.ts +3 -0
  151. package/dist/types/mock/utils/xml-to-json.d.ts +2 -0
  152. package/dist/types/mod.d.ts +6 -0
  153. package/dist/types/package-json.d.ts +4 -0
  154. package/dist/types/puppet-plus.d.ts +102 -0
  155. package/dist/types/server/cache-manager.d.ts +22 -0
  156. package/dist/types/server/index.d.ts +15 -0
  157. package/dist/types/server/map/AppMessageLink.d.ts +31 -0
  158. package/dist/types/server/map/Label.d.ts +17 -0
  159. package/dist/types/server/map/RoomMemberList.d.ts +31 -0
  160. package/dist/types/server/map/contact.d.ts +113 -0
  161. package/dist/types/server/map/index.d.ts +13 -0
  162. package/dist/types/server/map/message.d.ts +68 -0
  163. package/dist/types/server/map/response.d.ts +45 -0
  164. package/dist/types/server/server.d.ts +6 -0
  165. package/dist/types/server/service/api/index.d.ts +78 -0
  166. package/dist/types/server/service/api/index2.d.ts +72 -0
  167. package/dist/types/server/service/api/index3.d.ts +78 -0
  168. package/dist/types/server/service/api/index_c.d.ts +71 -0
  169. package/dist/types/server/service/api/ws.d.ts +2 -0
  170. package/dist/types/server/service/config/index.d.ts +6 -0
  171. package/dist/types/server/service/index.d.ts +8 -0
  172. package/dist/types/server/service/request/index.d.ts +14 -0
  173. package/dist/types/server/service/request/type.d.ts +11 -0
  174. package/dist/types/server/service/utils/polling.d.ts +8 -0
  175. package/dist/types/server/utils/PromiseUtils.d.ts +13 -0
  176. package/dist/types/server/utils/SerialExecutor.d.ts +10 -0
  177. package/dist/types/server/utils/Utils.d.ts +3 -0
  178. package/dist/types/server/utils/diff.d.ts +35 -0
  179. package/dist/types/server/utils/polling.d.ts +7 -0
  180. package/dist/types/server/utils/token.d.ts +11 -0
  181. package/dist/types/server/utils/xml-to-json.d.ts +3 -0
  182. package/package.json +123 -0
@@ -0,0 +1,182 @@
1
+ import e from "fs-extra";
2
+
3
+ import t from "os";
4
+
5
+ import a from "path";
6
+
7
+ import { LRUCache as s } from "lru-cache";
8
+
9
+ import { log as o } from "wechaty-puppet";
10
+
11
+ import { FlashStore as c } from "flash-store";
12
+
13
+ const i = "[CacheManager]";
14
+
15
+ class CacheManager {
16
+ _userName;
17
+ _messageCache;
18
+ _messageRevokeCache;
19
+ _contactCache;
20
+ _contactSearchCache;
21
+ _contactStrangerAliasCache;
22
+ _roomCache;
23
+ _roomMemberCache;
24
+ _roomInvitationCache;
25
+ _friendshipCache;
26
+ _labelList;
27
+ constructor(e) {
28
+ this._userName = e;
29
+ }
30
+ async init() {
31
+ if (this._messageCache) {
32
+ throw new Error("already initialized");
33
+ }
34
+ const n = a.join(t.homedir(), a.sep, ".wechaty", "puppet-padplus-cache", a.sep, this._userName, a.sep);
35
+ await e.pathExists(n) || await e.mkdirp(n), this._messageCache = new s({
36
+ dispose(e, t) {
37
+ o.silly(i, "constructor() lruOptions.dispose(%s, %s)", e, JSON.stringify(t));
38
+ },
39
+ max: 1e3,
40
+ ttl: 36e5
41
+ }), this._messageRevokeCache = new s({
42
+ dispose(e, t) {
43
+ o.silly(i, "constructor() lruOptions.dispose(%s, %s)", e, JSON.stringify(t));
44
+ },
45
+ max: 1e3,
46
+ ttl: 36e5
47
+ }), this._contactCache = new c(a.join(n, "contact-raw-payload")), this._contactSearchCache = new s({
48
+ dispose(e, t) {
49
+ o.silly(i, "constructor() lruOptions.dispose(%s, %s)", e, JSON.stringify(t));
50
+ },
51
+ max: 1e3,
52
+ ttl: 36e5
53
+ }), this._contactStrangerAliasCache = new c(a.join(n, "contact-stranger-alias")),
54
+ this._roomCache = new c(a.join(n, "room-raw-payload")), this._roomMemberCache = new c(a.join(n, "room-member-raw-payload")),
55
+ this._roomInvitationCache = new c(a.join(n, "room-invitation-raw-payload")), this._friendshipCache = new c(a.join(n, "friendship-raw-payload"));
56
+ const h = await this._contactCache.size;
57
+ o.silly(i, `initCache() inited ${h} Contacts, cachedir="${n}"`);
58
+ }
59
+ async close() {
60
+ o.silly(i, "close()"), this._contactCache && this._contactStrangerAliasCache && this._roomMemberCache && this._roomCache && this._friendshipCache && this._roomInvitationCache && this._messageCache ? (o.silly(i, "close() closing caches ..."),
61
+ await Promise.all([ this._contactCache.close(), this._contactStrangerAliasCache.close(), this._roomMemberCache.close(), this._roomCache.close(), this._friendshipCache.close(), this._roomInvitationCache.close() ]),
62
+ this._contactCache = void 0, this._contactStrangerAliasCache = void 0, this._roomMemberCache = void 0,
63
+ this._roomCache = void 0, this._friendshipCache = void 0, this._roomInvitationCache = void 0,
64
+ this._messageCache = void 0, o.silly(i, "close() cache closed.")) : o.silly(i, "close() cache not exist.");
65
+ }
66
+ async getMessage(e) {
67
+ return this._messageCache.get(e);
68
+ }
69
+ async setMessage(e, t) {
70
+ await this._messageCache.set(e, t);
71
+ }
72
+ async hasMessage(e) {
73
+ return this._messageCache.has(e);
74
+ }
75
+ async getMessageRevokeInfo(e) {
76
+ return this._messageRevokeCache.get(e);
77
+ }
78
+ async setMessageRevokeInfo(e, t) {
79
+ await this._messageRevokeCache.set(e, t);
80
+ }
81
+ async getContact(e) {
82
+ return this._contactCache.get(e);
83
+ }
84
+ async setContact(e, t) {
85
+ await this._contactCache.set(e, t);
86
+ }
87
+ async deleteContact(e) {
88
+ await this._contactCache.delete(e);
89
+ }
90
+ async getContactIds() {
91
+ const e = [];
92
+ for await (const t of this._contactCache.keys()) {
93
+ e.push(t);
94
+ }
95
+ return e;
96
+ }
97
+ async getAllContacts() {
98
+ const e = [];
99
+ for await (const t of this._contactCache.values()) {
100
+ e.push(t);
101
+ }
102
+ return e;
103
+ }
104
+ async hasContact(e) {
105
+ return this._contactCache.has(e);
106
+ }
107
+ async getContactCount() {
108
+ return this._contactCache.size;
109
+ }
110
+ async getContactSearch(e) {
111
+ return this._contactSearchCache.get(e);
112
+ }
113
+ async setContactSearch(e, t) {
114
+ await this._contactSearchCache.set(e, t);
115
+ }
116
+ async hasContactSearch(e) {
117
+ return this._contactSearchCache.has(e);
118
+ }
119
+ async getContactStrangerAlias(e) {
120
+ return this._contactStrangerAliasCache.get(e);
121
+ }
122
+ async setContactStrangerAlias(e, t) {
123
+ await this._contactStrangerAliasCache.set(e, t);
124
+ }
125
+ async deleteContactStrangerAlias(e) {
126
+ await this._contactStrangerAliasCache.delete(e);
127
+ }
128
+ async getRoom(e) {
129
+ return this._roomCache.get(e);
130
+ }
131
+ async setRoom(e, t) {
132
+ await this._roomCache.set(e, t);
133
+ }
134
+ async deleteRoom(e) {
135
+ await this._roomCache.delete(e);
136
+ }
137
+ async getRoomIds() {
138
+ const e = [];
139
+ for await (const t of this._roomCache.keys()) {
140
+ e.push(t);
141
+ }
142
+ return e;
143
+ }
144
+ async getRoomCount() {
145
+ return this._roomCache.size;
146
+ }
147
+ async hasRoom(e) {
148
+ return this._roomCache.has(e);
149
+ }
150
+ async getRoomMember(e) {
151
+ return this._roomMemberCache.get(e);
152
+ }
153
+ async setRoomMember(e, t) {
154
+ await this._roomMemberCache.set(e, t);
155
+ }
156
+ async deleteRoomMember(e) {
157
+ await this._roomMemberCache.delete(e);
158
+ }
159
+ async getRoomInvitation(e) {
160
+ return this._roomInvitationCache.get(e);
161
+ }
162
+ async setRoomInvitation(e, t) {
163
+ await this._roomInvitationCache.set(e, t);
164
+ }
165
+ async deleteRoomInvitation(e) {
166
+ await this._roomInvitationCache.delete(e);
167
+ }
168
+ async getFriendshipRawPayload(e) {
169
+ return this._friendshipCache.get(e);
170
+ }
171
+ async setFriendshipRawPayload(e, t) {
172
+ await this._friendshipCache.set(e, t);
173
+ }
174
+ getLabelList() {
175
+ return this._labelList;
176
+ }
177
+ setLabelList(e) {
178
+ this._labelList = e;
179
+ }
180
+ }
181
+
182
+ export { CacheManager };
@@ -0,0 +1,59 @@
1
+ import * as e from "wechaty-puppet";
2
+
3
+ import { isContactId as t, isIMContactId as r } from "../utils/is-type.js";
4
+
5
+ import { xmlToJson as s } from "../utils/xml-to-json.js";
6
+
7
+ import { WechatMessageType as a } from "../types.js";
8
+
9
+ const n = [ /^You have added (.+) as your WeChat contact. Start chatting!$/, /^你已添加了(.+),现在可以开始聊天了。$/, /I've accepted your friend request. Now let's chat!$/, /^(.+) just added you to his\/her contacts list. Send a message to him\/her now!$/, /^(.+)刚刚把你添加到通讯录,现在可以开始聊天了。$/, /^我通过了你的朋友验证请求,现在我们可以开始聊天了$/ ], m = [ /^(.+) has enabled Friend Confirmation/, /^(.+)开启了朋友验证,你还不是他(她)朋友。请先发送朋友验证请求,对方验证通过后,才能聊天。/ ], i = async (i, message) => {
10
+ if ((message => n.some((e => !!message.content.match(e))))(message)) {
11
+ return {
12
+ contactId: message.fromusername,
13
+ id: message.id,
14
+ timestamp: message.createtime,
15
+ type: e.types.Friendship.Confirm
16
+ };
17
+ }
18
+ if ((message => m.some((e => !!message.content.match(e))))(message)) {
19
+ return {
20
+ contactId: message.fromusername,
21
+ id: message.id,
22
+ timestamp: message.createtime,
23
+ type: e.types.Friendship.Verify
24
+ };
25
+ }
26
+ {
27
+ const n = await (async message => {
28
+ if (message.type !== a.VerifyMsg && message.type !== a.VerifyMsgEnterprise) {
29
+ return null;
30
+ }
31
+ try {
32
+ const e = await s(message.content), a = e.msg.$.fromusername;
33
+ if (t(a) && e.msg.$.encryptusername) {
34
+ return e;
35
+ }
36
+ if (r(a)) {
37
+ return e;
38
+ }
39
+ } catch (e) {}
40
+ return null;
41
+ })(message);
42
+ return n ? {
43
+ contactId: n.msg.$.fromusername,
44
+ hello: n.msg.$.content,
45
+ id: message.id,
46
+ scene: parseInt(n.msg.$.scene, 10),
47
+ shareCardContactId: n.msg.$.sharecardusername,
48
+ shareCardNickName: n.msg.$.sharecardnickname,
49
+ sourceContactId: n.msg.$.sourceusername,
50
+ sourceNickName: n.msg.$.sourcenickname,
51
+ stranger: n.msg.$.encryptusername,
52
+ ticket: n.msg.$.ticket,
53
+ timestamp: message.createtime,
54
+ type: e.types.Friendship.Receive
55
+ } : null;
56
+ }
57
+ };
58
+
59
+ export { i as default };
@@ -0,0 +1,3 @@
1
+ const a = async (a, message) => message;
2
+
3
+ export { a as default };
@@ -0,0 +1,33 @@
1
+ import { parseAppmsgMessagePayload as t, AppMessageType as e } from "../messages/message-appmsg.js";
2
+
3
+ const n = [ /邀请你加入群聊/ ], r = [ /Group Chat Invitation/ ], i = [ /^"(.+)"邀请你加入群聊(.*),进入可查看详情。/ ], l = [ /"(.+)" invited you to join the group chat "(.+)"\. Enter to view details\./ ], a = async (a, message) => {
4
+ let m;
5
+ try {
6
+ m = await t(message.content);
7
+ } catch (t) {
8
+ return null;
9
+ }
10
+ if (m.type !== e.Url) {
11
+ return null;
12
+ }
13
+ if (!m.title || !m.des) {
14
+ return null;
15
+ }
16
+ let s = null, o = null, u = null, c = null;
17
+ r.some((t => !!(s = m.title.match(t)))), n.some((t => !!(o = m.title.match(t)))),
18
+ l.some((t => !!(u = m.des.match(t)))), i.some((t => !!(c = m.des.match(t))));
19
+ const d = u || c;
20
+ return !!(s || o) && !!d ? {
21
+ avatar: m.thumburl,
22
+ id: message.id,
23
+ invitation: m.url,
24
+ inviterId: message.fromusername,
25
+ memberCount: 0,
26
+ memberIdList: [],
27
+ receiverId: message.tousername,
28
+ timestamp: message.createtime,
29
+ topic: d[2]
30
+ } : null;
31
+ };
32
+
33
+ export { a as default };
@@ -0,0 +1,105 @@
1
+ import { isRoomId as e } from "../utils/is-type.js";
2
+
3
+ import { removeRoomLeaveDebounce as t } from "./event-room-leave.js";
4
+
5
+ import { parseSysmsgSysmsgTemplateMessagePayload as r } from "../messages/message-sysmsg.js";
6
+
7
+ import { WechatMessageType as i } from "../types.js";
8
+
9
+ import { parseTextWithRegexList as a } from "../utils/regex.js";
10
+
11
+ import { createSysmsgTemplateRunner as s } from "../messages/sysmsg/message-sysmsgtemplate.js";
12
+
13
+ import { executeRunners as o } from "../utils/runner.js";
14
+
15
+ const n = [ /^你邀请"(.+)"加入了群聊 {2}\$revoke\$/, /^You invited (.+) to the group chat/ ], m = [ /^"([^"]+?)"邀请你加入了群聊,群聊参与人还有:(.+)/, /^(.+) invited you to a group chat with (.+)/ ], c = [ /^"([^"]+?)"邀请你和"(.+?)"加入了群聊/, /^(.+?) invited you and (.+?) to (the|a) group chat/ ], d = [ /^"(.+)"邀请"(.+)"加入了群聊/, /^(.+?) invited (.+?) to (the|a) group chat/ ], u = [ /^" ?(.+)"通过扫描你分享的二维码加入群聊/, /^" ?(.+)" joined group chat via the QR code you shared/ ], p = [ /^" (.+)"通过扫描"(.+)"分享的二维码加入群聊/, /^"(.+)" joined the group chat via the QR Code shared by "(.+)"/ ], I = [ /^(.*?)通过(.+)加入群聊/, /^(.*?) joined the group chat through (.+)/ ], y = async (puppet, message) => {
16
+ const y = message.fromusername;
17
+ if (!e(y)) {
18
+ return null;
19
+ }
20
+ const l = message.createtime, h = await r(message);
21
+ if (!h && 1e4 !== message.type) {
22
+ return null;
23
+ }
24
+ let v = null;
25
+ if (h) {
26
+ const e = s(h, [ ...n, ...u ], (async e => ({
27
+ inviteeIdList: e[0].payload.map((e => e.userName)).filter((e => !!e)),
28
+ inviterId: puppet.currentUserId,
29
+ roomId: y,
30
+ timestamp: l
31
+ }))), r = s(h, m, (async e => {
32
+ const t = e[0].payload;
33
+ return {
34
+ inviteeIdList: [ puppet.currentUserId ],
35
+ inviterId: t[0].userName,
36
+ roomId: y,
37
+ timestamp: l
38
+ };
39
+ })), i = s(h, [ ...c, ...d ], (async (e, t) => {
40
+ const r = e[0].payload, i = e[1].payload.map((e => e.userName)).filter((e => !!e));
41
+ return t < c.length && i.unshift(puppet.currentUserId), {
42
+ inviteeIdList: i,
43
+ inviterId: r[0].userName,
44
+ roomId: y,
45
+ timestamp: l
46
+ };
47
+ })), a = s(h, p, (async e => ({
48
+ inviteeIdList: e[0].payload.map((e => e.userName)).filter((e => !!e)),
49
+ inviterId: e[1].payload[0].userName,
50
+ roomId: y,
51
+ timestamp: l
52
+ }))), f = s(h, I, (async e => ({
53
+ inviteeIdList: e[0].payload.map((e => e.userName)).filter((e => !!e)),
54
+ inviterId: puppet.currentUserId,
55
+ roomId: y,
56
+ timestamp: l
57
+ })));
58
+ v = await o([ e, r, i, a, f ]), v && v.inviteeIdList.forEach((e => {
59
+ t(v.roomId, e);
60
+ }));
61
+ } else {
62
+ if (message.type !== i.Sys) {
63
+ return null;
64
+ }
65
+ const e = async () => a(message.content, [ ...n, ...u ], (async (e, t) => {
66
+ t[1];
67
+ const r = t[2];
68
+ return {
69
+ inviteeIdList: [ (await puppet.roomMemberSearch(y, r))[0] ],
70
+ inviterId: puppet.currentUserId,
71
+ roomId: y,
72
+ timestamp: message.createtime
73
+ };
74
+ })), t = async () => a(message.content, m, (async (e, t) => {
75
+ const r = t[1], i = (await puppet.roomMemberSearch(y, r))[0];
76
+ return {
77
+ inviteeIdList: [ puppet.currentUserId ],
78
+ inviterId: i,
79
+ roomId: y,
80
+ timestamp: message.createtime
81
+ };
82
+ })), r = async () => a(message.content, [ ...c, ...d ], (async (e, t) => {
83
+ const r = t[1], i = await Promise.all(t[2].split("、").map((async e => (await puppet.roomMemberSearch(y, e))[0])));
84
+ e < c.length && i.unshift(puppet.currentUserId);
85
+ return {
86
+ inviteeIdList: i,
87
+ inviterId: (await puppet.roomMemberSearch(y, r))[0],
88
+ roomId: y,
89
+ timestamp: message.createtime
90
+ };
91
+ })), s = async () => a(message.content, p, (async (e, t) => {
92
+ const r = t[1], i = t[2], a = (await puppet.roomMemberSearch(y, r))[0];
93
+ return {
94
+ inviteeIdList: [ (await puppet.roomMemberSearch(y, i))[0] ],
95
+ inviterId: a,
96
+ roomId: y,
97
+ timestamp: message.createtime
98
+ };
99
+ }));
100
+ v = await o([ e, t, r, s ]);
101
+ }
102
+ return v;
103
+ };
104
+
105
+ export { y as default };
@@ -0,0 +1,83 @@
1
+ import { isRoomId as e } from "../utils/is-type.js";
2
+
3
+ import { parseSysmsgSysmsgTemplateMessagePayload as t } from "../messages/message-sysmsg.js";
4
+
5
+ import { parseSysmsgTemplate as r } from "../messages/sysmsg/message-sysmsgtemplate.js";
6
+
7
+ import { WechatMessageType as s } from "../types.js";
8
+
9
+ import { executeRunners as o } from "../utils/runner.js";
10
+
11
+ const m = [ /^(你)将"(.+)"移出了群聊/, /^(You) removed "(.+)" from the group chat/ ], n = [ /^(你)被"([^"]+?)"移出群聊/, /^(You) were removed from the group chat by "([^"]+)"/ ], a = new Map;
12
+
13
+ function u(e, t) {
14
+ return `${e}:${t}`;
15
+ }
16
+
17
+ function c(e, t) {
18
+ const r = u(e, t);
19
+ a.delete(r);
20
+ }
21
+
22
+ function i(e, t) {
23
+ const r = u(e, t);
24
+ return void 0 !== a.get(r);
25
+ }
26
+
27
+ const l = async (puppet, message) => {
28
+ const c = message.fromusername;
29
+ if (!e(c)) {
30
+ return null;
31
+ }
32
+ const i = await o([ async () => {
33
+ const e = await t(message);
34
+ return e ? await r(e, m, (async e => ({
35
+ removeeIdList: e[0].payload.map((e => e.userName)).filter((e => !!e)),
36
+ removerId: puppet.currentUserId,
37
+ roomId: c,
38
+ timestamp: message.createtime
39
+ }))) : null;
40
+ }, async () => {
41
+ if (message.type !== s.Sys) {
42
+ return null;
43
+ }
44
+ let e = null;
45
+ if (n.some((t => !!(e = message.content.match(t)))), e) {
46
+ const t = e[2], r = (await puppet.roomMemberSearch(c, t))[0];
47
+ return {
48
+ removeeIdList: [ puppet.currentUserId ],
49
+ removerId: r,
50
+ roomId: c,
51
+ timestamp: message.createtime
52
+ };
53
+ }
54
+ return null;
55
+ }, async () => {
56
+ if (message.type !== s.Sys) {
57
+ return null;
58
+ }
59
+ let e = null;
60
+ if (m.some((t => !!(e = message.content.match(t)))), e) {
61
+ const t = e[2];
62
+ return {
63
+ removeeIdList: [ (await puppet.roomMemberSearch(c, t))[0] ],
64
+ removerId: puppet.currentUserId,
65
+ roomId: c,
66
+ timestamp: message.createtime
67
+ };
68
+ }
69
+ return null;
70
+ } ]);
71
+ return i && i.removeeIdList.forEach((e => {
72
+ !function(e, t) {
73
+ const r = u(e, t), s = a.get(r);
74
+ s && clearTimeout(s);
75
+ const o = setTimeout((() => {
76
+ a.delete(r);
77
+ }), 36e5);
78
+ a.set(r, o);
79
+ }(c, e);
80
+ })), i;
81
+ };
82
+
83
+ export { l as default, i as isRoomLeaveDebouncing, c as removeRoomLeaveDebounce };
@@ -0,0 +1,50 @@
1
+ import { isRoomId as e } from "../utils/is-type.js";
2
+
3
+ import { parseSysmsgSysmsgTemplateMessagePayload as s } from "../messages/message-sysmsg.js";
4
+
5
+ import { parseSysmsgTemplate as n } from "../messages/sysmsg/message-sysmsgtemplate.js";
6
+
7
+ import { parseTextWithRegexList as t } from "../utils/regex.js";
8
+
9
+ import { WechatMessageType as r } from "../types.js";
10
+
11
+ import { executeRunners as o } from "../utils/runner.js";
12
+
13
+ const a = [ /^"(.+)"修改群名为“(.+)”$/, /^"(.+)" changed the group name to "(.+)"$/ ], c = [ /^(你)修改群名为“(.+)”$/, /^(You) changed the group name to "(.+)"$/ ], m = async (puppet, message) => {
14
+ const m = message.fromusername;
15
+ if (!e(m)) {
16
+ return null;
17
+ }
18
+ const i = await o([ async () => message.type !== r.Sys ? null : t(message.content, c, (async (e, s) => {
19
+ const n = s[2];
20
+ return {
21
+ changerId: puppet.currentUserId,
22
+ newTopic: n
23
+ };
24
+ })), async () => {
25
+ const e = await s(message);
26
+ return e ? n(e, a, (async e => ({
27
+ changerId: e[0].payload[0].userName,
28
+ newTopic: e[1].payload[0].nickName
29
+ }))) : null;
30
+ }, async () => message.type !== r.Sys ? null : t(message.content, a, (async (e, s) => {
31
+ const n = s[2], t = s[1];
32
+ return {
33
+ changerId: (await puppet.roomMemberSearch(m, t))[0],
34
+ newTopic: n
35
+ };
36
+ })) ]);
37
+ if (i) {
38
+ const e = (await puppet.roomPayload(m)).topic;
39
+ return {
40
+ changerId: i.changerId,
41
+ newTopic: i.newTopic,
42
+ oldTopic: e,
43
+ roomId: m,
44
+ timestamp: message.createtime
45
+ };
46
+ }
47
+ return null;
48
+ };
49
+
50
+ export { m as default };
@@ -0,0 +1,38 @@
1
+ import { log as o } from "wechaty-puppet";
2
+
3
+ var e, t;
4
+
5
+ (t = e || (e = {}))[t.Message = 0] = "Message", t[t.Friendship = 1] = "Friendship",
6
+ t[t.RoomInvite = 2] = "RoomInvite", t[t.RoomJoin = 3] = "RoomJoin", t[t.RoomLeave = 4] = "RoomLeave",
7
+ t[t.RoomTopic = 5] = "RoomTopic";
8
+
9
+ const r = [];
10
+
11
+ function a(o, e) {
12
+ r.push({
13
+ handler: e,
14
+ type: o
15
+ });
16
+ }
17
+
18
+ async function n(puppet, message) {
19
+ for (const e of r) {
20
+ try {
21
+ const o = await e.handler(puppet, message);
22
+ if (o) {
23
+ return {
24
+ payload: o,
25
+ type: e.type
26
+ };
27
+ }
28
+ } catch (e) {
29
+ o.error("[Event]", `parse message error: ${e.stack}`);
30
+ }
31
+ }
32
+ return {
33
+ payload: message,
34
+ type: e.Message
35
+ };
36
+ }
37
+
38
+ export { e as EventType, a as addEventParser, n as parseEvent };
@@ -0,0 +1,20 @@
1
+ import o from "./event-friendship.js";
2
+
3
+ import e from "./event-room-invite.js";
4
+
5
+ import m from "./event-room-join.js";
6
+
7
+ import r from "./event-room-leave.js";
8
+
9
+ import t from "./event-room-topic.js";
10
+
11
+ import i from "./event-message.js";
12
+
13
+ import { addEventParser as n, EventType as s } from "./event.js";
14
+
15
+ import { parseEvent as p } from "./event.js";
16
+
17
+ n(s.Friendship, o), n(s.RoomInvite, e), n(s.RoomJoin, m), n(s.RoomLeave, r), n(s.RoomTopic, t),
18
+ n(s.Message, i);
19
+
20
+ export { s as EventType, p as parseEvent };
@@ -0,0 +1,41 @@
1
+ import { xmlToJson as e } from "../utils/xml-to-json.js";
2
+
3
+ var t, r;
4
+
5
+ async function a(t) {
6
+ const r = await e(t), {title: a, des: o, url: i, thumburl: n, type: m, md5: s, recorditem: c} = r.msg.appmsg;
7
+ let l;
8
+ const d = r.msg.appmsg.appattach;
9
+ return d && (l = {
10
+ aeskey: d.aeskey,
11
+ attachid: d.attachid,
12
+ cdnattachurl: d.cdnattachurl,
13
+ cdnthumbaeskey: d.cdnthumbaeskey,
14
+ emoticonmd5: d.emoticonmd5,
15
+ encryver: d.encryver && parseInt(d.encryver, 10) || 0,
16
+ fileext: d.fileext,
17
+ islargefilemsg: d.islargefilemsg && parseInt(d.islargefilemsg, 10) || 0,
18
+ totallen: d.totallen && parseInt(d.totallen, 10) || 0
19
+ }), {
20
+ appattach: l,
21
+ des: o,
22
+ md5: s,
23
+ recorditem: c,
24
+ refermsg: r.msg.appmsg.refermsg,
25
+ thumburl: n,
26
+ title: a,
27
+ type: parseInt(m, 10),
28
+ url: i
29
+ };
30
+ }
31
+
32
+ (r = t || (t = {}))[r.Text = 1] = "Text", r[r.Img = 2] = "Img", r[r.Audio = 3] = "Audio",
33
+ r[r.Video = 4] = "Video", r[r.Url = 5] = "Url", r[r.Attach = 6] = "Attach", r[r.Open = 7] = "Open",
34
+ r[r.Emoji = 8] = "Emoji", r[r.VoiceRemind = 9] = "VoiceRemind", r[r.ScanGood = 10] = "ScanGood",
35
+ r[r.Good = 13] = "Good", r[r.Emotion = 15] = "Emotion", r[r.CardTicket = 16] = "CardTicket",
36
+ r[r.RealtimeShareLocation = 17] = "RealtimeShareLocation", r[r.ChatHistory = 19] = "ChatHistory",
37
+ r[r.MiniProgram = 33] = "MiniProgram", r[r.MiniProgramApp = 36] = "MiniProgramApp",
38
+ r[r.GroupNote = 53] = "GroupNote", r[r.ReferMsg = 57] = "ReferMsg", r[r.Transfers = 2e3] = "Transfers",
39
+ r[r.RedEnvelopes = 2001] = "RedEnvelopes", r[r.ReaderType = 100001] = "ReaderType";
40
+
41
+ export { t as AppMessageType, a as parseAppmsgMessagePayload };
@@ -0,0 +1,24 @@
1
+ import { xmlToJson as e } from "../utils/xml-to-json.js";
2
+
3
+ async function t(message) {
4
+ const t = await e(message.content), m = parseInt(t.msg.emoji.$.len, 10) || 0, n = parseInt(t.msg.emoji.$.width, 10) || 0, s = parseInt(t.msg.emoji.$.height, 10) || 0, g = t.msg.emoji.$.cdnurl, o = parseInt(t.msg.emoji.$.type, 10) || 0, i = t.msg.emoji.$.md5;
5
+ let r;
6
+ if (t.msg.gameext) {
7
+ r = `<gameext type="${parseInt(t.msg.gameext.$.type, 10) || 0}" content="${parseInt(t.msg.gameext.$.content, 10) || 0}" ></gameext>`;
8
+ }
9
+ return {
10
+ cdnurl: g,
11
+ gameext: r,
12
+ height: s,
13
+ len: m,
14
+ md5: i,
15
+ type: o,
16
+ width: n
17
+ };
18
+ }
19
+
20
+ function m(e) {
21
+ return `<msg><emoji cdnurl="${e.cdnurl}" len="${e.len}" md5="${e.md5}" type="${e.type}"/>${e.gameext || ""}</msg>`;
22
+ }
23
+
24
+ export { m as generateEmotionPayload, t as parseEmotionMessagePayload };
@@ -0,0 +1,18 @@
1
+ import { xmlToJson as t } from "../utils/xml-to-json.js";
2
+
3
+ async function a(a) {
4
+ const e = (await t(a.content)).msg.appmsg, p = e.weappinfo, n = e.appattach;
5
+ return {
6
+ appid: p.appid,
7
+ description: e.sourcedisplayname,
8
+ iconUrl: p.weappiconurl,
9
+ pagePath: p.pagepath,
10
+ shareId: p.shareId,
11
+ thumbKey: n.cdnthumbaeskey,
12
+ thumbUrl: n.cdnthumburl,
13
+ title: e.title,
14
+ username: p.username
15
+ };
16
+ }
17
+
18
+ export { a as parseMiniProgramMessagePayload };