wechaty-puppet-matrix 0.0.35 → 0.0.37

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 (69) hide show
  1. package/dist/cjs/src/engine-schema.d.ts +1 -0
  2. package/dist/cjs/src/engine-schema.d.ts.map +1 -1
  3. package/dist/cjs/src/matrix/events/event-room-join-no-xml.d.ts +8 -0
  4. package/dist/cjs/src/matrix/events/event-room-join-no-xml.d.ts.map +1 -0
  5. package/dist/cjs/src/matrix/events/event-room-join-no-xml.js +125 -0
  6. package/dist/cjs/src/matrix/events/event-room-join.d.ts.map +1 -1
  7. package/dist/cjs/src/matrix/events/event-room-join.js +1 -0
  8. package/dist/cjs/src/matrix/events/event-room-leave.d.ts.map +1 -1
  9. package/dist/cjs/src/matrix/events/event-room-leave.js +3 -3
  10. package/dist/cjs/src/matrix/events/event-room-topic.d.ts.map +1 -1
  11. package/dist/cjs/src/matrix/events/event-room-topic.js +1 -1
  12. package/dist/cjs/src/matrix/events/mod.d.ts.map +1 -1
  13. package/dist/cjs/src/matrix/events/mod.js +2 -0
  14. package/dist/cjs/src/matrix/messages/sysmsg/message-revokemsg.d.ts.map +1 -1
  15. package/dist/cjs/src/matrix/messages/sysmsg/message-revokemsg.js +2 -4
  16. package/dist/cjs/src/matrix/schema-mapper/contact.js +1 -1
  17. package/dist/cjs/src/matrix/service/request.d.ts +17 -4
  18. package/dist/cjs/src/matrix/service/request.d.ts.map +1 -1
  19. package/dist/cjs/src/matrix/service/request.js +45 -72
  20. package/dist/cjs/src/matrix/utils/is-type.d.ts +8 -0
  21. package/dist/cjs/src/matrix/utils/is-type.d.ts.map +1 -1
  22. package/dist/cjs/src/matrix/utils/is-type.js +25 -0
  23. package/dist/cjs/src/puppet-matrix.d.ts +3 -1
  24. package/dist/cjs/src/puppet-matrix.d.ts.map +1 -1
  25. package/dist/cjs/src/puppet-matrix.js +51 -19
  26. package/dist/cjs/src/utils/normalize-filebox.d.ts +1 -3
  27. package/dist/cjs/src/utils/normalize-filebox.d.ts.map +1 -1
  28. package/dist/cjs/src/utils/normalize-filebox.js +1 -17
  29. package/dist/esm/src/engine-schema.d.ts +1 -0
  30. package/dist/esm/src/engine-schema.d.ts.map +1 -1
  31. package/dist/esm/src/matrix/events/event-room-join-no-xml.d.ts +8 -0
  32. package/dist/esm/src/matrix/events/event-room-join-no-xml.d.ts.map +1 -0
  33. package/dist/esm/src/matrix/events/event-room-join-no-xml.js +122 -0
  34. package/dist/esm/src/matrix/events/event-room-join.d.ts.map +1 -1
  35. package/dist/esm/src/matrix/events/event-room-join.js +1 -0
  36. package/dist/esm/src/matrix/events/event-room-leave.d.ts.map +1 -1
  37. package/dist/esm/src/matrix/events/event-room-leave.js +3 -3
  38. package/dist/esm/src/matrix/events/event-room-topic.d.ts.map +1 -1
  39. package/dist/esm/src/matrix/events/event-room-topic.js +1 -1
  40. package/dist/esm/src/matrix/events/mod.d.ts.map +1 -1
  41. package/dist/esm/src/matrix/events/mod.js +2 -0
  42. package/dist/esm/src/matrix/messages/sysmsg/message-revokemsg.d.ts.map +1 -1
  43. package/dist/esm/src/matrix/messages/sysmsg/message-revokemsg.js +2 -4
  44. package/dist/esm/src/matrix/schema-mapper/contact.js +1 -1
  45. package/dist/esm/src/matrix/service/request.d.ts +17 -4
  46. package/dist/esm/src/matrix/service/request.d.ts.map +1 -1
  47. package/dist/esm/src/matrix/service/request.js +46 -73
  48. package/dist/esm/src/matrix/utils/is-type.d.ts +8 -0
  49. package/dist/esm/src/matrix/utils/is-type.d.ts.map +1 -1
  50. package/dist/esm/src/matrix/utils/is-type.js +23 -0
  51. package/dist/esm/src/puppet-matrix.d.ts +3 -1
  52. package/dist/esm/src/puppet-matrix.d.ts.map +1 -1
  53. package/dist/esm/src/puppet-matrix.js +52 -20
  54. package/dist/esm/src/utils/normalize-filebox.d.ts +1 -3
  55. package/dist/esm/src/utils/normalize-filebox.d.ts.map +1 -1
  56. package/dist/esm/src/utils/normalize-filebox.js +1 -16
  57. package/package.json +5 -2
  58. package/src/engine-schema.ts +2 -1
  59. package/src/matrix/events/event-room-join-no-xml.ts +178 -0
  60. package/src/matrix/events/event-room-join.ts +2 -1
  61. package/src/matrix/events/event-room-leave.ts +6 -4
  62. package/src/matrix/events/event-room-topic.ts +2 -1
  63. package/src/matrix/events/mod.ts +2 -0
  64. package/src/matrix/messages/sysmsg/message-revokemsg.ts +3 -4
  65. package/src/matrix/schema-mapper/contact.ts +1 -1
  66. package/src/matrix/service/request.ts +73 -88
  67. package/src/matrix/utils/is-type.ts +34 -0
  68. package/src/puppet-matrix.ts +55 -27
  69. package/src/utils/normalize-filebox.ts +0 -24
