Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
.Veneno.
wechaty
提交
aa773215
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,发现更多精彩内容 >>
提交
aa773215
编写于
5月 30, 2018
作者:
Huan (李卓桓)
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
implement more padchat methods
上级
8fa2622d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
117 addition
and
20 deletion
+117
-20
src/puppet-padchat/bridge.ts
src/puppet-padchat/bridge.ts
+8
-3
src/puppet-padchat/padchat-schemas.ts
src/puppet-padchat/padchat-schemas.ts
+3
-2
src/puppet-padchat/puppet-padchat.ts
src/puppet-padchat/puppet-padchat.ts
+106
-15
未找到文件。
src/puppet-padchat/bridge.ts
浏览文件 @
aa773215
...
@@ -149,7 +149,6 @@ export class Bridge extends EventEmitter {
...
@@ -149,7 +149,6 @@ export class Bridge extends EventEmitter {
this
.
botWs
=
new
WebSocket
(
ADDRESS
,
{
perMessageDeflate
:
true
})
this
.
botWs
=
new
WebSocket
(
ADDRESS
,
{
perMessageDeflate
:
true
})
this
.
autoData
=
options
.
autoData
||
{}
this
.
autoData
=
options
.
autoData
||
{}
// this.state = new StateSwitch('PuppetPadchatBridge', log)
}
}
private
async
sendToWebSocket
(
name
:
string
,
args
:
string
[]):
Promise
<
any
>
{
private
async
sendToWebSocket
(
name
:
string
,
args
:
string
[]):
Promise
<
any
>
{
...
@@ -271,7 +270,10 @@ export class Bridge extends EventEmitter {
...
@@ -271,7 +270,10 @@ export class Bridge extends EventEmitter {
return
result
return
result
}
}
public
async
checkSyncContactOrRoom
():
Promise
<
[
Map
<
string
,
PadchatContactRawPayload
>
,
Map
<
string
,
PadchatRoomRawPayload
>
]
>
{
public
async
checkSyncContactOrRoom
():
Promise
<
{
contactMap
:
Map
<
string
,
PadchatContactRawPayload
>
,
roomMap
:
Map
<
string
,
PadchatRoomRawPayload
>
,
}
>
{
log
.
silly
(
'
PuppetPadchat
'
,
`checkSyncContact`
)
log
.
silly
(
'
PuppetPadchat
'
,
`checkSyncContact`
)
let
cont
=
true
let
cont
=
true
...
@@ -308,7 +310,10 @@ export class Bridge extends EventEmitter {
...
@@ -308,7 +310,10 @@ export class Bridge extends EventEmitter {
log
.
info
(
'
PuppetPadchat
'
,
`checkSyncContact, not load yet, continue to WXSyncContact`
)
log
.
info
(
'
PuppetPadchat
'
,
`checkSyncContact, not load yet, continue to WXSyncContact`
)
}
}
return
[
syncContactMap
,
syncRoomMap
]
return
{
contactMap
:
syncContactMap
,
roomMap
:
syncRoomMap
,
}
}
}
/**
/**
...
...
src/puppet-padchat/padchat-schemas.ts
浏览文件 @
aa773215
...
@@ -46,8 +46,9 @@ export interface PadchatContactRawPayload {
...
@@ -46,8 +46,9 @@ export interface PadchatContactRawPayload {
* message: string, // '',
* message: string, // '',
* ticket: string, // '',
* ticket: string, // '',
*/
*/
msg_type
?:
number
,
msg_type
?
:
number
,
continue
?:
number
,
continue
?
:
number
,
ticket
?
:
string
,
big_head
:
string
,
// "http://wx.qlogo.cn/mmhead/ver_1/xfCMmibHH74xGLoyeDFJadrZXX3eOEznPefiaCa3iczxZGMwPtDuSbRQKx3Xdm18un303mf0NFia3USY2nO2VEYILw/0",
big_head
:
string
,
// "http://wx.qlogo.cn/mmhead/ver_1/xfCMmibHH74xGLoyeDFJadrZXX3eOEznPefiaCa3iczxZGMwPtDuSbRQKx3Xdm18un303mf0NFia3USY2nO2VEYILw/0",
city
:
string
,
// 'Haidian'
city
:
string
,
// 'Haidian'
...
...
src/puppet-padchat/puppet-padchat.ts
浏览文件 @
aa773215
...
@@ -17,9 +17,9 @@
...
@@ -17,9 +17,9 @@
*
*
*/
*/
import
*
as
path
from
'
path
'
//
import * as path from 'path'
import
*
as
fs
from
'
fs
'
//
import * as fs from 'fs'
import
*
as
cuid
from
'
cuid
'
//
import * as cuid from 'cuid'
import
{
import
{
FileBox
,
FileBox
,
...
@@ -459,24 +459,81 @@ export class PuppetPadchat extends Puppet {
...
@@ -459,24 +459,81 @@ export class PuppetPadchat extends Puppet {
return
payload
.
alias
||
''
return
payload
.
alias
||
''
}
}
// TODO: modify alias in bridge
await
this
.
bridge
.
WXSetUserRemark
(
contactId
,
alias
||
''
)
return
return
}
}
public
async
contactFindAll
(
query
:
ContactQueryFilter
):
Promise
<
string
[]
>
{
public
async
contactFindAll
(
query
:
ContactQueryFilter
):
Promise
<
string
[]
>
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
contactFindAll(%s)
'
,
query
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
contactFindAll(%s)
'
,
query
)
// TODO: query
const
contactMap
=
(
await
this
.
bridge
.
checkSyncContactOrRoom
())[
0
]
// const contactRawPayloadMap = (await this.bridge.checkSyncContactOrRoom()).contactMap
const
contactIdList
:
string
[]
=
[]
const
contactIdList
:
string
[]
=
[]
contactMap
.
forEach
(
async
(
value
,
key
)
=>
{
// for (const contactRawPayload in contactRawPayloadMap) {
contactIdList
.
push
(
key
)
this
.
Contact
.
load
(
key
,
await
this
.
contactRawPayloadParser
(
value
))
})
// }
// contactRawPayloadMap.forEach((value , id) => {
// contactIdList.push(id)
// this.Contact.load(
// id,
// await this.contactRawPayloadParser(value),
// )
// })
// // const payloadList = await Promise.all(
// // contactIdList.map(
// // id => this.contactPayload(id),
// // ),
// // )
// const contactList = contactIdList.filter(id => {
// await this.contactPayload(id)
// return true
// })
return
contactIdList
return
contactIdList
}
}
protected
contactQueryFilterToFunction
(
query
:
ContactQueryFilter
,
):
(
payload
:
ContactPayload
)
=>
boolean
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
contactQueryFilterToFunctionString({ %s })
'
,
Object
.
keys
(
query
)
.
map
(
k
=>
`
${
k
}
:
${
query
[
k
as
keyof
ContactQueryFilter
]}
`
)
.
join
(
'
,
'
),
)
if
(
Object
.
keys
(
query
).
length
!==
1
)
{
throw
new
Error
(
'
query only support one key. multi key support is not availble now.
'
)
}
const
filterKey
=
Object
.
keys
(
query
)[
0
]
as
keyof
ContactQueryFilter
let
filterValue
:
string
|
RegExp
|
undefined
=
query
[
filterKey
]
if
(
!
filterValue
)
{
throw
new
Error
(
'
filterValue not found
'
)
}
/**
* must be string because we need inject variable value
* into code as variable namespecialContactList
*/
let
filterFunction
:
(
payload
:
ContactPayload
)
=>
boolean
if
(
filterValue
instanceof
RegExp
)
{
const
regex
=
filterValue
filterFunction
=
(
payload
:
ContactPayload
)
=>
regex
.
test
(
payload
[
filterKey
]
||
''
)
}
else
if
(
typeof
filterValue
===
'
string
'
)
{
filterValue
=
filterValue
.
replace
(
/'/g
,
'
\\\'
'
)
filterFunction
=
(
payload
:
ContactPayload
)
=>
payload
[
filterKey
]
===
filterValue
}
else
{
throw
new
Error
(
'
unsupport name type
'
)
}
return
filterFunction
}
public
async
contactAvatar
(
contactId
:
string
):
Promise
<
FileBox
>
{
public
async
contactAvatar
(
contactId
:
string
):
Promise
<
FileBox
>
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
contactAvatar(%s)
'
,
contactId
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
contactAvatar(%s)
'
,
contactId
)
...
@@ -767,11 +824,11 @@ export class PuppetPadchat extends Puppet {
...
@@ -767,11 +824,11 @@ export class PuppetPadchat extends Puppet {
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomFindAll(%s)
'
,
query
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomFindAll(%s)
'
,
query
)
// TODO: query
// TODO: query
const
rooomMap
=
(
await
this
.
bridge
.
checkSyncContactOrRoom
())
[
1
]
const
rooomMap
=
(
await
this
.
bridge
.
checkSyncContactOrRoom
())
.
roomMap
const
roomIdList
:
string
[]
=
[]
const
roomIdList
:
string
[]
=
[]
rooomMap
.
forEach
(
async
(
value
,
key
)
=>
{
rooomMap
.
forEach
(
async
(
value
,
id
)
=>
{
roomIdList
.
push
(
key
)
roomIdList
.
push
(
id
)
this
.
Room
.
load
(
key
,
await
this
.
roomRawPayloadParser
(
value
))
this
.
Room
.
load
(
id
,
await
this
.
roomRawPayloadParser
(
value
))
})
})
return
roomIdList
return
roomIdList
...
@@ -783,6 +840,7 @@ export class PuppetPadchat extends Puppet {
...
@@ -783,6 +840,7 @@ export class PuppetPadchat extends Puppet {
):
Promise
<
void
>
{
):
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomDel(%s, %s)
'
,
roomId
,
contactId
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomDel(%s, %s)
'
,
roomId
,
contactId
)
await
this
.
bridge
.
WXDeleteChatRoomMember
(
roomId
,
contactId
)
}
}
public
async
roomAdd
(
public
async
roomAdd
(
...
@@ -790,6 +848,7 @@ export class PuppetPadchat extends Puppet {
...
@@ -790,6 +848,7 @@ export class PuppetPadchat extends Puppet {
contactId
:
string
,
contactId
:
string
,
):
Promise
<
void
>
{
):
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomAdd(%s, %s)
'
,
roomId
,
contactId
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomAdd(%s, %s)
'
,
roomId
,
contactId
)
await
this
.
bridge
.
WXAddChatRoomMember
(
roomId
,
contactId
)
}
}
public
async
roomTopic
(
public
async
roomTopic
(
...
@@ -804,7 +863,7 @@ export class PuppetPadchat extends Puppet {
...
@@ -804,7 +863,7 @@ export class PuppetPadchat extends Puppet {
return
payload
.
topic
return
payload
.
topic
}
}
// TODO: modify
await
this
.
bridge
.
WXSetChatroomName
(
roomId
,
topic
)
return
return
}
}
...
@@ -815,11 +874,13 @@ export class PuppetPadchat extends Puppet {
...
@@ -815,11 +874,13 @@ export class PuppetPadchat extends Puppet {
):
Promise
<
string
>
{
):
Promise
<
string
>
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomCreate(%s, %s)
'
,
contactIdList
,
topic
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomCreate(%s, %s)
'
,
contactIdList
,
topic
)
// await this.bridge.crea
return
'
mock_room_id
'
return
'
mock_room_id
'
}
}
public
async
roomQuit
(
roomId
:
string
):
Promise
<
void
>
{
public
async
roomQuit
(
roomId
:
string
):
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomQuit(%s)
'
,
roomId
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
roomQuit(%s)
'
,
roomId
)
await
this
.
bridge
.
WXQuitChatRoom
(
roomId
)
}
}
/**
/**
...
@@ -832,6 +893,25 @@ export class PuppetPadchat extends Puppet {
...
@@ -832,6 +893,25 @@ export class PuppetPadchat extends Puppet {
hello
:
string
,
hello
:
string
,
):
Promise
<
void
>
{
):
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
friendRequestSend(%s, %s)
'
,
contactId
,
hello
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
friendRequestSend(%s, %s)
'
,
contactId
,
hello
)
const
rawPayload
=
await
this
.
contactRawPayload
(
contactId
)
let
strangerV1
let
strangerV2
if
(
/^v1_/i
.
test
(
rawPayload
.
stranger
))
{
strangerV1
=
rawPayload
.
stranger
}
else
if
(
/^v2_/i
.
test
(
rawPayload
.
stranger
))
{
strangerV2
=
rawPayload
.
stranger
}
else
{
throw
new
Error
(
'
stranger neither v1 nor v2!
'
)
}
await
this
.
bridge
.
WXAddUser
(
strangerV1
||
''
,
strangerV2
||
''
,
'
14
'
,
hello
,
)
}
}
public
async
friendRequestAccept
(
public
async
friendRequestAccept
(
...
@@ -839,6 +919,17 @@ export class PuppetPadchat extends Puppet {
...
@@ -839,6 +919,17 @@ export class PuppetPadchat extends Puppet {
ticket
:
string
,
ticket
:
string
,
):
Promise
<
void
>
{
):
Promise
<
void
>
{
log
.
verbose
(
'
PuppetPadchat
'
,
'
friendRequestAccept(%s, %s)
'
,
contactId
,
ticket
)
log
.
verbose
(
'
PuppetPadchat
'
,
'
friendRequestAccept(%s, %s)
'
,
contactId
,
ticket
)
const
rawPayload
=
await
this
.
contactRawPayload
(
contactId
)
if
(
!
rawPayload
.
ticket
)
{
throw
new
Error
(
'
no ticket
'
)
}
await
this
.
bridge
.
WXAcceptUser
(
rawPayload
.
stranger
,
rawPayload
.
ticket
,
)
}
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录