Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
.Veneno.
wechaty
提交
4138867a
W
wechaty
项目概览
.Veneno.
/
wechaty
与 Fork 源项目一致
Fork自
wechaty / wechaty
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
wechaty
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4138867a
编写于
6月 08, 2018
作者:
Huan (李卓桓)
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1. generate 62data only if user_name changed; 2. WXInitialize again when WXGetQrCode fail
上级
fd7988c6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
68 addition
and
50 deletion
+68
-50
src/puppet-padchat/bridge.ts
src/puppet-padchat/bridge.ts
+66
-47
src/puppet-padchat/puppet-padchat.ts
src/puppet-padchat/puppet-padchat.ts
+2
-3
未找到文件。
src/puppet-padchat/bridge.ts
浏览文件 @
4138867a
...
...
@@ -74,8 +74,6 @@ export class Bridge extends EventEmitter {
// private password? : string
// private nickname? : string
// private loginSucceed = false
private
cacheRoomRawPayload
:
{
[
id
:
string
]:
PadchatRoomPayload
}
private
cacheContactRawPayload
:
{
[
id
:
string
]:
PadchatContactPayload
}
...
...
@@ -88,12 +86,12 @@ export class Bridge extends EventEmitter {
log
.
verbose
(
'
PuppetPadchatBridge
'
,
'
constructor()
'
)
// this.userId = options.token
this
.
cacheRoomRawPayload
=
{}
this
.
cacheRoomRawPayload
=
{}
this
.
cacheContactRawPayload
=
{}
this
.
autoData
=
{}
this
.
state
=
new
StateSwitch
(
'
PuppetPadchatBridge
'
)
this
.
autoData
=
{}
this
.
padchatRpc
=
new
PadchatRpc
(
options
.
endpoint
,
options
.
token
)
this
.
state
=
new
StateSwitch
(
'
PuppetPadchatBridge
'
)
}
public
async
start
():
Promise
<
void
>
{
...
...
@@ -103,7 +101,7 @@ export class Bridge extends EventEmitter {
this
.
cacheContactRawPayload
=
{}
if
(
this
.
selfId
)
{
throw
new
Error
(
'
username
exist
'
)
throw
new
Error
(
'
selfId
exist
'
)
}
this
.
state
.
on
(
'
pending
'
)
...
...
@@ -152,10 +150,11 @@ export class Bridge extends EventEmitter {
this
.
stopLogin
()
this
.
saveAutoData
()
this
.
selfId
=
username
this
.
emit
(
'
login
'
,
this
.
selfId
)
this
.
saveAutoData
(
this
.
selfId
)
}
public
logout
():
void
{
...
...
@@ -271,46 +270,58 @@ export class Bridge extends EventEmitter {
return
}
/**
* Offline, then relogin
* emit qrcode or send login request to the user.
*/
protected
async
restoreLogin
():
Promise
<
boolean
>
{
/**
* 1. The following `if/else` block: emit qrcode or send login request to the user.
*/
if
(
this
.
autoData
&&
this
.
autoData
.
token
)
{
log
.
silly
(
'
PuppetPadchatBridge
'
,
`initLogin() autoData.token exist for %s`
,
this
.
autoData
.
nick_name
||
'
no nick_name
'
,
)
// Offline, then relogin
const
autoLoginResult
=
await
this
.
padchatRpc
.
WXAutoLogin
(
this
.
autoData
.
token
)
if
(
autoLoginResult
)
{
if
(
autoLoginResult
.
status
===
0
)
{
/**
* 1.1 Auto Login Success, return username as the result
*/
this
.
login
(
autoLoginResult
.
user_name
)
return
true
log
.
verbose
(
'
PuppetPadchatBridge
'
,
`initLogin()`
)
}
else
{
/**
* 1.2. Send Login Request to User to be confirm(the same as the user had scaned the QrCode)
*/
const
loginRequestResult
=
await
this
.
padchatRpc
.
WXLoginRequest
(
this
.
autoData
.
token
)
if
(
!
loginRequestResult
||
loginRequestResult
.
status
!==
0
)
{
/**
* 1.2.1 Login Request Not Valid, emit QrCode for scan.
*/
await
this
.
emitLoginQrCode
()
}
}
}
else
{
if
(
!
this
.
autoData
||
!
this
.
autoData
.
token
)
{
return
false
}
log
.
silly
(
'
PuppetPadchatBridge
'
,
`initLogin() autoData.token exist for %s`
,
this
.
autoData
.
nick_name
||
'
no nick_name
'
,
)
const
autoLoginResult
=
await
this
.
padchatRpc
.
WXAutoLogin
(
this
.
autoData
.
token
)
if
(
!
autoLoginResult
)
{
/**
* 1. No Auto Login, emit QrCode for scan
*/
await
this
.
emitLoginQrCode
()
return
false
}
if
(
autoLoginResult
.
status
===
0
)
{
/**
* 2 Auto Login Success
*/
this
.
login
(
autoLoginResult
.
user_name
)
return
true
}
else
{
/**
* 3. Send Login Request to User to be confirm(the same as the user had scaned the QrCode)
*/
const
loginRequestResult
=
await
this
.
padchatRpc
.
WXLoginRequest
(
this
.
autoData
.
token
)
if
(
!
loginRequestResult
||
loginRequestResult
.
status
!==
0
)
{
/**
*
1.3. No Auto Login, emit QrCode for scan
*
3.1 Login Request Not Valid, emit QrCode for scan.
*/
await
this
.
emitLoginQrCode
()
return
false
}
else
{
/**
* 3.2 Login Request Valid, wait user to confirm on the phone.
*/
return
false
}
}
return
false
}
protected
async
emitLoginQrCode
():
Promise
<
void
>
{
...
...
@@ -322,8 +333,9 @@ export class Bridge extends EventEmitter {
const
result
=
await
this
.
padchatRpc
.
WXGetQRCode
()
if
(
!
result
)
{
// if fail, do we need to await this.WXInitialize() again???
throw
new
Error
(
'
waitLogin() WXGetQrCode() return nothing
'
)
log
.
verbose
(
'
PuppetPadchatBridge
'
,
`emitLoginQrCode() result not found. Call WXInitialize() and try again ...`
)
await
this
.
padchatRpc
.
WXInitialize
()
return
await
this
.
emitLoginQrCode
()
}
const
qrCodeText
=
await
pfHelper
.
imageBase64ToQrCode
(
result
.
qr_code
)
...
...
@@ -339,14 +351,21 @@ export class Bridge extends EventEmitter {
}
protected
async
saveAutoData
():
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPadchatBridge
'
,
`loadAutoData(
)`
)
protected
async
saveAutoData
(
selfId
:
string
):
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPadchatBridge
'
,
`loadAutoData(
%s)`
,
selfId
)
await
this
.
padchatRpc
.
WXHeartBeat
()
if
(
!
this
.
autoData
.
wxData
||
this
.
autoData
.
user_name
!==
selfId
)
{
log
.
verbose
(
'
PuppetPadchatBridge
'
,
`loadAutoData() user_name(%s) !== selfId(%s)`
,
this
.
autoData
.
user_name
,
selfId
,
)
this
.
autoData
.
wxData
=
(
await
this
.
padchatRpc
.
WXGenerateWxDat
()).
data
}
// Check 62 data. If has then use, or save 62 data here.
this
.
autoData
.
token
=
(
await
this
.
padchatRpc
.
WXGetLoginToken
()).
token
this
.
autoData
.
wxData
=
(
await
this
.
padchatRpc
.
WXGenerateWxDat
()).
data
if
(
!
this
.
autoData
.
user_name
||
!
this
.
autoData
.
wxData
||
!
this
.
autoData
.
token
)
{
throw
new
Error
(
'
autoData error
'
)
...
...
@@ -365,7 +384,7 @@ export class Bridge extends EventEmitter {
// Check for 62 data, if has, then use WXLoadWxDat
if
(
this
.
autoData
.
wxData
)
{
log
.
silly
(
'
PuppetPadchatBridge
'
,
`
start(), get
62 data`
)
log
.
silly
(
'
PuppetPadchatBridge
'
,
`
loadAutoData() load
62 data`
)
await
this
.
padchatRpc
.
WXLoadWxDat
(
this
.
autoData
.
wxData
)
}
}
...
...
src/puppet-padchat/puppet-padchat.ts
浏览文件 @
4138867a
...
...
@@ -115,7 +115,6 @@ export class PuppetPadchat extends Puppet {
memory
:
this
.
options
.
memory
,
token
:
WECHATY_PUPPET_PADCHAT_TOKEN
,
endpoint
:
WECHATY_PUPPET_PADCHAT_ENDPOINT
,
// profile: profile, // should be profile in the future
})
}
...
...
@@ -263,7 +262,7 @@ export class PuppetPadchat extends Puppet {
this
.
emit
(
'
logout
'
,
this
.
id
)
// becore we will throw above by logonoff() when this.user===undefined
this
.
id
=
undefined
// TODO: this.bridge.logout
await
this
.
bridge
.
logout
()
}
/**
...
...
@@ -381,7 +380,7 @@ export class PuppetPadchat extends Puppet {
log
.
verbose
(
'
PuppetPadchat
'
,
'
messageSend(%s, %s)
'
,
receiver
,
text
)
const
id
=
receiver
.
contactId
||
receiver
.
roomId
if
(
!
id
)
{
throw
Error
(
'
N
o id
'
)
throw
Error
(
'
n
o id
'
)
}
await
this
.
bridge
.
WXSendMsg
(
id
,
text
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录