提交 85f1d024 编写于 作者: Huan (李卓桓)'s avatar Huan (李卓桓)

support account error event: emit error when identified the account is block via web login (#603)

上级 db4bac33
......@@ -119,7 +119,8 @@
"retry-promise": "1.0.0",
"selenium-webdriver": "3.5.0",
"state-switch": "0.1.13",
"ws": "3.1.0"
"ws": "3.1.0",
"xml2js": "^0.4.19"
},
"devDependencies": {
"@types/body-parser": "1.16.5",
......@@ -131,6 +132,7 @@
"@types/selenium-webdriver": "3.0.4",
"@types/sinon": "2.3.3",
"@types/ws": "3.0.2",
"@types/xml2js": "^0.4.0",
"apiai": "4.0.3",
"ava": "0.22.0",
"babel-cli": "6.26.0",
......
......@@ -16,12 +16,16 @@
* limitations under the License.
*
*/
/* tslint:disable:no-var-requires */
import { parseString } from 'xml2js'
/* tslint:disable:no-var-requires */
const retryPromise = require('retry-promise').default
import { log } from '../config'
import PuppetWeb from './puppet-web'
import {
PuppetWeb,
} from './puppet-web'
export interface MediaData {
ToUserName: string,
......@@ -532,6 +536,52 @@ export class Bridge {
throw e
})
}
/**
* <error>
* <ret>1203</ret>
* <message>当前登录环境异常。为了你的帐号安全,暂时不能登录web微信。你可以通过手机客户端或者windows微信登录。</message>
* </error>
*/
public async blockedMessageBody(): Promise<string | null> {
log.silly('PuppetWebBridge', 'blockedMessageBody()')
const text = await this.execute('return document.body.innerText')
return new Promise<string | null>((resolve, reject) => {
parseString(text, { explicitArray: false }, (err, obj) => {
if (err) {
return resolve(null)
}
if (!obj.error) {
return resolve(null)
}
const code = obj.error.code
const message = obj.error.message
if (code === 1203) {
// <error>
// <ret>1203</ret>
// <message>当前登录环境异常。为了你的帐号安全,暂时不能登录web微信。你可以通过手机客户端或者windows微信登录。</message>
// </error>
return resolve(message)
}
return resolve(message) // other error message
})
})
}
public async blockedMessageAlert(): Promise<string | null> {
log.silly('PuppetWebBridge', 'blockedMessageAlert()')
const driver = this.puppet.browser.driver
return new Promise<string | null>(async (resolve, reject) => {
const alert = driver.switchTo().alert()
alert.catch(() => resolve(null))
alert.then(() => {
alert.getText().then(resolve)
})
})
}
}
/* tslint:disable:jsdoc-format */
......
......@@ -25,6 +25,7 @@ import {
Options,
promise as promiseManager,
Session,
TargetLocator,
WebDriver,
} from 'selenium-webdriver'
......@@ -423,10 +424,12 @@ export class BrowserDriver {
public manage(): Options { return this.driver.manage() }
public navigate(): Navigation { return this.driver.navigate() }
public quit() { return this.driver.quit() }
public switchTo() { return this.driver.switchTo() }
}
// export default BrowserDriver
export {
IWebDriverOptionsCookie,
Session,
TargetLocator,
}
......@@ -30,7 +30,9 @@ import {
Message,
MediaMessage,
} from '../message'
import Puppet from '../puppet'
import {
Puppet,
} from '../puppet'
import Room from '../room'
import UtilLib from '../util-lib'
......@@ -104,7 +106,17 @@ export class PuppetWeb extends Puppet {
await this.initBrowser()
log.verbose('PuppetWeb', 'initBrowser() done')
await this.initBridge()
try {
await this.initBridge()
} catch (e) {
const blockedMessage = await this.bridge.blockedMessageBody()
|| await this.bridge.blockedMessageAlert()
if (blockedMessage) {
const error = new Error(blockedMessage)
this.emit('error', error)
}
throw e
}
log.verbose('PuppetWeb', 'initBridge() done')
/**
......
......@@ -84,4 +84,18 @@ export abstract class Puppet extends EventEmitter implements Sayable {
public abstract contactAlias(contact: Contact, alias: string|null): Promise<boolean>
}
/**
* <error>
* <ret>1203</ret>
* <message>当前登录环境异常。为了你的帐号安全,暂时不能登录web微信。你可以通过手机客户端或者windows微信登录。</message>
* </error>
*/
// export enum WechatErrorCode {
// WebBlock = 1203,
// }
// export class WechatError extends Error {
// public code: WechatErrorCode
// }
export default Puppet
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册