@@ -10,7 +10,7 @@ import type { FileBoxMetadataMessage } from './matrix/types.js'
10
10
  import Client from './matrix/service/request.js'
11
11
  import { getUnixTime } from 'date-fns'
12
12
 
13
- import { delay, mergeWithFallback } from './matrix/utils/index.js'
13
+ import { mergeWithFallback } from './matrix/utils/index.js'
14
14
  import path from 'path'
15
15
  // 参考
16
16
  import { CacheManager, RoomMemberMap } from './matrix/cache-manager.js'
@@ -144,15 +144,6 @@ class PuppetMatrix extends PUPPET.Puppet {
144
144
  removerId: this._self?.wxid,
145
145
  timestamp: getUnixTime(Date.now()),
146
146
  }
147
- for (const leaveId of leaveIds) {
148
- await this._cacheMgr?.deleteSingleRoomMember(roomId, leaveId)
149
- const roomInfo = await this._cacheMgr?.getRoom(roomId)
150
- if (roomInfo && roomInfo.chatroommemberList) {
151
- roomInfo.chatroommemberList = roomInfo.chatroommemberList.filter(member => member !== leaveId)
152
- await this._cacheMgr?.setRoom(roomId, roomInfo)
153
- }
154
- }
155
-
156
147
  this.emit('room-leave', payload)
157
148
  }))
