Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
.www.
wechaty
提交
4f104db5
W
wechaty
项目概览
.www.
/
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,发现更多精彩内容 >>
提交
4f104db5
编写于
6月 01, 2018
作者:
Huan (李卓桓)
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
minor fixes
上级
5e1d4c38
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
68 addition
and
42 deletion
+68
-42
examples/ding-dong-bot.ts
examples/ding-dong-bot.ts
+2
-2
package.json
package.json
+1
-1
src/friend-request.ts
src/friend-request.ts
+1
-5
src/message.ts
src/message.ts
+3
-2
src/puppet-puppeteer/bridge.ts
src/puppet-puppeteer/bridge.ts
+23
-16
src/puppet-puppeteer/firer.ts
src/puppet-puppeteer/firer.ts
+1
-1
src/puppet-puppeteer/puppet-puppeteer.ts
src/puppet-puppeteer/puppet-puppeteer.ts
+19
-7
src/puppet/puppet.ts
src/puppet/puppet.ts
+16
-0
src/room.ts
src/room.ts
+2
-8
未找到文件。
examples/ding-dong-bot.ts
浏览文件 @
4f104db5
...
...
@@ -90,7 +90,7 @@ bot
* 1. reply 'dong'
*/
log
.
info
(
'
Bot
'
,
'
REPLY: dong
'
)
msg
.
say
(
'
dong
'
)
await
msg
.
say
(
'
dong
'
)
const
joinWechaty
=
`Join Wechaty Developers' Community\n\n`
+
`Wechaty is used in many ChatBot projects by hundreds of developers.\n\n`
+
...
...
@@ -107,7 +107,7 @@ bot
BOT_QR_CODE_IMAGE_FILE
,
)
log
.
info
(
'
Bot
'
,
'
REPLY: %s
'
,
fileBox
)
log
.
info
(
'
Bot
'
,
'
REPLY: %s
'
,
fileBox
.
toString
()
)
await
msg
.
say
(
fileBox
)
/**
...
...
package.json
浏览文件 @
4f104db5
...
...
@@ -98,7 +98,7 @@
"
clone-class
"
:
"
^0.6.11
"
,
"
cuid
"
:
"
^2.1.1
"
,
"
express
"
:
"
^4.16.3
"
,
"
file-box
"
:
"
^0.8.
3
"
,
"
file-box
"
:
"
^0.8.
14
"
,
"
hot-import
"
:
"
^0.2.1
"
,
"
lru-cache
"
:
"
^4.1.3
"
,
"
memory-card
"
:
"
0.0.6
"
,
...
...
src/friend-request.ts
浏览文件 @
4f104db5
...
...
@@ -61,11 +61,7 @@ export class FriendRequest extends Accessory {
id
:
string
,
):
T
[
'
prototype
'
]
{
const
newFriendRequest
=
new
(
this
as
any
)(
id
)
const
hitPayload
=
this
.
puppet
.
cacheFriendRequestPayload
.
get
(
id
)
if
(
hitPayload
)
{
newFriendRequest
.
payload
=
hitPayload
}
newFriendRequest
.
payload
=
this
.
puppet
.
cacheFriendRequestPayload
.
get
(
id
)
return
newFriendRequest
}
...
...
src/message.ts
浏览文件 @
4f104db5
...
...
@@ -152,15 +152,16 @@ export class Message extends Accessory implements Sayable {
// `#${MessageDirection[this.direction]}`,
`#
${
MessageType
[
this
.
type
()]}
`
,
'
(
'
,
this
.
room
()
?
(
this
.
room
()
+
'
▲
'
)
:
''
,
this
.
from
(),
this
.
room
()
?
'
@
'
+
this
.
room
()
:
'
'
,
'
►
'
,
this
.
to
(),
'
)
'
,
]
if
(
this
.
type
()
===
Message
.
Type
.
Text
)
{
msgStrList
.
push
(
`<
${
this
.
text
()}
>`
)
}
else
{
log
.
verbose
(
'
Message
'
,
'
toString() this.type()=%s
'
,
Message
.
Type
[
this
.
type
()])
log
.
silly
(
'
Message
'
,
'
toString() for message type:
'
,
Message
.
Type
[
this
.
type
()])
if
(
!
this
.
payload
)
{
throw
new
Error
(
'
no payload
'
)
...
...
src/puppet-puppeteer/bridge.ts
浏览文件 @
4f104db5
...
...
@@ -528,8 +528,29 @@ export class Bridge extends EventEmitter {
}
public
async
getMessage
(
id
:
string
):
Promise
<
WebMessageRawPayload
>
{
const
rawPayload
=
await
this
.
proxyWechaty
(
'
getMessage
'
,
id
)
return
rawPayload
try
{
return
await
Misc
.
retry
(
async
(
retry
,
attempt
)
=>
{
log
.
silly
(
'
PuppetPuppeteerBridge
'
,
'
getMessage(%s) retry attempt %d
'
,
id
,
attempt
,
)
try
{
const
rawPayload
=
await
this
.
proxyWechaty
(
'
getMessage
'
,
id
)
if
(
rawPayload
&&
Object
.
keys
(
rawPayload
).
length
>
0
)
{
return
rawPayload
}
throw
new
Error
(
'
got empty return value at attempt:
'
+
attempt
)
}
catch
(
e
)
{
log
.
verbose
(
'
PuppetPuppeteerBridge
'
,
'
getMessage() proxyWechaty(getMessage, %s) exception: %s
'
,
id
,
e
.
message
)
retry
(
e
)
}
})
}
catch
(
e
)
{
log
.
error
(
'
PuppetPuppeteerBridge
'
,
'
promiseRetry() getContact() finally FAIL: %s
'
,
e
.
message
)
throw
e
}
}
public
async
getContact
(
id
:
string
):
Promise
<
WebContactRawPayload
|
WebRoomRawPayload
>
{
...
...
@@ -552,20 +573,6 @@ export class Bridge extends EventEmitter {
}
})
// return await retryPromise({ max: max, backoff: backoff }, async (attempt: number) => {
// log.silly('PuppetPuppeteerBridge', 'getContact() retryPromise: attampt %d/%d time for timeout %d',
// attempt, max, timeout)
// try {
// const r = await this.proxyWechaty('getContact', id)
// if (r) {
// return r
// }
// throw new Error('got empty return value at attempt: ' + attempt)
// } catch (e) {
// log.silly('PuppetPuppeteerBridge', 'proxyWechaty(getContact, %s) exception: %s', id, e.message)
// throw e
// }
// })
}
catch
(
e
)
{
log
.
error
(
'
PuppetPuppeteerBridge
'
,
'
promiseRetry() getContact() finally FAIL: %s
'
,
e
.
message
)
throw
e
...
...
src/puppet-puppeteer/firer.ts
浏览文件 @
4f104db5
...
...
@@ -308,7 +308,7 @@ export class Firer {
try
{
[
leaverName
,
removerName
]
=
this
.
parseRoomLeave
(
rawPayload
.
Content
)
}
catch
(
e
)
{
log
.
warn
(
'
PuppetPuppeteerFirer
'
,
'
fireRoomLeave() exception:
%s
'
,
e
.
message
)
log
.
silly
(
'
PuppetPuppeteerFirer
'
,
'
fireRoomLeave()
%s
'
,
e
.
message
)
return
false
}
log
.
silly
(
'
PuppetPuppeteerFirer
'
,
'
fireRoomLeave() got leaverName: %s
'
,
leaverName
)
...
...
src/puppet-puppeteer/puppet-puppeteer.ts
浏览文件 @
4f104db5
...
...
@@ -355,6 +355,10 @@ export class PuppetPuppeteer extends Puppet {
}
else
{
throw
new
Error
(
'
parse found a room message, but neither FromUserName nor ToUserName is a room(/^@@/)
'
)
}
// console.log('rawPayload.FromUserName: ', rawPayload.FromUserName)
// console.log('rawPayload.ToUserName: ', rawPayload.ToUserName)
// console.log('rawPayload.MMPeerUserName: ', rawPayload.MMPeerUserName)
}
if
(
rawPayload
.
ToUserName
)
{
...
...
@@ -576,7 +580,7 @@ export class PuppetPuppeteer extends Puppet {
receiver
:
Receiver
,
text
:
string
,
):
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
messageSendText(receiver=%s, text=%s)
'
,
receiver
,
text
)
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
messageSendText(receiver=%s, text=%s)
'
,
JSON
.
stringify
(
receiver
)
,
text
)
let
destinationId
...
...
@@ -860,7 +864,7 @@ export class PuppetPuppeteer extends Puppet {
// let currNum = rawPayload.MemberList && rawPayload.MemberList.length || 0
// let prevNum = room.memberList().length // rawPayload && rawPayload.MemberList && this.rawObj.MemberList.length || 0
let
prevLength
=
-
1
let
prevLength
=
0
/**
* @todo use Misc.retry() to replace the following loop
...
...
@@ -870,19 +874,27 @@ export class PuppetPuppeteer extends Puppet {
rawPayload
=
await
this
.
bridge
.
getContact
(
id
)
as
undefined
|
WebRoomRawPayload
if
(
rawPayload
)
{
const
currLength
=
rawPayload
.
MemberList
&&
rawPayload
.
MemberList
.
length
||
0
const
currLength
=
rawPayload
.
MemberList
&&
rawPayload
.
MemberList
.
length
||
-
1
log
.
silly
(
'
PuppetPuppeteer
'
,
`roomPayload() this.bridge.getContact(%s) MemberList.length:
%d
at ttl:%d`
,
log
.
silly
(
'
PuppetPuppeteer
'
,
`roomPayload() this.bridge.getContact(%s) MemberList.length:
(prev:%d, curr:%d)
at ttl:%d`
,
id
,
prevLength
,
currLength
,
ttl
,
)
if
(
prevLength
===
currLength
)
{
log
.
silly
(
'
PuppetPuppeteer
'
,
`roomPayload() puppet.getContact(
${
id
}
) done at ttl:%d`
,
ttl
)
log
.
silly
(
'
PuppetPuppeteer
'
,
`roomPayload() puppet.getContact(
%s) done at ttl:%d with length:%d`
,
this
.
id
,
ttl
,
currLength
)
return
rawPayload
}
prevLength
=
currLength
if
(
currLength
>=
prevLength
)
{
prevLength
=
currLength
}
else
{
log
.
warn
(
'
PuppetPuppeteer
'
,
'
roomRawPayload() currLength(%d) <= prevLength(%d) ???
'
,
currLength
,
prevLength
,
)
}
}
log
.
silly
(
'
PuppetPuppeteer
'
,
`roomPayload() puppet.getContact(
${
id
}
) retry at ttl:%d`
,
ttl
)
...
...
@@ -1589,7 +1601,7 @@ export class PuppetPuppeteer extends Puppet {
file
:
FileBox
,
):
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPuppeteer
'
,
'
messageSendFile(receiver=%s, file=%s)
'
,
receiver
,
JSON
.
stringify
(
receiver
)
,
file
.
toString
(),
)
...
...
src/puppet/puppet.ts
浏览文件 @
4f104db5
...
...
@@ -457,6 +457,10 @@ export abstract class Puppet extends EventEmitter implements Sayable {
):
Promise
<
ContactPayload
>
{
log
.
silly
(
'
Puppet
'
,
'
contactPayload(id=%s, noCache=%s) @ %s
'
,
id
,
noCache
,
this
)
if
(
!
id
)
{
throw
new
Error
(
'
no id
'
)
}
if
(
noCache
)
{
log
.
silly
(
'
Puppet
'
,
'
contactPayload() cache PURGE
'
)
this
.
cacheContactPayload
.
del
(
id
)
...
...
@@ -494,6 +498,10 @@ export abstract class Puppet extends EventEmitter implements Sayable {
):
Promise
<
FriendRequestPayload
>
{
log
.
verbose
(
'
Puppet
'
,
'
friendRequestPayload(id=%s, noCache=%s)
'
,
id
,
noCache
)
if
(
!
id
)
{
throw
new
Error
(
'
no id
'
)
}
if
(
noCache
)
{
log
.
silly
(
'
Puppet
'
,
'
friendRequestPayload() cache PURGE
'
)
this
.
cacheFriendRequestPayload
.
del
(
id
)
...
...
@@ -530,6 +538,10 @@ export abstract class Puppet extends EventEmitter implements Sayable {
):
Promise
<
MessagePayload
>
{
log
.
verbose
(
'
Puppet
'
,
'
messagePayload(id=%s, noCache=%s)
'
,
id
,
noCache
)
if
(
!
id
)
{
throw
new
Error
(
'
no id
'
)
}
if
(
noCache
)
{
log
.
silly
(
'
Puppet
'
,
'
messagePayload() cache PURGE
'
)
this
.
cacheMessagePayload
.
del
(
id
)
...
...
@@ -687,6 +699,10 @@ export abstract class Puppet extends EventEmitter implements Sayable {
):
Promise
<
RoomPayload
>
{
log
.
verbose
(
'
Puppet
'
,
'
roomPayload(id=%s, noCache=%s)
'
,
id
,
noCache
)
if
(
!
id
)
{
throw
new
Error
(
'
no id
'
)
}
if
(
noCache
)
{
log
.
silly
(
'
Puppet
'
,
'
roomPayload() cache PURGE
'
)
this
.
cacheRoomPayload
.
del
(
id
)
...
...
src/room.ts
浏览文件 @
4f104db5
...
...
@@ -219,7 +219,7 @@ export class Room extends Accessory implements Sayable {
*/
public
toString
()
{
if
(
this
.
payload
&&
this
.
payload
.
topic
)
{
return
`Room<
${
this
.
topic
()
}
>`
return
`Room<
${
this
.
payload
.
topic
}
>`
}
return
`Room<
${
this
.
id
||
''
}
>`
}
...
...
@@ -776,13 +776,7 @@ export class Room extends Accessory implements Sayable {
* @returns {Promise<void>}
*/
public
async
sync
():
Promise
<
void
>
{
// TODO: make it work with the old dirty payload when in re-syncing...
// if (this.isReady()) {
// this.dirtyObj = this.payload
// }
this
.
payload
=
undefined
await
this
.
ready
()
await
this
.
ready
(
true
)
}
/**
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录