wechaty-puppet-matrix 0.0.12 → 0.0.14
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/matrix/messages/message-location.d.ts +2 -0
- package/dist/cjs/src/matrix/messages/message-location.d.ts.map +1 -0
- package/dist/cjs/src/matrix/messages/message-location.js +18 -0
- package/dist/cjs/src/matrix/service/request.d.ts +1 -0
- package/dist/cjs/src/matrix/service/request.d.ts.map +1 -1
- package/dist/cjs/src/matrix/service/request.js +99 -61
- package/dist/cjs/src/puppet-matrix.d.ts +1 -0
- package/dist/cjs/src/puppet-matrix.d.ts.map +1 -1
- package/dist/cjs/src/puppet-matrix.js +12 -2
- package/dist/esm/src/matrix/messages/message-location.d.ts +2 -0
- package/dist/esm/src/matrix/messages/message-location.d.ts.map +1 -0
- package/dist/esm/src/matrix/messages/message-location.js +15 -0
- package/dist/esm/src/matrix/service/request.d.ts +1 -0
- package/dist/esm/src/matrix/service/request.d.ts.map +1 -1
- package/dist/esm/src/matrix/service/request.js +99 -61
- package/dist/esm/src/puppet-matrix.d.ts +1 -0
- package/dist/esm/src/puppet-matrix.d.ts.map +1 -1
- package/dist/esm/src/puppet-matrix.js +12 -2
- package/package.json +1 -1
- package/src/matrix/messages/message-location.ts +46 -0
- package/src/matrix/service/request.ts +118 -63
- package/src/puppet-matrix.ts +22 -4
|
@@ -99,14 +99,15 @@ async function getImageInfo(imageUrl) {
|
|
|
99
99
|
responseType: 'arraybuffer',
|
|
100
100
|
});
|
|
101
101
|
const fileSize = response.data.length;
|
|
102
|
-
const tempFilePath = path.join(os.homedir(), path.sep, '.wechaty', 'puppet-matrix-cache', path.sep
|
|
102
|
+
const tempFilePath = path.join(os.homedir(), path.sep, '.wechaty', 'puppet-matrix-cache', path.sep);
|
|
103
103
|
const baseDirExist = await fs.pathExists(tempFilePath);
|
|
104
104
|
if (!baseDirExist) {
|
|
105
105
|
await fs.mkdirp(tempFilePath);
|
|
106
106
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
const finalFilePath = path.join(tempFilePath, 'temp_image_' + Date.now() + path.extname(imageUrl));
|
|
108
|
+
await fs.writeFile(finalFilePath, response.data);
|
|
109
|
+
const dimensions = imageSize(finalFilePath);
|
|
110
|
+
await fs.unlink(finalFilePath);
|
|
110
111
|
return {
|
|
111
112
|
file_size: fileSize,
|
|
112
113
|
image_width: dimensions.width,
|
|
@@ -119,58 +120,70 @@ async function getImageInfo(imageUrl) {
|
|
|
119
120
|
throw error;
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
|
-
|
|
123
|
+
function splitAddress(address = '') {
|
|
124
|
+
if (!address) {
|
|
125
|
+
return { province: '', city: '', area: '' };
|
|
126
|
+
}
|
|
127
|
+
let province = '';
|
|
128
|
+
let city = '';
|
|
129
|
+
let area = '';
|
|
130
|
+
const provinceRegex = /^(.*?(省|自治区|市))|^(.*?)(北京|天津|上海|重庆)市?$/;
|
|
131
|
+
const provinceMatch = address.match(provinceRegex);
|
|
132
|
+
if (provinceMatch) {
|
|
133
|
+
province = provinceMatch[1] || provinceMatch[3];
|
|
134
|
+
address = address.replace(province, '');
|
|
135
|
+
}
|
|
136
|
+
const cityRegex = /^(.*?(市|自治州|地区|盟))|^([^\u4e00-\u9fa5]*)(北京|天津|上海|重庆)$/;
|
|
137
|
+
const cityMatch = address.match(cityRegex);
|
|
138
|
+
if (cityMatch) {
|
|
139
|
+
city = cityMatch[1] || cityMatch[3];
|
|
140
|
+
address = address.replace(city, '');
|
|
141
|
+
}
|
|
142
|
+
const areaRegex = /^(.*?(区|县|市|旗|自治县|林区|特区))|^(.*?(街道|镇|乡))|^([^\u4e00-\u9fa5]*)/;
|
|
143
|
+
const areaMatch = address.match(areaRegex);
|
|
144
|
+
if (areaMatch) {
|
|
145
|
+
area = areaMatch[1] || areaMatch[3] || areaMatch[4];
|
|
146
|
+
address = address.replace(area, '');
|
|
147
|
+
}
|
|
148
|
+
return { province, city, area };
|
|
149
|
+
}
|
|
150
|
+
const genTextPosSnsXml = (wxid, content, location) => {
|
|
151
|
+
const addressInfo = location ? splitAddress(location.address) : {};
|
|
123
152
|
const xmlTemplate = `
|
|
124
153
|
<TimelineObject>
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
<contentUrl></contentUrl>
|
|
155
|
-
</ContentObject>
|
|
156
|
-
<actionInfo>
|
|
157
|
-
<appMsg>
|
|
158
|
-
<mediaTagName></mediaTagName>
|
|
159
|
-
<messageExt></messageExt>
|
|
160
|
-
<messageAction></messageAction>
|
|
161
|
-
</appMsg>
|
|
162
|
-
</actionInfo>
|
|
163
|
-
<appInfo><id></id></appInfo>
|
|
164
|
-
<publicUserName></publicUserName>
|
|
165
|
-
<streamvideo>
|
|
166
|
-
<streamvideourl></streamvideourl>
|
|
167
|
-
<streamvideothumburl></streamvideothumburl>
|
|
168
|
-
<streamvideoweburl></streamvideoweburl>
|
|
169
|
-
</streamvideo>
|
|
170
|
-
</TimelineObject>`.replace(/\s+/g, '');
|
|
154
|
+
<id>0</id>
|
|
155
|
+
<username><![CDATA[${wxid}]]></username>
|
|
156
|
+
<createTime><![CDATA[${Math.floor(Date.now() / 1000)}]]></createTime>
|
|
157
|
+
<contentDesc><![CDATA[${content}]]></contentDesc>
|
|
158
|
+
<contentDescShowType>0</contentDescShowType>
|
|
159
|
+
<contentDescScene>3</contentDescScene>
|
|
160
|
+
<private>0</private>
|
|
161
|
+
<sightFolded>0</sightFolded>
|
|
162
|
+
<showFlag>0</showFlag>${location ? `<location city="${addressInfo.city}" longitude="${location.longitude}" latitude="${location.latitude}" poiName="${location.name}" poiAddress="${location.address}" poiScale="11.000000" poiInfoUrl="" poiClassifyId="${location.poiId}" poiClassifyType="1" poiClickableStatus="0" buildingId="0" floorName=""/>` : ''}
|
|
163
|
+
<appInfo>
|
|
164
|
+
<id/>
|
|
165
|
+
<version/>
|
|
166
|
+
<appName/>
|
|
167
|
+
<installUrl/>
|
|
168
|
+
<fromUrl/>
|
|
169
|
+
<isForceUpdate>0</isForceUpdate>
|
|
170
|
+
<isHidden>0</isHidden>
|
|
171
|
+
</appInfo>
|
|
172
|
+
<sourceUserName/>
|
|
173
|
+
<sourceNickName/>
|
|
174
|
+
<statisticsData/>
|
|
175
|
+
<statExtStr/>
|
|
176
|
+
<ContentObject>
|
|
177
|
+
<contentStyle>2</contentStyle>
|
|
178
|
+
<title/>
|
|
179
|
+
<description/>
|
|
180
|
+
<mediaList/>
|
|
181
|
+
</ContentObject>
|
|
182
|
+
</TimelineObject>`;
|
|
171
183
|
return xmlTemplate;
|
|
172
184
|
};
|
|
173
|
-
const genVideoSnsXml = (wxid, content, media) => {
|
|
185
|
+
const genVideoSnsXml = (wxid, content, media, location) => {
|
|
186
|
+
const addressInfo = location ? splitAddress(location.address) : {};
|
|
174
187
|
const xmlTemplate = `
|
|
175
188
|
<TimelineObject>
|
|
176
189
|
<id>0</id>
|
|
@@ -181,7 +194,7 @@ const genVideoSnsXml = (wxid, content, media) => {
|
|
|
181
194
|
<contentDescScene>0</contentDescScene>
|
|
182
195
|
<private>0</private>
|
|
183
196
|
<sightFolded>0</sightFolded>
|
|
184
|
-
<showFlag>0</showFlag
|
|
197
|
+
<showFlag>0</showFlag>${location ? `<location city="${addressInfo.city}" longitude="${location.longitude}" latitude="${location.latitude}" poiName="${location.name}" poiAddress="${location.address}" poiScale="11.000000" poiInfoUrl="" poiClassifyId="${location.poiId}" poiClassifyType="1" poiClickableStatus="0" buildingId="0" floorName=""/>` : ''}
|
|
185
198
|
<appInfo>
|
|
186
199
|
<id></id>
|
|
187
200
|
<version></version>
|
|
@@ -204,22 +217,23 @@ const genVideoSnsXml = (wxid, content, media) => {
|
|
|
204
217
|
<id>0</id>
|
|
205
218
|
<type>6</type>
|
|
206
219
|
<title></title>
|
|
207
|
-
<description
|
|
220
|
+
<description>${content}</description>
|
|
208
221
|
<private>0</private>
|
|
209
222
|
<userData></userData>
|
|
210
223
|
<subType>0</subType>
|
|
211
224
|
<videoSize width="${media.video_width}" height="${media.video_height}"/>
|
|
212
|
-
<url type="1" md5="951a7d7864d685a92fd2624155794bf9" videomd5="577f55635faf44f595a69ded26d87bcc">${media.file_url}</url>
|
|
213
|
-
<thumb type="1">${media.thumb_url}</thumb>
|
|
225
|
+
<url type="1" md5="951a7d7864d685a92fd2624155794bf9" videomd5="577f55635faf44f595a69ded26d87bcc">${media.file_url.replaceAll('&', '&')}</url>
|
|
226
|
+
<thumb type="1">${media.thumb_url.replaceAll('&', '&')}</thumb>
|
|
214
227
|
<size width="${media.thumb_width}.000000" height="${media.thumb_height}.000000" totalSize="${media.file_size}"/>
|
|
215
228
|
<videoDuration>${media.video_duration}.000000</videoDuration>
|
|
216
229
|
</media>
|
|
217
230
|
</mediaList>
|
|
231
|
+
<contentUrl>https://support.weixin.qq.com/cgi-bin/mmsupport-bin/readtemplate?t=page/common_page__upgrade&v=1</contentUrl>
|
|
218
232
|
</ContentObject>
|
|
219
233
|
</TimelineObject>`;
|
|
220
234
|
return xmlTemplate;
|
|
221
235
|
};
|
|
222
|
-
const genImageSnsXml = (wxid, contentDesc, mediaList) => {
|
|
236
|
+
const genImageSnsXml = (wxid, contentDesc, mediaList, location) => {
|
|
223
237
|
const mediaTemplate = (media) => `
|
|
224
238
|
<media>
|
|
225
239
|
<id><![CDATA[0]]></id>
|
|
@@ -233,6 +247,7 @@ const genImageSnsXml = (wxid, contentDesc, mediaList) => {
|
|
|
233
247
|
<size totalSize="${media.file_size}" width="${media.image_width}" height="${media.image_height}"></size>
|
|
234
248
|
</media>`;
|
|
235
249
|
const mediaString = mediaList.map(media => mediaTemplate(media)).join('');
|
|
250
|
+
const addressInfo = location ? splitAddress(location.address) : {};
|
|
236
251
|
const xmlTemplate = `
|
|
237
252
|
<TimelineObject>
|
|
238
253
|
<id><![CDATA[0]]></id>
|
|
@@ -259,6 +274,7 @@ const genImageSnsXml = (wxid, contentDesc, mediaList) => {
|
|
|
259
274
|
<preloadResources></preloadResources>
|
|
260
275
|
</weappInfo>
|
|
261
276
|
<canvasInfoXml></canvasInfoXml>
|
|
277
|
+
${location ? `<location city="${addressInfo.city}" longitude="${location.longitude}" latitude="${location.latitude}" poiName="${location.name}" poiAddress="${location.address}" poiScale="11.000000" poiInfoUrl="" poiClassifyId="${location.poiId}" poiClassifyType="1" poiClickableStatus="0" buildingId="0" floorName=""/>` : ''}
|
|
262
278
|
<ContentObject>
|
|
263
279
|
<contentStyle><![CDATA[1]]></contentStyle>
|
|
264
280
|
<contentSubStyle><![CDATA[0]]></contentSubStyle>
|
|
@@ -1545,6 +1561,28 @@ class Client extends EventEmitter {
|
|
|
1545
1561
|
},
|
|
1546
1562
|
});
|
|
1547
1563
|
}
|
|
1564
|
+
async creatRoom(contactIdList, topic) {
|
|
1565
|
+
try {
|
|
1566
|
+
const res = await this.postData({
|
|
1567
|
+
path: '/room/create_chatroom',
|
|
1568
|
+
data: {
|
|
1569
|
+
username_list: contactIdList,
|
|
1570
|
+
},
|
|
1571
|
+
});
|
|
1572
|
+
if (res?.baseResponse?.ret) {
|
|
1573
|
+
log.error('creatRoom error: %s', JSON.stringify(res.baseResponse));
|
|
1574
|
+
}
|
|
1575
|
+
const roomId = res.chatRoomName.string;
|
|
1576
|
+
if (topic) {
|
|
1577
|
+
void this.setGroupName(roomId, topic);
|
|
1578
|
+
}
|
|
1579
|
+
return roomId;
|
|
1580
|
+
}
|
|
1581
|
+
catch (error) {
|
|
1582
|
+
log.error(PRE, 'sendContactCard(%s, %s): %s', contactIdList, topic, error);
|
|
1583
|
+
return '';
|
|
1584
|
+
}
|
|
1585
|
+
}
|
|
1548
1586
|
async setGroupName(groupId, name) {
|
|
1549
1587
|
await this.postData({
|
|
1550
1588
|
path: '/room/modify_chatroom_name',
|
|
@@ -1629,7 +1667,7 @@ class Client extends EventEmitter {
|
|
|
1629
1667
|
url,
|
|
1630
1668
|
},
|
|
1631
1669
|
});
|
|
1632
|
-
log.
|
|
1670
|
+
log.verbose('uploadSnsVideo result: %s', JSON.stringify(res));
|
|
1633
1671
|
if (res?.errcode !== 0) {
|
|
1634
1672
|
log.error('uploadSnsVideo error: %s', JSON.stringify(res));
|
|
1635
1673
|
}
|
|
@@ -1654,18 +1692,18 @@ class Client extends EventEmitter {
|
|
|
1654
1692
|
const imageBaseInfo = await getImageInfo(image);
|
|
1655
1693
|
imageInfo.push({ ...res, ...imageBaseInfo });
|
|
1656
1694
|
}
|
|
1657
|
-
xmlContent = genImageSnsXml(wxid, momentInfo.content, imageInfo);
|
|
1695
|
+
xmlContent = genImageSnsXml(wxid, momentInfo.content, imageInfo, momentInfo.location);
|
|
1658
1696
|
}
|
|
1659
1697
|
}
|
|
1660
1698
|
else if (momentInfo.videoUrl) {
|
|
1661
1699
|
const mediaInfo = await this.uploadSnsVideo(momentInfo.videoUrl);
|
|
1662
1700
|
if (mediaInfo) {
|
|
1663
1701
|
const thumbInfo = await getImageInfo(mediaInfo.thumb_url);
|
|
1664
|
-
xmlContent = genVideoSnsXml(wxid, momentInfo.content, { ...mediaInfo, ...thumbInfo });
|
|
1702
|
+
xmlContent = genVideoSnsXml(wxid, momentInfo.content, { ...mediaInfo, ...thumbInfo }, momentInfo.location);
|
|
1665
1703
|
}
|
|
1666
1704
|
}
|
|
1667
1705
|
else {
|
|
1668
|
-
xmlContent =
|
|
1706
|
+
xmlContent = genTextPosSnsXml(wxid, momentInfo.content, momentInfo.location);
|
|
1669
1707
|
}
|
|
1670
1708
|
return await this.sendMoment(xmlContent);
|
|
1671
1709
|
}
|
|
@@ -62,6 +62,7 @@ declare class PuppetMatrix extends PUPPET.Puppet {
|
|
|
62
62
|
messageImage(messageId: string): Promise<FileBoxInterface>;
|
|
63
63
|
messageMiniProgram(messageId: string): Promise<PUPPET.payloads.MiniProgram>;
|
|
64
64
|
messageUrl(messageId: string): Promise<PUPPET.payloads.UrlLink>;
|
|
65
|
+
messageLocation(messageId: string): Promise<PUPPET.payloads.Location>;
|
|
65
66
|
messageSendContact(toUserId: string, contactId: string): Promise<void | string>;
|
|
66
67
|
messageSendFile(conversationId: string, fileBox: FileBoxInterface): Promise<string | void>;
|
|
67
68
|
messageSendMiniProgram(toUserName: string, mpPayload: PUPPET.payloads.MiniProgram): Promise<void | string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppet-matrix.d.ts","sourceRoot":"","sources":["../../../src/puppet-matrix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAe,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExE,OAAO,MAAM,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"puppet-matrix.d.ts","sourceRoot":"","sources":["../../../src/puppet-matrix.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAe,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExE,OAAO,MAAM,MAAM,6BAA6B,CAAA;AA4BhD,QAAA,MAAM,OAAO,QAAiC,CAAA;AAK9C,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,GAAG;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,CAAA;CACb,CAAA;AAED,cAAM,YAAa,SAAQ,MAAM,CAAC,MAAM;IAkBT,OAAO,EAAE,mBAAmB;IAhBzD,OAAO,CAAC,SAAS,CAAC,CAAc;IAChC,OAAO,CAAC,OAAO,CAAC,CAAQ;IACxB,OAAO,CAAC,KAAK,CAAC,CAA4B;IAC1C,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAC,CAA+B;IACvD,OAAO,CAAC,eAAe,CAAC,CAAuC;IAC/D,OAAO,CAAC,eAAe,CAAC,CAAuC;IAC/D,OAAO,CAAC,sBAAsB,CAAC,CAAuC;IACtE,gBAAiC,OAAO,SAAU;gBAOrB,OAAO,GAAE,mBAA+C;IAmBrF,IAAW,MAAM,uBAEhB;IAEc,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC;YAS1B,YAAY;YA0GZ,YAAY;IAqB1B,OAAO,CAAC,eAAe;YAOT,UAAU;IA6CT,eAAe,CAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAS1D,aAAa;YA4Cb,OAAO;IAiCR,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAoBvB,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;YAIvB,WAAW;IAaV,MAAM,CAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,IAAI,CAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAkBpB,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,iBAAiB,IAAK,OAAO,CAAC,MAAM,CAAC;IAKrC,oBAAoB,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,YAAY,CAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1E,YAAY,CAAE,SAAS,EAAE,MAAM,GAAyB,OAAO,CAAC,MAAM,CAAC;IACvE,YAAY,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B/D,aAAa,CAAE,SAAS,EAAE,MAAM,GAA6B,OAAO,CAAC,gBAAgB,CAAC;IACtF,aAAa,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAK,OAAO,CAAC,IAAI,CAAC;IAa1E,WAAW,IAAK,OAAO,CAAC,MAAM,EAAE,CAAC;IAKjC,wBAAwB,CAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAK7E,kBAAkB,CAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAKjE,aAAa,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhD,gBAAgB,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxE,mBAAmB,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3E,YAAY,CAAE,SAAS,EAAE,MAAM,EAAE,GAAI,OAAO,CAAC,IAAI,CAAC;IAKlD,iBAAiB,CAAE,SAAS,CAAC,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAW1D,gBAAgB,CAAE,YAAY,EAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvD,aAAa,CAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD5F,qBAAqB,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IAQ7D,sBAAsB,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;YAU5D,iBAAiB;YAmBjB,kBAAkB;IAuBjB,cAAc,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMnD,WAAW,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsC1D,YAAY,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAS3D,kBAAkB,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;IAe5E,UAAU,CAAE,SAAS,EAAE,MAAM,GAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAsBlE,eAAe,CAAE,SAAS,EAAE,MAAM,GAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAiBxE,kBAAkB,CAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IA8BhF,eAAe,CAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA0C3F,sBAAsB,CAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IAwB3G,eAAe,CAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkBxG,cAAc,CAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsBxG,eAAe,CAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1F,aAAa,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASnD,cAAc,CAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCrE,OAAO,CAAE,MAAM,EAAM,MAAM,EAAE,SAAS,EAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/D,UAAU,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAWtD,UAAU,CACvB,aAAa,EAAG,MAAM,EAAE,EACxB,KAAK,EAAW,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC;IAKH,OAAO,CACpB,MAAM,EAAM,MAAM,EAClB,SAAS,EAAG,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAKD,QAAQ,IAAK,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9B,UAAU,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5C,QAAQ,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,SAAS,CAAE,MAAM,EAAE,MAAM,GAAmB,OAAO,CAAC,MAAM,CAAC;IAC3D,SAAS,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC;IAUzD,YAAY,CAAE,MAAM,EAAE,MAAM,GAAmB,OAAO,CAAC,MAAM,CAAC;IAC9D,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAK,OAAO,CAAC,IAAI,CAAC;IAW5D,cAAc,CAAE,MAAM,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAMnD,oBAAoB,CAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9D,uBAAuB,CAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAKnF,iBAAiB,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAsBnE,uBAAuB,CAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAQnF,iBAAiB,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAavD,oBAAoB,CAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAQ7E,cAAc,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAC,SAAS,CAAC;IAc9D,oBAAoB,CAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAcjF,0BAA0B,CAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;IAQ5F,wBAAwB,CAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAQjE,8BAA8B,CAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;IAQzF,0BAA0B,CAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;IAQxG,oBAAoB,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;IAiBtE,WAAW,CAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IAiEnE,aAAa,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,cAAc,CAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;IAKnE,kBAAkB,CAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAKxF,oBAAoB,CAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAMnF,GAAG,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,UAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAY1F,QAAQ;YAWA,kBAAkB;YAkClB,mBAAmB;YAgCnB,iBAAiB;IAYlB,WAAW,CAAE,MAAM,EAAC,MAAM;YAgBzB,cAAc;YAcd,cAAc;YA4Dd,eAAe;YAcf,iBAAiB;IAa/B,OAAO,CAAC,gBAAgB;YAeV,uBAAuB;YASvB,uBAAuB;YASvB,uBAAuB;YAgBvB,sBAAsB;IAuBvB,WAAW;CAQzB;AAED,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAA;AAEhC,eAAe,YAAY,CAAA"}
|
|
@@ -13,6 +13,7 @@ import { parseEmotionMessagePayload } from './matrix/messages/message-emotion.js
|
|
|
13
13
|
import { parseImageMessagePayload } from './matrix/messages/message-image.js';
|
|
14
14
|
import { parseAudioMessagePayload } from './matrix/messages/message-audio.js';
|
|
15
15
|
import { parseVideoMessagePayload } from './matrix/messages/message-video.js';
|
|
16
|
+
import { parseLocationMessagePayload } from './matrix/messages/message-location.js';
|
|
16
17
|
import { CachedPromiseFunc } from './matrix/utils/cached-promise.js';
|
|
17
18
|
import { engineMessageToWechaty } from './matrix/schema-mapper/message.js';
|
|
18
19
|
import { engineContactToWechaty } from './matrix/schema-mapper/contact.js';
|
|
@@ -568,6 +569,15 @@ class PuppetMatrix extends PUPPET.Puppet {
|
|
|
568
569
|
url: appPayload.url,
|
|
569
570
|
};
|
|
570
571
|
}
|
|
572
|
+
async messageLocation(messageId) {
|
|
573
|
+
const rawPayload = await this.messageRawPayload(messageId);
|
|
574
|
+
const payload = await this.messageRawPayloadParser(rawPayload);
|
|
575
|
+
if (payload.type !== PUPPET.types.Message.Location) {
|
|
576
|
+
throw new Error('Can not get location from non location payload');
|
|
577
|
+
}
|
|
578
|
+
const locationPayload = await parseLocationMessagePayload(rawPayload.msg);
|
|
579
|
+
return locationPayload;
|
|
580
|
+
}
|
|
571
581
|
async messageSendContact(toUserId, contactId) {
|
|
572
582
|
log.verbose('PuppetWeChat', 'messageSend("%s", %s)', toUserId, contactId);
|
|
573
583
|
const contactPayload = await this.contactRawPayload(contactId);
|
|
@@ -740,7 +750,7 @@ class PuppetMatrix extends PUPPET.Puppet {
|
|
|
740
750
|
}
|
|
741
751
|
}
|
|
742
752
|
async roomCreate(contactIdList, topic) {
|
|
743
|
-
return
|
|
753
|
+
return this._client?.creatRoom(contactIdList, topic) || '';
|
|
744
754
|
}
|
|
745
755
|
async roomDel(roomId, contactId) {
|
|
746
756
|
return PUPPET.throwUnsupportedError(roomId, contactId);
|
|
@@ -870,7 +880,7 @@ class PuppetMatrix extends PUPPET.Puppet {
|
|
|
870
880
|
momentInfo.imageUrls.push(fileUrl);
|
|
871
881
|
}
|
|
872
882
|
else if (fileType.includes('video/mp4') || fileType.includes('.mp4')) {
|
|
873
|
-
momentInfo.
|
|
883
|
+
momentInfo.videoUrl = fileUrl;
|
|
874
884
|
}
|
|
875
885
|
}
|
|
876
886
|
break;
|
package/package.json
CHANGED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
2
|
+
import { xmlToJson } from '../utils/xml-to-json.js'
|
|
3
|
+
|
|
4
|
+
interface LocationXmlSchema {
|
|
5
|
+
msg: {
|
|
6
|
+
location: {
|
|
7
|
+
$: {
|
|
8
|
+
x: string;
|
|
9
|
+
y: string;
|
|
10
|
+
scale: string;
|
|
11
|
+
label: string;
|
|
12
|
+
maptype: string;
|
|
13
|
+
poiname: string;
|
|
14
|
+
poiid: string;
|
|
15
|
+
buildingId: string;
|
|
16
|
+
floorName: string;
|
|
17
|
+
poiCategoryTips?: string;
|
|
18
|
+
poiBusinessHour?: string;
|
|
19
|
+
poiPhone?: string;
|
|
20
|
+
poiPriceTips?: string;
|
|
21
|
+
isFromPoiList?: string;
|
|
22
|
+
adcode?: string;
|
|
23
|
+
cityname?: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export async function parseLocationMessagePayload (
|
|
30
|
+
messageContent: string,
|
|
31
|
+
): Promise<any> {
|
|
32
|
+
const appMsgXml: LocationXmlSchema = await xmlToJson(messageContent)
|
|
33
|
+
const { x, y, label, cityname, poiname, poiid, buildingId }
|
|
34
|
+
= appMsgXml?.msg.location.$
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
accuracy: 0,
|
|
38
|
+
address: label || 'No Address',
|
|
39
|
+
latitude: x,
|
|
40
|
+
longitude: y,
|
|
41
|
+
name: poiname || 'No Name',
|
|
42
|
+
city: cityname || 'No City',
|
|
43
|
+
poiId: poiid || '',
|
|
44
|
+
buildingId: buildingId || '',
|
|
45
|
+
}
|
|
46
|
+
}
|