158
149
  this._client.on('room-join', this.wrapAsync(async ({ roomId, inviterId, joinIds, joinUsers }: { roomId: string, inviterId: string, joinIds: string[], joinUsers: ContactPayload[] }) => {
@@ -415,12 +406,10 @@ class PuppetMatrix extends PUPPET.Puppet {
415
406
  public async ready (): Promise<void> {
416
407
  try {
417
408
  await this._client?.getContactList(1, 100)
418
- await this._client?.getOpenImContactList(1, 100)
419
- await delay(2000)
420
409
  await this._client?.getGroupList(1, 100)
421
- await delay(2000)
410
+ await this._client?.getOpenImContactList(1, 100)
422
411
  await this._client?.getOfficeList(1, 100)
423
-
412
+ await this.syncContact(true)
424
413
  log.silly(PRE, 'on ready')
425
414
 
426
415
  setTimeout(() => {
@@ -1273,6 +1262,22 @@ class PuppetMatrix extends PUPPET.Puppet {
1273
1262
  }
1274
1263
  }
1275
1264
 
1265
+ // @ts-ignore
1266
+ private async _searchRoomMemberInfo (roomId: string, name: string): Promise<string | undefined> {
1267
+ const localRes = await this.roomMemberSearch(roomId, name)
1268
+ if (localRes.length > 0) {
1269
+ return localRes[0]
1270
+ }
1271
+ const roomMemberMap = await this._getRoomMemberList(roomId)
1272
+ const searchMember = Object.values(roomMemberMap).find((member: ContactPayload) => {
1273
+ if (member.name === name || member.alias === name || member.remark === name || member.displayName === name) {
1274
+ return true
1275
+ }
1276
+ return false
1277
+ })
1278
+ return searchMember?.wxid || ''
1279
+ }
1280
+
1276
1281
  /**
1277
1282
  * 解析群成员信息
1278
1283
  * @param rawPayload
@@ -1446,7 +1451,8 @@ class PuppetMatrix extends PUPPET.Puppet {
1446
1451
 
1447
1452
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
1448
1453
  if (!ret || (ret && !Object.keys(ret).length) || force) {
1449
- const resMembers = await this._client?.getGroupMembers(roomId) || []
1454
+ const roomMemberDetail = await this._client?.getGroupMembersDetail(roomId)
1455
+ const resMembers = roomMemberDetail?.memberList || []
1450
1456
 
1451
1457
  const roomMemberMap: RoomMemberMap = {}
1452
1458
  for (const roomMember of resMembers) {
@@ -1459,6 +1465,7 @@ class PuppetMatrix extends PUPPET.Puppet {
1459
1465
  roomMemberMap[roomMember.wxid] = MemberInfo
1460
1466
  } else {
1461
1467
  MemberInfo = await this._cacheMgr!.getContact(roomMember.wxid) as ContactPayload
1468
+ MemberInfo = mergeWithFallback(MemberInfo, roomMember)
1462
1469
  roomMemberMap[roomMember.wxid] = MemberInfo
1463
1470
  }
1464
1471
  }
@@ -1534,7 +1541,6 @@ class PuppetMatrix extends PUPPET.Puppet {
1534
1541
 
1535
1542
  if (isRoomId(contact.wxid)) {
1536
1543
  const oldRoomPayload = await this._cacheMgr!.getRoom(contact.wxid)
1537
-
1538
1544
  const roomId = contact.wxid
1539
1545
  let finalPayload: ContactPayload = contact
1540
1546
  if (oldRoomPayload) {
@@ -1644,7 +1650,6 @@ class PuppetMatrix extends PUPPET.Puppet {
1644
1650
  }
1645
1651
  case EventType.RoomJoin: {
1646
1652
  const roomJoin: PUPPET.payloads.EventRoomJoin = event.payload
1647
- await this._updateRoomMember(roomJoin.roomId)
1648
1653
  for (const joinId of roomJoin.inviteeIdList) {
1649
1654
  if (this._roomJoinTemp[`${roomJoin.roomId}-${joinId}`]) {
1650
1655
  roomJoin.inviteeIdList = roomJoin.inviteeIdList.filter(id => id !== joinId)
@@ -1660,22 +1665,49 @@ class PuppetMatrix extends PUPPET.Puppet {
1660
1665
  break
1661
1666
  }
1662
1667
  case EventType.RoomLeave: {
1663
- // const roomLeave: PUPPET.payloads.EventRoomLeave = event.payload
1664
- // this.emit('room-leave', roomLeave)
1665
-
1666
- // await this._updateRoomMember(roomLeave.roomId)
1668
+ const roomLeave: PUPPET.payloads.EventRoomLeave = event.payload
1669
+ this.emit('room-leave', roomLeave)
1667
1670
  break
1668
1671
  }
1669
1672
  case EventType.RoomTopic: {
1670
1673
  const roomTopic: PUPPET.payloads.EventRoomTopic = event.payload
1671
1674
  this.emit('room-topic', roomTopic)
1675
+ await this._refreshContact(roomTopic.roomId)
1672
1676
  break
1673
1677
  }
1674
1678
  }
1675
1679
  }
1676
1680
 
1681
+ private async _refreshRoomInfo (roomId: string): Promise<ContactPayload | undefined> {
1682
+ const roomDetail = await this._client?.searchContact([ roomId ]) as ContactPayload | undefined
1683
+ if (roomDetail && roomDetail.wxid) {
1684
+ await this._updateContactCache(roomDetail as ContactPayload)
1685
+ return roomDetail
1686
+ }
1687
+ return {
1688
+ wxNum: '',
1689
+ wxid: roomId || '',
1690
+ name: '',
1691
+ sex: 0,
1692
+ alias: '',
1693
+ province: '',
1694
+ city: '',
1695
+ country: '',
1696
+ avatar: '',
1697
+ description: '',
1698
+ labelIdlist: '',
1699
+ scene: '',
1700
+ sign: '',
1701
+ snsBgImg: '',
1702
+ }
1703
+ }
1704
+
1677
1705
  // 刷新用户信息
1678
1706
  private async _refreshContact (wxid: string, isFriend?: number): Promise<ContactPayload | undefined> {
1707
+ if (isRoomId(wxid)) {
1708
+ const res = await this._refreshRoomInfo(wxid)
1709
+ return res
1710
+ }
1679
1711
  const contact = await this._client?.searchContactDetail([ wxid ]) as ContactPayload | undefined
1680
1712
  // may return contact with empty payload, empty username, nickname, etc.
1681
1713
  if (contact && !contact.wxid) {
@@ -1790,16 +1822,12 @@ class PuppetMatrix extends PUPPET.Puppet {
1790
1822
  }
1791
1823
 
1792
1824
  // @ts-ignore
1793
- public async syncContact () {
1825
+ public async syncContact (init?: boolean) {
1794
1826
  if (!this.currentUserId) {
1795
1827
  throw new Error('Can not sync contact before login')
1796
1828
  }
1797
1829
  log.info('syncContact')
1798
- await this._client!.syncContact()
1799
- await this._client?.getGroupList(1, 100)
1800
- await this._client?.getContactList(1, 100)
1801
- await this._client?.getOpenImContactList(1, 100)
1802
- await this._client?.getOfficeList(1, 100)
1830
+ await this._client!.syncContact(init)
1803
1831
  }
1804
1832
 
1805
1833
  }
@@ -1,6 +1,3 @@
1
- import type {
2
- FileBox,
3
- } from 'file-box'
4
1
  import {
5
2
  FileBoxType,
6
3
  FileBoxInterface,
@@ -64,27 +61,6 @@ const canPassthrough = (fileBox: FileBoxInterface) => {
64
61
 
65
62
  }
66
63
 
67
- const normalizeFileBoxUuid = (FileBoxUuid: typeof FileBox) => async (fileBox: FileBoxInterface) => {
68
- if (canPassthrough(fileBox)) {
69
- return fileBox
70
- }
71
-
72
- const stream = await fileBox.toStream()
73
-
74
- const uuid = await FileBoxUuid
75
- .fromStream(stream, fileBox.name)
76
- .toUuid()
77
-
78
- const uuidFileBox = FileBoxUuid.fromUuid(uuid, {
79
- md5 : fileBox.md5,
80
- name : fileBox.name,
81
- size : fileBox.size,
82
- })
83
-
84
- return uuidFileBox
85
- }
86
-
87
64
  export {
88
65
  canPassthrough,
89
- normalizeFileBoxUuid,
90
66
  }