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.
- package/dist/cjs/src/engine-schema.d.ts +1 -0
- package/dist/cjs/src/engine-schema.d.ts.map +1 -1
- package/dist/cjs/src/matrix/events/event-room-join-no-xml.d.ts +8 -0
- package/dist/cjs/src/matrix/events/event-room-join-no-xml.d.ts.map +1 -0
- package/dist/cjs/src/matrix/events/event-room-join-no-xml.js +125 -0
- package/dist/cjs/src/matrix/events/event-room-join.d.ts.map +1 -1
- package/dist/cjs/src/matrix/events/event-room-join.js +1 -0
- package/dist/cjs/src/matrix/events/event-room-leave.d.ts.map +1 -1
- package/dist/cjs/src/matrix/events/event-room-leave.js +3 -3
- package/dist/cjs/src/matrix/events/event-room-topic.d.ts.map +1 -1
- package/dist/cjs/src/matrix/events/event-room-topic.js +1 -1
- package/dist/cjs/src/matrix/events/mod.d.ts.map +1 -1
- package/dist/cjs/src/matrix/events/mod.js +2 -0
- package/dist/cjs/src/matrix/messages/sysmsg/message-revokemsg.d.ts.map +1 -1
- package/dist/cjs/src/matrix/messages/sysmsg/message-revokemsg.js +2 -4
- package/dist/cjs/src/matrix/schema-mapper/contact.js +1 -1
- package/dist/cjs/src/matrix/service/request.d.ts +17 -4
- package/dist/cjs/src/matrix/service/request.d.ts.map +1 -1
- package/dist/cjs/src/matrix/service/request.js +45 -72
- package/dist/cjs/src/matrix/utils/is-type.d.ts +8 -0
- package/dist/cjs/src/matrix/utils/is-type.d.ts.map +1 -1
- package/dist/cjs/src/matrix/utils/is-type.js +25 -0
- package/dist/cjs/src/puppet-matrix.d.ts +3 -1
- package/dist/cjs/src/puppet-matrix.d.ts.map +1 -1
- package/dist/cjs/src/puppet-matrix.js +51 -19
- package/dist/cjs/src/utils/normalize-filebox.d.ts +1 -3
- package/dist/cjs/src/utils/normalize-filebox.d.ts.map +1 -1
- package/dist/cjs/src/utils/normalize-filebox.js +1 -17
- package/dist/esm/src/engine-schema.d.ts +1 -0
- package/dist/esm/src/engine-schema.d.ts.map +1 -1
- package/dist/esm/src/matrix/events/event-room-join-no-xml.d.ts +8 -0
- package/dist/esm/src/matrix/events/event-room-join-no-xml.d.ts.map +1 -0
- package/dist/esm/src/matrix/events/event-room-join-no-xml.js +122 -0
- package/dist/esm/src/matrix/events/event-room-join.d.ts.map +1 -1
- package/dist/esm/src/matrix/events/event-room-join.js +1 -0
- package/dist/esm/src/matrix/events/event-room-leave.d.ts.map +1 -1
- package/dist/esm/src/matrix/events/event-room-leave.js +3 -3
- package/dist/esm/src/matrix/events/event-room-topic.d.ts.map +1 -1
- package/dist/esm/src/matrix/events/event-room-topic.js +1 -1
- package/dist/esm/src/matrix/events/mod.d.ts.map +1 -1
- package/dist/esm/src/matrix/events/mod.js +2 -0
- package/dist/esm/src/matrix/messages/sysmsg/message-revokemsg.d.ts.map +1 -1
- package/dist/esm/src/matrix/messages/sysmsg/message-revokemsg.js +2 -4
- package/dist/esm/src/matrix/schema-mapper/contact.js +1 -1
- package/dist/esm/src/matrix/service/request.d.ts +17 -4
- package/dist/esm/src/matrix/service/request.d.ts.map +1 -1
- package/dist/esm/src/matrix/service/request.js +46 -73
- package/dist/esm/src/matrix/utils/is-type.d.ts +8 -0
- package/dist/esm/src/matrix/utils/is-type.d.ts.map +1 -1
- package/dist/esm/src/matrix/utils/is-type.js +23 -0
- package/dist/esm/src/puppet-matrix.d.ts +3 -1
- package/dist/esm/src/puppet-matrix.d.ts.map +1 -1
- package/dist/esm/src/puppet-matrix.js +52 -20
- package/dist/esm/src/utils/normalize-filebox.d.ts +1 -3
- package/dist/esm/src/utils/normalize-filebox.d.ts.map +1 -1
- package/dist/esm/src/utils/normalize-filebox.js +1 -16
- package/package.json +5 -2
- package/src/engine-schema.ts +2 -1
- package/src/matrix/events/event-room-join-no-xml.ts +178 -0
- package/src/matrix/events/event-room-join.ts +2 -1
- package/src/matrix/events/event-room-leave.ts +6 -4
- package/src/matrix/events/event-room-topic.ts +2 -1
- package/src/matrix/events/mod.ts +2 -0
- package/src/matrix/messages/sysmsg/message-revokemsg.ts +3 -4
- package/src/matrix/schema-mapper/contact.ts +1 -1
- package/src/matrix/service/request.ts +73 -88
- package/src/matrix/utils/is-type.ts +34 -0
- package/src/puppet-matrix.ts +55 -27
- package/src/utils/normalize-filebox.ts +0 -24
package/src/puppet-matrix.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
|
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
|
-
|
|
1664
|
-
|
|
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
|
}
|