Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wechaty
wechaty
提交
57ec25fe
W
wechaty
项目概览
wechaty
/
wechaty
上一次同步 大约 3 年
通知
304
Star
10499
Fork
6
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
152
列表
看板
标记
里程碑
合并请求
1
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
wechaty
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
152
Issue
152
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
57ec25fe
编写于
5月 27, 2018
作者:
Huan (李卓桓)
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
code clean
上级
b15802a6
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
63 addition
and
139 deletion
+63
-139
examples/ding-dong-bot.ts
examples/ding-dong-bot.ts
+2
-2
src/profile.ts
src/profile.ts
+2
-2
src/puppet-mock/README.md
src/puppet-mock/README.md
+7
-7
src/puppet-mock/puppet-mock.ts
src/puppet-mock/puppet-mock.ts
+9
-16
src/puppet-puppeteer/bridge.ts
src/puppet-puppeteer/bridge.ts
+1
-1
src/puppet-puppeteer/puppet-puppeteer.ts
src/puppet-puppeteer/puppet-puppeteer.ts
+7
-99
src/puppet/puppet.ts
src/puppet/puppet.ts
+10
-7
src/wechaty.spec.ts
src/wechaty.spec.ts
+1
-1
src/wechaty.ts
src/wechaty.ts
+24
-4
未找到文件。
examples/ding-dong-bot.ts
浏览文件 @
57ec25fe
...
@@ -101,8 +101,8 @@ bot
...
@@ -101,8 +101,8 @@ bot
/**
/**
* 2. reply qrcode image
* 2. reply qrcode image
*/
*/
// const fileBox = FileBox.
from
Local(BOT_QR_CODE_IMAGE_FILE)
// const fileBox = FileBox.
pack
Local(BOT_QR_CODE_IMAGE_FILE)
const
fileBox
=
FileBox
.
from
Stream
(
const
fileBox
=
FileBox
.
pack
Stream
(
fs
.
createReadStream
(
BOT_QR_CODE_IMAGE_FILE
),
fs
.
createReadStream
(
BOT_QR_CODE_IMAGE_FILE
),
BOT_QR_CODE_IMAGE_FILE
,
BOT_QR_CODE_IMAGE_FILE
,
)
)
...
...
src/profile.ts
浏览文件 @
57ec25fe
...
@@ -25,7 +25,7 @@ import {
...
@@ -25,7 +25,7 @@ import {
}
from
'
./config
'
}
from
'
./config
'
export
interface
ProfileSchema
{
export
interface
ProfileSchema
{
cookies
?
:
any
[]
// cookies? : any
[
idx
:
string
]
:
any
[
idx
:
string
]
:
any
}
}
...
@@ -111,7 +111,7 @@ export class Profile {
...
@@ -111,7 +111,7 @@ export class Profile {
return
this
.
payload
[
section
]
as
any
as
T
return
this
.
payload
[
section
]
as
any
as
T
}
}
public
async
set
(
section
:
ProfileSection
,
data
:
any
):
Promise
<
void
>
{
public
async
set
<
T
=
any
>
(
section
:
ProfileSection
,
data
:
T
):
Promise
<
void
>
{
log
.
verbose
(
'
Profile
'
,
'
set(%s, %s)
'
,
section
,
data
)
log
.
verbose
(
'
Profile
'
,
'
set(%s, %s)
'
,
section
,
data
)
if
(
!
this
.
payload
)
{
if
(
!
this
.
payload
)
{
this
.
payload
=
{}
this
.
payload
=
{}
...
...
src/puppet-mock/README.md
浏览文件 @
57ec25fe
# PUPPET-MOCK
# PUPPET-MOCK
```
ts
```
ts
import
PuppetMock
from
'
wechaty-puppet-mock
'
import
PuppetMock
from
'
@chatie/wechaty-puppet-mock
'
const
wechaty
=
new
Wechaty
()
const
puppet
=
new
PuppetMock
({
const
puppet
=
new
PuppetMock
({
profile
,
profile
,
})
wechaty
,
const
wechaty
=
new
Wechaty
({
puppet
,
})
})
```
```
...
@@ -35,7 +34,8 @@ await this.state.ready('off')
...
@@ -35,7 +34,8 @@ await this.state.ready('off')
### Profile
### Profile
```
ts
```
ts
this.profile.set('config', { id: 1, key: 'xxx' })
await
this.profile.set('config', { id: 1, key: 'xxx' })
const config = await this.profile.get('config')
const config = await this.profile.get('config')
console.log(config)
// Output: { id: 1, key: 'xxx' }
```
```
src/puppet-mock/puppet-mock.ts
浏览文件 @
57ec25fe
...
@@ -23,24 +23,18 @@ import {
...
@@ -23,24 +23,18 @@ import {
}
from
'
file-box
'
}
from
'
file-box
'
import
{
import
{
// Message,
MessagePayload
,
MessagePayload
,
}
from
'
../message
'
}
from
'
../message
'
import
{
import
{
// Contact,
ContactQueryFilter
,
ContactQueryFilter
,
Gender
,
Gender
,
ContactType
,
ContactType
,
ContactPayload
,
ContactPayload
,
}
from
'
../contact
'
}
from
'
../contact
'
import
{
import
{
// Room,
RoomPayload
,
RoomPayload
,
RoomQueryFilter
,
RoomQueryFilter
,
}
from
'
../room
'
}
from
'
../room
'
// import {
// FriendRequest,
// } from '../puppet/friend-request'
import
{
import
{
Puppet
,
Puppet
,
PuppetOptions
,
PuppetOptions
,
...
@@ -65,9 +59,9 @@ export interface MockMessageRawPayload {
...
@@ -65,9 +59,9 @@ export interface MockMessageRawPayload {
}
}
export
interface
MockRoomRawPayload
{
export
interface
MockRoomRawPayload
{
topic
:
string
,
topic
:
string
,
memberList
:
string
[],
memberList
:
string
[],
owner
:
string
,
owner
Id
:
string
,
}
}
export
class
PuppetMock
extends
Puppet
{
export
class
PuppetMock
extends
Puppet
{
...
@@ -78,10 +72,6 @@ export class PuppetMock extends Puppet {
...
@@ -78,10 +72,6 @@ export class PuppetMock extends Puppet {
super
(
options
)
super
(
options
)
}
}
public
ding
(
data
?:
any
):
Promise
<
string
>
{
return
data
}
public
async
start
():
Promise
<
void
>
{
public
async
start
():
Promise
<
void
>
{
log
.
verbose
(
'
PuppetMock
'
,
`start() with
${
this
.
options
.
profile
}
`
)
log
.
verbose
(
'
PuppetMock
'
,
`start() with
${
this
.
options
.
profile
}
`
)
...
@@ -157,7 +147,7 @@ export class PuppetMock extends Puppet {
...
@@ -157,7 +147,7 @@ export class PuppetMock extends Puppet {
log
.
verbose
(
'
PuppetMock
'
,
'
contactAvatar(%s)
'
,
contactId
)
log
.
verbose
(
'
PuppetMock
'
,
'
contactAvatar(%s)
'
,
contactId
)
const
WECHATY_ICON_PNG
=
path
.
resolve
(
'
../../docs/images/wechaty-icon.png
'
)
const
WECHATY_ICON_PNG
=
path
.
resolve
(
'
../../docs/images/wechaty-icon.png
'
)
return
FileBox
.
from
Local
(
WECHATY_ICON_PNG
)
return
FileBox
.
pack
Local
(
WECHATY_ICON_PNG
)
}
}
public
async
contactRawPayload
(
id
:
string
):
Promise
<
MockContactRawPayload
>
{
public
async
contactRawPayload
(
id
:
string
):
Promise
<
MockContactRawPayload
>
{
...
@@ -240,7 +230,7 @@ export class PuppetMock extends Puppet {
...
@@ -240,7 +230,7 @@ export class PuppetMock extends Puppet {
log
.
verbose
(
'
PuppetMock
'
,
'
roomRawPayload(%s)
'
,
id
)
log
.
verbose
(
'
PuppetMock
'
,
'
roomRawPayload(%s)
'
,
id
)
const
rawPayload
:
MockRoomRawPayload
=
{
const
rawPayload
:
MockRoomRawPayload
=
{
owner
:
'
mock_room_owner_id
'
,
owner
Id
:
'
mock_room_owner_id
'
,
topic
:
'
mock topic
'
,
topic
:
'
mock topic
'
,
memberList
:
[],
memberList
:
[],
}
}
...
@@ -311,7 +301,6 @@ export class PuppetMock extends Puppet {
...
@@ -311,7 +301,6 @@ export class PuppetMock extends Puppet {
}
}
/**
/**
*
*
*
* FriendRequest
* FriendRequest
*
*
...
@@ -330,6 +319,10 @@ export class PuppetMock extends Puppet {
...
@@ -330,6 +319,10 @@ export class PuppetMock extends Puppet {
log
.
verbose
(
'
PuppetMock
'
,
'
friendRequestAccept(%s, %s)
'
,
contactId
,
ticket
)
log
.
verbose
(
'
PuppetMock
'
,
'
friendRequestAccept(%s, %s)
'
,
contactId
,
ticket
)
}
}
public
ding
(
data
?:
any
):
Promise
<
string
>
{
return
data
}
}
}
export
default
PuppetMock
export
default
PuppetMock
src/puppet-puppeteer/bridge.ts
浏览文件 @
57ec25fe
...
@@ -670,7 +670,7 @@ export class Bridge extends EventEmitter {
...
@@ -670,7 +670,7 @@ export class Bridge extends EventEmitter {
throw
e
throw
e
}
}
const
argsEncoded
=
new
Buffer
(
const
argsEncoded
=
Buffer
.
from
(
encodeURIComponent
(
encodeURIComponent
(
JSON
.
stringify
(
args
),
JSON
.
stringify
(
args
),
),
),
...
...
src/puppet-puppeteer/puppet-puppeteer.ts
浏览文件 @
57ec25fe
...
@@ -166,7 +166,7 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -166,7 +166,7 @@ export class PuppetPuppeteer extends Puppet {
}
}
}
}
p
ublic
initWatchdog
():
void
{
p
rivate
initWatchdog
():
void
{
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
initWatchdogForPuppet()
'
)
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
initWatchdogForPuppet()
'
)
const
puppet
=
this
const
puppet
=
this
...
@@ -203,7 +203,7 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -203,7 +203,7 @@ export class PuppetPuppeteer extends Puppet {
* sometimes the qrcode will not refresh, leave there expired.
* sometimes the qrcode will not refresh, leave there expired.
* so we need to refresh the page after a while
* so we need to refresh the page after a while
*/
*/
p
ublic
initWatchdogForScan
():
void
{
p
rivate
initWatchdogForScan
():
void
{
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
initWatchdogForScan()
'
)
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
initWatchdogForScan()
'
)
const
puppet
=
this
const
puppet
=
this
...
@@ -279,7 +279,7 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -279,7 +279,7 @@ export class PuppetPuppeteer extends Puppet {
}
}
}
}
p
ublic
async
initBridge
():
Promise
<
Bridge
>
{
p
rivate
async
initBridge
():
Promise
<
Bridge
>
{
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
initBridge()
'
)
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
initBridge()
'
)
if
(
this
.
state
.
off
())
{
if
(
this
.
state
.
off
())
{
...
@@ -420,7 +420,7 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -420,7 +420,7 @@ export class PuppetPuppeteer extends Puppet {
Cookie
:
cookies
.
map
(
c
=>
`
${
c
[
'
name
'
]}
=
${
c
[
'
value
'
]}
`
).
join
(
'
;
'
),
Cookie
:
cookies
.
map
(
c
=>
`
${
c
[
'
name
'
]}
=
${
c
[
'
value
'
]}
`
).
join
(
'
;
'
),
}
}
const
fileBox
=
FileBox
.
from
Remote
(
url
,
filename
,
headers
)
const
fileBox
=
FileBox
.
pack
Remote
(
url
,
filename
,
headers
)
return
fileBox
return
fileBox
}
}
...
@@ -700,7 +700,7 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -700,7 +700,7 @@ export class PuppetPuppeteer extends Puppet {
await
contact
.
ready
()
await
contact
.
ready
()
const
fileName
=
(
contact
.
name
()
||
'
unknown
'
)
+
'
-avatar.jpg
'
const
fileName
=
(
contact
.
name
()
||
'
unknown
'
)
+
'
-avatar.jpg
'
return
FileBox
.
from
Remote
(
return
FileBox
.
pack
Remote
(
avatarUrl
,
avatarUrl
,
fileName
,
fileName
,
headers
,
headers
,
...
@@ -1093,7 +1093,7 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -1093,7 +1093,7 @@ export class PuppetPuppeteer extends Puppet {
* location.host = www.chatie.io:8080
* location.host = www.chatie.io:8080
* See: https://stackoverflow.com/a/11379802/1123955
* See: https://stackoverflow.com/a/11379802/1123955
*/
*/
p
ublic
async
hostname
():
Promise
<
string
>
{
p
rivate
async
hostname
():
Promise
<
string
>
{
try
{
try
{
const
name
=
await
this
.
bridge
.
hostname
()
const
name
=
await
this
.
bridge
.
hostname
()
if
(
!
name
)
{
if
(
!
name
)
{
...
@@ -1107,7 +1107,7 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -1107,7 +1107,7 @@ export class PuppetPuppeteer extends Puppet {
}
}
}
}
p
ublic
async
cookies
():
Promise
<
Cookie
[]
>
{
p
rivate
async
cookies
():
Promise
<
Cookie
[]
>
{
return
await
this
.
bridge
.
cookies
()
return
await
this
.
bridge
.
cookies
()
}
}
...
@@ -1133,24 +1133,6 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -1133,24 +1133,6 @@ export class PuppetPuppeteer extends Puppet {
}
}
}
}
/**
*
*
*
*
*
* THE FOLLOWING COMMENT OUTED CODE
*
* IS: TO BE MERGE
*
*
*
*
*
*
*
*/
// public async readyMedia(): Promise<this> {
// public async readyMedia(): Promise<this> {
private
async
messageRawPayloadToUrl
(
private
async
messageRawPayloadToUrl
(
rawPayload
:
WebMessageRawPayload
,
rawPayload
:
WebMessageRawPayload
,
...
@@ -1248,55 +1230,11 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -1248,55 +1230,11 @@ export class PuppetPuppeteer extends Puppet {
}
}
// public async readyStream(): Promise<Readable> {
// log.verbose('PuppetPuppeteer', 'readyStream()')
// /**
// * 1. local file
// */
// try {
// const filename = this.filename()
// if (filename) {
// return fs.createReadStream(filename)
// }
// } catch (e) {
// // no filename
// }
// /**
// * 2. remote url
// */
// try {
// await this.ready()
// // FIXME: decoupling needed
// const cookies = await (this.puppet as any as PuppetPuppeteer).cookies()
// if (!this.payload.url) {
// throw new Error('no url')
// }
// log.verbose('PuppetPuppeteer', 'readyStream() url: %s', this.payload.url)
// return Misc.urlStream(this.payload.url, cookies)
// } catch (e) {
// log.warn('PuppetPuppeteer', 'readyStream() exception: %s', e.stack)
// Raven.captureException(e)
// throw e
// }
// }
private
filename
(
private
filename
(
rawPayload
:
WebMessageRawPayload
,
rawPayload
:
WebMessageRawPayload
,
):
null
|
string
{
):
null
|
string
{
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
filename()
'
)
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
filename()
'
)
// if (this.parsedPath) {
// // https://nodejs.org/api/path.html#path_path_parse_path
// const filename = path.join(
// this.parsedPath!.dir || '',
// this.parsedPath!.base || '',
// )
// log.silly('PuppetPuppeteer', 'filename()=%s, build from parsedPath', filename)
// return filename
// }
let
filename
=
rawPayload
.
FileName
||
rawPayload
.
MediaId
||
rawPayload
.
MsgId
let
filename
=
rawPayload
.
FileName
||
rawPayload
.
MediaId
||
rawPayload
.
MsgId
const
re
=
/
\.[
a-z0-9
]{1,7}
$/i
const
re
=
/
\.[
a-z0-9
]{1,7}
$/i
...
@@ -1312,27 +1250,6 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -1312,27 +1250,6 @@ export class PuppetPuppeteer extends Puppet {
return
filename
return
filename
}
}
// public ext(): string {
// const fileExt = this.extFromFile()
// if (fileExt) {
// return fileExt
// }
// const typeExt = this.extFromType()
// if (typeExt) {
// return typeExt
// }
// throw new Error('unknown ext()')
// }
// private extFromFile(): string | null {
// if (this.parsedPath && this.parsedPath.ext) {
// return this.parsedPath.ext
// }
// return null
// }
private
extname
(
private
extname
(
rawPayload
:
WebMessageRawPayload
,
rawPayload
:
WebMessageRawPayload
,
):
string
{
):
string
{
...
@@ -1386,15 +1303,6 @@ export class PuppetPuppeteer extends Puppet {
...
@@ -1386,15 +1303,6 @@ export class PuppetPuppeteer extends Puppet {
}
}
// /**
// * return the MIME Type of this MediaMessage
// *
// */
// public mimeType(): string | null {
// // getType support both 'js' & '.js' as arg
// return mime.getType(this.ext())
// }
private
async
uploadMedia
(
private
async
uploadMedia
(
file
:
FileBox
,
file
:
FileBox
,
toUserName
:
string
,
toUserName
:
string
,
...
...
src/puppet/puppet.ts
浏览文件 @
57ec25fe
...
@@ -81,8 +81,8 @@ export const PUPPET_EVENT_DICT = {
...
@@ -81,8 +81,8 @@ export const PUPPET_EVENT_DICT = {
export
type
PuppetEventName
=
keyof
typeof
PUPPET_EVENT_DICT
export
type
PuppetEventName
=
keyof
typeof
PUPPET_EVENT_DICT
export
interface
PuppetOptions
{
export
interface
PuppetOptions
{
profile
:
Profile
,
profile
:
Profile
,
wechaty
:
Wechaty
,
wechaty
:
Wechaty
,
}
}
export
interface
Receiver
{
export
interface
Receiver
{
...
@@ -134,9 +134,9 @@ export abstract class Puppet extends EventEmitter implements Sayable {
...
@@ -134,9 +134,9 @@ export abstract class Puppet extends EventEmitter implements Sayable {
* 1. Init Classes
* 1. Init Classes
*/
*/
if
(
!
this
.
options
.
wechaty
.
Contact
if
(
!
this
.
options
.
wechaty
.
Contact
||
!
this
.
options
.
wechaty
.
FriendRequest
||
!
this
.
options
.
wechaty
.
FriendRequest
||
!
this
.
options
.
wechaty
.
Message
||
!
this
.
options
.
wechaty
.
Message
||
!
this
.
options
.
wechaty
.
Room
||
!
this
.
options
.
wechaty
.
Room
)
{
)
{
throw
new
Error
(
'
wechaty classes are not inited
'
)
throw
new
Error
(
'
wechaty classes are not inited
'
)
}
}
...
@@ -146,6 +146,8 @@ export abstract class Puppet extends EventEmitter implements Sayable {
...
@@ -146,6 +146,8 @@ export abstract class Puppet extends EventEmitter implements Sayable {
this
.
Message
=
this
.
options
.
wechaty
.
Message
this
.
Message
=
this
.
options
.
wechaty
.
Message
this
.
Room
=
this
.
options
.
wechaty
.
Room
this
.
Room
=
this
.
options
.
wechaty
.
Room
this
.
options
.
wechaty
.
attach
(
this
)
/**
/**
* 2. Load the package.json for Puppet Plugin version range matching
* 2. Load the package.json for Puppet Plugin version range matching
*
*
...
@@ -168,7 +170,7 @@ export abstract class Puppet extends EventEmitter implements Sayable {
...
@@ -168,7 +170,7 @@ export abstract class Puppet extends EventEmitter implements Sayable {
}
}
public
emit
(
event
:
'
error
'
,
e
:
Error
)
:
boolean
public
emit
(
event
:
'
error
'
,
e
:
Error
)
:
boolean
public
emit
(
event
:
'
friend
'
,
request
:
FriendRequest
)
:
boolean
public
emit
(
event
:
'
friend
'
,
request
:
FriendRequest
)
:
boolean
public
emit
(
event
:
'
heartbeat
'
,
data
:
any
)
:
boolean
public
emit
(
event
:
'
heartbeat
'
,
data
:
any
)
:
boolean
public
emit
(
event
:
'
login
'
,
user
:
Contact
)
:
boolean
public
emit
(
event
:
'
login
'
,
user
:
Contact
)
:
boolean
public
emit
(
event
:
'
logout
'
,
user
:
Contact
|
string
)
:
boolean
public
emit
(
event
:
'
logout
'
,
user
:
Contact
|
string
)
:
boolean
...
@@ -178,7 +180,8 @@ export abstract class Puppet extends EventEmitter implements Sayable {
...
@@ -178,7 +180,8 @@ export abstract class Puppet extends EventEmitter implements Sayable {
public
emit
(
event
:
'
room-topic
'
,
room
:
Room
,
topic
:
string
,
oldTopic
:
string
,
changer
:
Contact
)
:
boolean
public
emit
(
event
:
'
room-topic
'
,
room
:
Room
,
topic
:
string
,
oldTopic
:
string
,
changer
:
Contact
)
:
boolean
public
emit
(
event
:
'
scan
'
,
url
:
string
,
code
:
number
)
:
boolean
public
emit
(
event
:
'
scan
'
,
url
:
string
,
code
:
number
)
:
boolean
public
emit
(
event
:
'
watchdog
'
,
food
:
WatchdogFood
)
:
boolean
public
emit
(
event
:
'
watchdog
'
,
food
:
WatchdogFood
)
:
boolean
public
emit
(
event
:
never
,
...
args
:
never
[])
:
never
public
emit
(
event
:
never
,
...
args
:
never
[]):
never
public
emit
(
public
emit
(
event
:
PuppetEventName
,
event
:
PuppetEventName
,
...
...
src/wechaty.spec.ts
浏览文件 @
57ec25fe
...
@@ -66,7 +66,7 @@ test('Config setting', async t => {
...
@@ -66,7 +66,7 @@ test('Config setting', async t => {
})
})
test
(
'
event:start/stop
'
,
async
t
=>
{
test
(
'
event:start/stop
'
,
async
t
=>
{
const
wechaty
=
Wechaty
.
instance
()
const
wechaty
=
new
Wechaty
()
const
startSpy
=
sinon
.
spy
()
const
startSpy
=
sinon
.
spy
()
const
stopSpy
=
sinon
.
spy
()
const
stopSpy
=
sinon
.
spy
()
...
...
src/wechaty.ts
浏览文件 @
57ec25fe
...
@@ -145,7 +145,7 @@ export class Wechaty extends PuppetAccessory implements Sayable {
...
@@ -145,7 +145,7 @@ export class Wechaty extends PuppetAccessory implements Sayable {
options
?:
WechatyOptions
,
options
?:
WechatyOptions
,
)
{
)
{
if
(
options
&&
this
.
singletonInstance
)
{
if
(
options
&&
this
.
singletonInstance
)
{
throw
new
Error
(
'
there has already a instance. no params will be allowed any more
'
)
throw
new
Error
(
'
instance can be only set once!
'
)
}
}
if
(
!
this
.
singletonInstance
)
{
if
(
!
this
.
singletonInstance
)
{
this
.
singletonInstance
=
new
Wechaty
(
options
)
this
.
singletonInstance
=
new
Wechaty
(
options
)
...
@@ -162,8 +162,6 @@ export class Wechaty extends PuppetAccessory implements Sayable {
...
@@ -162,8 +162,6 @@ export class Wechaty extends PuppetAccessory implements Sayable {
super
()
super
()
log
.
verbose
(
'
Wechaty
'
,
'
contructor()
'
)
log
.
verbose
(
'
Wechaty
'
,
'
contructor()
'
)
options
.
puppet
=
options
.
puppet
||
config
.
puppet
options
.
profile
=
options
.
profile
===
null
options
.
profile
=
options
.
profile
===
null
?
null
?
null
:
(
options
.
profile
||
config
.
default
.
DEFAULT_PROFILE
)
:
(
options
.
profile
||
config
.
default
.
DEFAULT_PROFILE
)
...
@@ -393,6 +391,27 @@ export class Wechaty extends PuppetAccessory implements Sayable {
...
@@ -393,6 +391,27 @@ export class Wechaty extends PuppetAccessory implements Sayable {
})
})
}
}
/**
* Will be called from the Puppet.
*/
public
attach
(
puppet
:
Puppet
)
{
log
.
verbose
(
'
Wechaty
'
,
'
attach(%s) this.options.puppet="%s"
'
,
puppet
,
this
.
options
.
puppet
&&
this
.
options
.
puppet
.
toString
(),
)
if
(
this
.
options
.
puppet
instanceof
Puppet
)
{
if
(
this
.
options
.
puppet
===
puppet
)
{
log
.
silly
(
'
Wechaty
'
,
'
attach(%s) called again
'
,
puppet
)
return
}
else
{
throw
new
Error
(
'
puppet can only be attached once!
'
)
}
}
this
.
options
.
puppet
=
puppet
}
/**
/**
* @private
* @private
*/
*/
...
@@ -400,7 +419,8 @@ export class Wechaty extends PuppetAccessory implements Sayable {
...
@@ -400,7 +419,8 @@ export class Wechaty extends PuppetAccessory implements Sayable {
log
.
verbose
(
'
Wechaty
'
,
'
initPuppet()
'
)
log
.
verbose
(
'
Wechaty
'
,
'
initPuppet()
'
)
if
(
!
this
.
options
.
puppet
)
{
if
(
!
this
.
options
.
puppet
)
{
throw
new
Error
(
'
no puppet
'
)
log
.
warn
(
'
Wechaty
'
,
'
initPuppet() using default puppet: %s
'
,
config
.
puppet
)
this
.
options
.
puppet
=
config
.
puppet
}
}
const
puppet
=
this
.
initPuppetResolver
(
this
.
options
.
puppet
)
const
puppet
=
this
.
initPuppetResolver
(
this
.
options
.
puppet
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录