#!/usr/bin/env ts-node /** * Water mark html page * https://www.cnblogs.com/daixinyu/p/6715398.html */ import fs from 'fs-extra' import path from 'path' import { FlashStoreSync } from 'flash-store' import { PadproContactPayload, PadproRoomMemberPayload, PadproRoomPayload, } from '../src/schemas' import { log, } from '../src/config' let cacheContactRawPayload : FlashStoreSync let cacheRoomRawPayload : FlashStoreSync let cacheRoomMemberRawPayload : FlashStoreSync async function main () { const workdir = process.env.STORE_HOME if (!workdir) { log.info('Dumper', 'main() Usage: `STORE_HOME=xxx dumper.ts') throw new Error('STORE_HOME env var not set') } if (!await fs.pathExists(workdir)) { throw new Error('path not exist: ' + workdir) } cacheContactRawPayload = new FlashStoreSync(path.join(workdir, 'contact-raw-payload')) cacheRoomRawPayload = new FlashStoreSync(path.join(workdir, 'room-raw-payload')) cacheRoomMemberRawPayload = new FlashStoreSync(path.join(workdir, 'room-member-raw-payload')) await Promise.all([ cacheContactRawPayload.ready(), cacheRoomRawPayload.ready(), cacheRoomMemberRawPayload.ready(), ]) const roomMemberTotalNum = [...cacheRoomMemberRawPayload.values()].reduce( (accuVal, currVal) => { return accuVal + Object.keys(currVal).length }, 0, ) log.warn('Dumper', 'main() Store status: contact: %d, room: %d, room members: %d', cacheContactRawPayload.size, cacheRoomRawPayload.size, roomMemberTotalNum, ) dumpHtml() } function dumpHtml () { console.log(` `) // dumpRooms() dumpRoomMembers() // dumpContacts() console.log(` `) } /** * Cotnacts */ export function dumpContacts () { let n = 0 console.log(`

Contacts

`) for (const payload of cacheContactRawPayload.values()) { if (!payload.userName) { continue } console.log(` `) } console.log(`
# Profile Photo Wechat Name
${++n} ${payload.nickName}
`) } /** * Rooms */ export function dumpRooms () { let n = 0 console.log(`

Rooms

`) for (const payload of cacheRoomRawPayload.values()) { if (!payload.chatroomId) { continue } console.log(` `) } console.log(`
# Room Topic Members Number
${++n} ${payload.nickName} ${payload.memberCount}
`) } /** * Room Members */ export function dumpRoomMembers () { let n = 0 console.log(`

Room Members

`) for (const [roomid, memberDictPayload] of cacheRoomMemberRawPayload) { const roomPayload = cacheRoomRawPayload.get(roomid) if (!roomPayload) { continue } for (const memberWxid of Object.keys(memberDictPayload)) { const memberPayload = memberDictPayload[memberWxid] if (!memberPayload.contactId) { continue } console.log(` `) } } } main() .catch(console.error)
# Room Topic Member Photo Member Name
${++n} ${roomPayload.nickName} ${memberPayload.nickName}