@juzi/wechaty 1.0.156 → 1.0.157
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/package-json.js +4 -4
- package/dist/cjs/src/user-modules/contact.d.ts +24 -0
- package/dist/cjs/src/user-modules/contact.d.ts.map +1 -1
- package/dist/cjs/src/user-modules/contact.js +55 -0
- package/dist/cjs/src/user-modules/contact.js.map +1 -1
- package/dist/cjs/src/user-modules/contact.spec.js +156 -0
- package/dist/cjs/src/user-modules/contact.spec.js.map +1 -1
- package/dist/cjs/src/user-modules/room.d.ts +23 -0
- package/dist/cjs/src/user-modules/room.d.ts.map +1 -1
- package/dist/cjs/src/user-modules/room.js +52 -0
- package/dist/cjs/src/user-modules/room.js.map +1 -1
- package/dist/cjs/src/user-modules/room.spec.js +156 -0
- package/dist/cjs/src/user-modules/room.spec.js.map +1 -1
- package/dist/esm/src/package-json.js +4 -4
- package/dist/esm/src/user-modules/contact.d.ts +24 -0
- package/dist/esm/src/user-modules/contact.d.ts.map +1 -1
- package/dist/esm/src/user-modules/contact.js +55 -0
- package/dist/esm/src/user-modules/contact.js.map +1 -1
- package/dist/esm/src/user-modules/contact.spec.js +157 -1
- package/dist/esm/src/user-modules/contact.spec.js.map +1 -1
- package/dist/esm/src/user-modules/room.d.ts +23 -0
- package/dist/esm/src/user-modules/room.d.ts.map +1 -1
- package/dist/esm/src/user-modules/room.js +52 -0
- package/dist/esm/src/user-modules/room.js.map +1 -1
- package/dist/esm/src/user-modules/room.spec.js +156 -0
- package/dist/esm/src/user-modules/room.spec.js.map +1 -1
- package/package.json +3 -3
- package/src/package-json.ts +4 -4
- package/src/user-modules/contact.spec.ts +212 -0
- package/src/user-modules/contact.ts +67 -0
- package/src/user-modules/room.spec.ts +210 -0
- package/src/user-modules/room.ts +63 -0
package/src/user-modules/room.ts
CHANGED
|
@@ -268,6 +268,69 @@ class RoomMixin extends MixinBase implements SayableSayer {
|
|
|
268
268
|
return undefined
|
|
269
269
|
}
|
|
270
270
|
|
|
271
|
+
/**
|
|
272
|
+
* Async iterator variant of {@link findAll} that yields rooms in batches.
|
|
273
|
+
*
|
|
274
|
+
* Each batch is materialised with a single `puppet.batchRoomPayload` RPC,
|
|
275
|
+
* so iterating N rooms costs roughly `ceil(N / batch)` round trips instead
|
|
276
|
+
* of N. Uses `puppet.batchRoomPayload` directly (required on the puppet
|
|
277
|
+
* abstract), so callers do not need a per-id fallback path. Callers may
|
|
278
|
+
* `break` between batches to short-circuit.
|
|
279
|
+
*
|
|
280
|
+
* @static
|
|
281
|
+
* @param {PUPPET.filters.Room} [query]
|
|
282
|
+
* @param {{ batch?: number }} [opts] batch size, default 100
|
|
283
|
+
* @returns {AsyncIterable<RoomInterface[]>}
|
|
284
|
+
* @example
|
|
285
|
+
* for await (const chunk of bot.Room.findAllIter()) {
|
|
286
|
+
* for (const room of chunk) {
|
|
287
|
+
* console.log(await room.topic())
|
|
288
|
+
* }
|
|
289
|
+
* }
|
|
290
|
+
*/
|
|
291
|
+
static async * findAllIter (
|
|
292
|
+
query? : PUPPET.filters.Room,
|
|
293
|
+
opts? : { batch?: number },
|
|
294
|
+
): AsyncIterable<RoomInterface[]> {
|
|
295
|
+
const batch = opts?.batch ?? 100
|
|
296
|
+
log.verbose('Room', 'findAllIter(%s, batch=%d)', JSON.stringify(query, stringifyFilter) || '', batch)
|
|
297
|
+
|
|
298
|
+
if (batch <= 0) {
|
|
299
|
+
throw new Error(`Room.findAllIter() batch must be positive, got ${batch}`)
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const roomIdList: string[] = await this.wechaty.puppet.roomSearch(query)
|
|
303
|
+
|
|
304
|
+
if (!this.wechaty.isLoggedIn) {
|
|
305
|
+
throw new Error('Room.findAllIter() requires logged in')
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
for (let i = 0; i < roomIdList.length; i += batch) {
|
|
309
|
+
const idChunk = roomIdList.slice(i, i + batch)
|
|
310
|
+
|
|
311
|
+
const payloadMap = await this.wechaty.puppet.batchRoomPayload(idChunk)
|
|
312
|
+
|
|
313
|
+
const roomChunk: RoomInterface[] = []
|
|
314
|
+
for (const id of idChunk) {
|
|
315
|
+
const payload = payloadMap.get(id)
|
|
316
|
+
if (!payload) {
|
|
317
|
+
log.silly('Room', 'findAllIter() payload missing for id=%s, skip', id)
|
|
318
|
+
continue
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const room = (this.wechaty.Room as any as typeof RoomImpl).load(id)
|
|
322
|
+
room.payload = payload
|
|
323
|
+
roomChunk.push(room)
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
if (roomChunk.length > 0) {
|
|
327
|
+
yield roomChunk
|
|
328
|
+
} else {
|
|
329
|
+
log.warn('Room', 'findAllIter() batch all missing from payloadMap, idChunk=%j', idChunk)
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
271
334
|
static async batchLoadRooms (roomIdList: string[]) {
|
|
272
335
|
let continuousErrorCount = 0
|
|
273
336
|
let totalErrorCount = 0
|