diff --git a/package.json b/package.json index 5e0dea486a7b69038f04887380bf120f12731c80..60e16f018f9e7d2719d7da77b4c7e76ba6430079 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "cuid": "^2.1.1", "express": "^4.16.3", "file-box": "^0.8.19", - "flash-store": "^0.4.0", + "flash-store": "^0.4.2", "fs-extra": "^6.0.1", "hot-import": "^0.2.1", "jimp": "^0.2.28", diff --git a/src/puppet-padchat/bridge.ts b/src/puppet-padchat/bridge.ts index 594758bbfe3d8cfd03c1f060fbc8768974ccc844..9cc1e03942ff235e1aedc9232ab37f91508f2805 100644 --- a/src/puppet-padchat/bridge.ts +++ b/src/puppet-padchat/bridge.ts @@ -64,7 +64,7 @@ export class Bridge extends PadchatRpc { private loginTimer?: NodeJS.Timer private selfId? : string - private selfName? : string + // private selfName? : string // private password? : string // private nickname? : string @@ -139,7 +139,16 @@ export class Bridge extends PadchatRpc { this.cacheRoomRawPayload = new FlashStoreSync(path.join(baseDir, 'room-raw-payload')) this.cacheRoomMemberRawPayload = new FlashStoreSync(path.join(baseDir, 'room-member-raw-payload')) - log.silly('PuppetPadchatBridge', 'initCache() workdir="%s"', baseDir) + await this.cacheContactRawPayload.ready() + await this.cacheRoomRawPayload.ready() + await this.cacheRoomMemberRawPayload.ready() + + log.verbose('PuppetPadchatBridge', 'initCache() inited %d Contacts, %d Rooms, %d RoomMembers, cachedir="%s"', + this.cacheContactRawPayload.size, + this.cacheRoomRawPayload.size, + this.cacheRoomMemberRawPayload.size, + baseDir, + ) } private releaseCache(): void { @@ -174,6 +183,17 @@ export class Bridge extends PadchatRpc { // await this.padchatRpc.start() await super.start() + this.on('padchat-logout', () => { + if (this.selfId) { + this.emit('logout') + } else { + /** + * PadchatRpc will receive 'logout' message multiple times when the server is logouted. + */ + log.warn('PuppetPadchatBridge', 'start() on(padchat-logout) received but selfId is undefined') + } + }) + // this.padchatRpc.on('message', messageRawPayload => { // log.silly('PuppetPadchatBridge', 'start() padchatRpc.on(message)') // this.emit('message', messageRawPayload) @@ -218,9 +238,9 @@ export class Bridge extends PadchatRpc { throw new Error('userId exist') } this.selfId = userId - if (userName) { - this.selfName = userName - } + // if (userName) { + // this.selfName = userName + // } await this.stopCheckScan() @@ -492,7 +512,7 @@ export class Bridge extends PadchatRpc { // const result = await this.padchatRpc.WXGetQRCode() const result = await this.WXGetQRCode() - if (!result) { + if (!result || !result.qr_code) { log.verbose('PuppetPadchatBridge', `emitLoginQrCode() result not found. Call WXInitialize() and try again ...`) // await this.padchatRpc.WXInitialize() await this.WXInitialize() diff --git a/src/puppet-padchat/config.ts b/src/puppet-padchat/config.ts index 07a390bc9df0df5bbec94122fe0de0be716e8006..0092fb683f0809c6fecb734d144ba88387ab99e0 100644 --- a/src/puppet-padchat/config.ts +++ b/src/puppet-padchat/config.ts @@ -4,22 +4,25 @@ import { export const WECHATY_PUPPET_PADCHAT_ENDPOINT = process.env['WECHATY_PUPPET_PADCHAT_ENDPOINT'] || 'ws://54.223.36.77:9091/wx' -const WECHATY_PUPPET_PADCHAT_TOKEN = process.env['WECHATY_PUPPET_PADCHAT_TOKEN'] as string -if (!WECHATY_PUPPET_PADCHAT_TOKEN) { - log.error('PuppetPadchatConfig', ` +function padchatToken() { + const token = process.env['WECHATY_PUPPET_PADCHAT_TOKEN'] as string + if (!token) { + log.error('PuppetPadchatConfig', ` - WECHATY_PUPPET_PADCHAT_TOKEN environment variable not found. + WECHATY_PUPPET_PADCHAT_TOKEN environment variable not found. - PuppetPadchat need a token before it can be used, - Please set WECHATY_PUPPET_PADCHAT_TOKEN then retry again. + PuppetPadchat need a token before it can be used, + Please set WECHATY_PUPPET_PADCHAT_TOKEN then retry again. - Learn more about it at: https://github.com/Chatie/wechaty/issues/1296 + Learn more about it at: https://github.com/Chatie/wechaty/issues/1296 - `) - process.exit(1) + `) + throw new Error('set WECHATY_PUPPET_PADCHAT_TOKEN and try again') + } + return token } export { - WECHATY_PUPPET_PADCHAT_TOKEN, + padchatToken, } diff --git a/src/puppet-padchat/padchat-rpc.ts b/src/puppet-padchat/padchat-rpc.ts index 16976325d4fbe2f1c38d4c014093ba120648319e..b0733dc6fda934a578bdf1ab175ea8ddcff385da 100644 --- a/src/puppet-padchat/padchat-rpc.ts +++ b/src/puppet-padchat/padchat-rpc.ts @@ -205,7 +205,7 @@ export class PadchatRpc extends EventEmitter { payload.type, JSON.stringify(payload), ) - this.emit('logout', payload.msg) + this.emit('padchat-logout', payload.msg) return } @@ -259,11 +259,11 @@ export class PadchatRpc extends EventEmitter { // ) // log.silly('PadchatRpc', 'onSocketPadchat(%s)', JSON.stringify(padchatPayload).substr(0, 500)) - if (padchatPayload.type === PadchatPayloadType.Logout) { - // this.emit('logout', this.selfId()) - console.log('onSocketPadchat: ', JSON.stringify(padchatPayload)) - this.emit('logout') - } + // if (padchatPayload.type === PadchatPayloadType.Logout) { + // // this.emit('logout', this.selfId()) + // console.log('onSocketPadchat: ', JSON.stringify(padchatPayload)) + // this.emit('logout') + // } let result: any diff --git a/src/puppet-padchat/puppet-padchat.ts b/src/puppet-padchat/puppet-padchat.ts index d3118efb74941ecbcdb102750a29ed5a8bc11411..9a25bc95649bf0bc744cfd0442ce1e5064781f64 100644 --- a/src/puppet-padchat/puppet-padchat.ts +++ b/src/puppet-padchat/puppet-padchat.ts @@ -53,7 +53,7 @@ import { } from '../config' import { - WECHATY_PUPPET_PADCHAT_TOKEN, + padchatToken, WECHATY_PUPPET_PADCHAT_ENDPOINT, } from './config' @@ -113,7 +113,7 @@ export class PuppetPadchat extends Puppet { this.bridge = new Bridge({ memory : this.options.memory, - token : WECHATY_PUPPET_PADCHAT_TOKEN, + token : padchatToken(), endpoint : WECHATY_PUPPET_PADCHAT_ENDPOINT, }) } diff --git a/src/puppet-padchat/pure-function-helper.ts b/src/puppet-padchat/pure-function-helper.ts index fbdd469ac7645a75cacab7adc1ae7a0c217a9fd0..f3a34c8b10f3e211abb86225d2d7621fe51eeb47 100644 --- a/src/puppet-padchat/pure-function-helper.ts +++ b/src/puppet-padchat/pure-function-helper.ts @@ -327,6 +327,8 @@ export class PadchatPureFunctionHelper { } public static async imageBase64ToQrcode(base64: string): Promise { + // console.log('base64: ', typeof base64, String(base64).substr(0, 500)) + const imageBuffer = Buffer.from(base64, 'base64') const future = new Promise((resolve, reject) => {