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

Copy/Paste from Wechaty4u run-core.js (#69)

上级 0d89e41a
import { PuppetPuppeteer } from './puppet-puppeteer/'
import { PuppetMock } from './puppet-mock/'
// import { PuppetPadchat } from './puppet-padchat'
// import PuppetWechat4u from './puppet-wechat4u/'
import PuppetWechat4u from './puppet-wechat4u/'
/**
* Wechaty Official Puppet Plugins List
......@@ -10,7 +10,7 @@ export const PUPPET_DICT = {
mock: PuppetMock,
puppeteer: PuppetPuppeteer,
// padchat: PuppetPadchat,
// wechat4u: PuppetWechat4u,
wechat4u: PuppetWechat4u,
}
export type PuppetName = keyof typeof PUPPET_DICT
......
......@@ -30,6 +30,8 @@ import {
ContactType,
ContactPayload,
FriendRequestPayload,
RoomPayload,
// RoomQueryFilter,
} from '../puppet/'
......@@ -319,6 +321,13 @@ export class PuppetMock extends Puppet {
* FriendRequest
*
*/
public async friendRequestRawPayload(id: string) : Promise<any> {
return {id} as any
}
public async friendRequestRawPayloadParser(rawPayload: any) : Promise<FriendRequestPayload> {
return rawPayload
}
public async friendRequestSend(
contactId : string,
hello : string,
......
......@@ -195,7 +195,8 @@ async function onMessage(
switch (rawPayload.MsgType) {
case WebMessageType.VERIFYMSG:
firer.checkFriendRequest(rawPayload)
this.emit('friend', rawPayload.MsgId)
// firer.checkFriendRequest(rawPayload)
break
case WebMessageType.SYS:
......
......@@ -19,24 +19,24 @@
/* tslint:disable:no-var-requires */
// const retryPromise = require('retry-promise').default
import * as cuid from 'cuid'
// import * as cuid from 'cuid'
import {
log,
} from '../config'
import {
WebRecomendInfo,
// WebRecomendInfo,
WebMessageRawPayload,
} from './web-schemas'
import PuppetPuppeteer from './puppet-puppeteer'
import {
// FriendRequestPayload,
FriendRequestType,
FriendRequestPayloadReceive,
FriendRequestPayloadConfirm,
} from '../puppet/'
// import {
// // FriendRequestPayload,
// FriendRequestType,
// FriendRequestPayloadReceive,
// FriendRequestPayloadConfirm,
// } from '../puppet/'
const REGEX_CONFIG = {
friendConfirm: [
......@@ -101,37 +101,37 @@ export class Firer {
//
}
public async checkFriendRequest(
rawPayload : WebMessageRawPayload,
): Promise<void> {
if (!rawPayload.RecommendInfo) {
throw new Error('no RecommendInfo')
}
const recommendInfo: WebRecomendInfo = rawPayload.RecommendInfo
log.verbose('PuppetPuppeteerFirer', 'fireFriendRequest(%s)', recommendInfo)
if (!recommendInfo) {
throw new Error('no recommendInfo')
}
const contactId = recommendInfo.UserName
const hello = recommendInfo.Content
const ticket = recommendInfo.Ticket
const type = FriendRequestType.Receive
const id = cuid()
const payloadReceive: FriendRequestPayloadReceive = {
id,
contactId,
hello,
ticket,
type,
}
this.puppet.cacheFriendRequestPayload.set(id, payloadReceive)
this.puppet.emit('friend', id)
}
// public async checkFriendRequest(
// rawPayload : WebMessageRawPayload,
// ): Promise<void> {
// if (!rawPayload.RecommendInfo) {
// throw new Error('no RecommendInfo')
// }
// const recommendInfo: WebRecomendInfo = rawPayload.RecommendInfo
// log.verbose('PuppetPuppeteerFirer', 'fireFriendRequest(%s)', recommendInfo)
// if (!recommendInfo) {
// throw new Error('no recommendInfo')
// }
// const contactId = recommendInfo.UserName
// const hello = recommendInfo.Content
// const ticket = recommendInfo.Ticket
// const type = FriendRequestType.Receive
// const id = cuid()
// const payloadReceive: FriendRequestPayloadReceive = {
// id,
// contactId,
// hello,
// ticket,
// type,
// }
// this.puppet.cacheFriendRequestPayload.set(id, payloadReceive)
// this.puppet.emit('friend', id)
// }
public async checkFriendConfirm(
rawPayload : WebMessageRawPayload,
......@@ -143,20 +143,20 @@ export class Firer {
return
}
const contactId = rawPayload.FromUserName
const type = FriendRequestType.Confirm
// const contactId = rawPayload.FromUserName
// const type = FriendRequestType.Confirm
const id = cuid()
// const id = cuid()
const payloadConfirm: FriendRequestPayloadConfirm = {
id,
contactId,
type,
}
// const payloadConfirm: FriendRequestPayloadConfirm = {
// id,
// contactId,
// type,
// }
this.puppet.cacheFriendRequestPayload.set(id, payloadConfirm)
// this.puppet.cacheFriendRequestPayload.set(id, payloadConfirm)
this.puppet.emit('friend', id)
this.puppet.emit('friend', rawPayload.MsgId)
}
public async checkRoomJoin(
......
......@@ -62,6 +62,7 @@ import {
WebMessageRawPayload,
WebMediaType,
WebMessageType,
WebRecomendInfo,
// WebRoomRawMember,
WebRoomRawPayload,
} from './web-schemas'
......@@ -71,6 +72,11 @@ import {
// ContactQueryFilter,
ContactType,
FriendRequestPayload,
FriendRequestPayloadReceive,
FriendRequestPayloadConfirm,
FriendRequestType,
MessagePayload,
MessageType,
......@@ -1110,6 +1116,51 @@ export class PuppetPuppeteer extends Puppet {
* FriendRequest
*
*/
public async friendRequestRawPayload(id: string): Promise<WebMessageRawPayload> {
log.warn('PuppetPuppeteer', 'friendRequestRawPayload(%s)', id)
const rawPayload = await this.bridge.getMessage(id)
if (!rawPayload) {
throw new Error('no rawPayload')
}
return rawPayload
}
public async friendRequestRawPayloadParser(rawPayload: WebMessageRawPayload): Promise<FriendRequestPayload> {
log.warn('PuppetPuppeteer', 'friendRequestRawPayloadParser(%s)', rawPayload)
switch (rawPayload.MsgType) {
case WebMessageType.VERIFYMSG:
if (!rawPayload.RecommendInfo) {
throw new Error('no RecommendInfo')
}
const recommendInfo: WebRecomendInfo = rawPayload.RecommendInfo
if (!recommendInfo) {
throw new Error('no recommendInfo')
}
const payloadReceive: FriendRequestPayloadReceive = {
id : rawPayload.MsgId,
contactId : recommendInfo.UserName,
hello : recommendInfo.Content,
ticket : recommendInfo.Ticket,
type : FriendRequestType.Receive,
}
return payloadReceive
case WebMessageType.SYS:
const payloadConfirm: FriendRequestPayloadConfirm = {
id : rawPayload.MsgId,
contactId : rawPayload.FromUserName,
type : FriendRequestType.Confirm,
}
return payloadConfirm
default:
throw new Error('not supported friend request message raw payload')
}
}
public async friendRequestSend(
contactId : string,
hello : string,
......@@ -1306,7 +1357,7 @@ export class PuppetPuppeteer extends Puppet {
private filename(
rawPayload: WebMessageRawPayload,
): null | string {
): string {
log.verbose('PuppetPuppeteer', 'filename()')
let filename = rawPayload.FileName || rawPayload.MediaId || rawPayload.MsgId
......
# WECHATY-PUPPET-WECHAT4U
## NOTES
```js
/**
* 发送撤回消息请求
*/
bot.sendMsg('测试撤回', ToUserName)
.then(res => {
// 需要取得待撤回消息的MsgID
return bot.revokeMsg(res.MsgID, ToUserName)
})
.catch(err => {
console.log(err)
})
```
......@@ -16,10 +16,10 @@
* limitations under the License.
*
*/
import { PuppetMock } from './puppet-mock'
import { PuppetWechat4u } from './puppet-wechat4u'
export {
PuppetMock,
PuppetWechat4u,
}
export default PuppetMock
export default PuppetWechat4u
......@@ -18,7 +18,7 @@ import {
// ContactPayloadFilterFactory,
} from '../puppet/schemas/contact'
import {
// FriendRequestPayload,
FriendRequestPayload,
} from '../puppet/schemas/friend-request'
import {
MessagePayload,
......@@ -62,6 +62,9 @@ class PuppetTest extends Puppet {
* FriendRequest
*
*/
public async friendRequestRawPayload(id: string) : Promise<any> { return {id} as any }
public async friendRequestRawPayloadParser(rawPayload: any) : Promise<FriendRequestPayload> { return rawPayload }
public async friendRequestSend(contactId: string, hello?: string) : Promise<void> { return {contactId, hello} as any }
public async friendRequestAccept(contactId: string, ticket: string) : Promise<void> { return {contactId, ticket} as any }
......
......@@ -71,7 +71,11 @@ import {
let PUPPET_COUNTER = 0
/**
* Abstract Puppet Class
*
* Puppet Base Class
*
* See: https://github.com/Chatie/wechaty/wiki/Puppet
*
*/
export abstract class Puppet extends EventEmitter implements Sayable {
......@@ -492,6 +496,9 @@ export abstract class Puppet extends EventEmitter implements Sayable {
public abstract async friendRequestSend(contactId: string, hello?: string) : Promise<void>
public abstract async friendRequestAccept(contactId: string, ticket: string) : Promise<void>
public abstract async friendRequestRawPayload(id: string) : Promise<any>
public abstract async friendRequestRawPayloadParser(rawPayload: any) : Promise<FriendRequestPayload>
public async friendRequestPayload(
id: string,
noCache = false,
......@@ -516,7 +523,12 @@ export abstract class Puppet extends EventEmitter implements Sayable {
log.silly('Puppet', 'friendRequestPayload() cache MISS')
throw new Error('no payload')
const rawPayload = await this.friendRequestRawPayload(id)
const payload = await this.friendRequestRawPayloadParser(rawPayload)
this.cacheFriendRequestPayload.set(id, payload)
return payload
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册