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

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

上级 0d89e41a
import { PuppetPuppeteer } from './puppet-puppeteer/' import { PuppetPuppeteer } from './puppet-puppeteer/'
import { PuppetMock } from './puppet-mock/' import { PuppetMock } from './puppet-mock/'
// import { PuppetPadchat } from './puppet-padchat' // import { PuppetPadchat } from './puppet-padchat'
// import PuppetWechat4u from './puppet-wechat4u/' import PuppetWechat4u from './puppet-wechat4u/'
/** /**
* Wechaty Official Puppet Plugins List * Wechaty Official Puppet Plugins List
...@@ -10,7 +10,7 @@ export const PUPPET_DICT = { ...@@ -10,7 +10,7 @@ export const PUPPET_DICT = {
mock: PuppetMock, mock: PuppetMock,
puppeteer: PuppetPuppeteer, puppeteer: PuppetPuppeteer,
// padchat: PuppetPadchat, // padchat: PuppetPadchat,
// wechat4u: PuppetWechat4u, wechat4u: PuppetWechat4u,
} }
export type PuppetName = keyof typeof PUPPET_DICT export type PuppetName = keyof typeof PUPPET_DICT
......
...@@ -30,6 +30,8 @@ import { ...@@ -30,6 +30,8 @@ import {
ContactType, ContactType,
ContactPayload, ContactPayload,
FriendRequestPayload,
RoomPayload, RoomPayload,
// RoomQueryFilter, // RoomQueryFilter,
} from '../puppet/' } from '../puppet/'
...@@ -319,6 +321,13 @@ export class PuppetMock extends Puppet { ...@@ -319,6 +321,13 @@ export class PuppetMock extends Puppet {
* FriendRequest * FriendRequest
* *
*/ */
public async friendRequestRawPayload(id: string) : Promise<any> {
return {id} as any
}
public async friendRequestRawPayloadParser(rawPayload: any) : Promise<FriendRequestPayload> {
return rawPayload
}
public async friendRequestSend( public async friendRequestSend(
contactId : string, contactId : string,
hello : string, hello : string,
......
...@@ -195,7 +195,8 @@ async function onMessage( ...@@ -195,7 +195,8 @@ async function onMessage(
switch (rawPayload.MsgType) { switch (rawPayload.MsgType) {
case WebMessageType.VERIFYMSG: case WebMessageType.VERIFYMSG:
firer.checkFriendRequest(rawPayload) this.emit('friend', rawPayload.MsgId)
// firer.checkFriendRequest(rawPayload)
break break
case WebMessageType.SYS: case WebMessageType.SYS:
......
...@@ -19,24 +19,24 @@ ...@@ -19,24 +19,24 @@
/* tslint:disable:no-var-requires */ /* tslint:disable:no-var-requires */
// const retryPromise = require('retry-promise').default // const retryPromise = require('retry-promise').default
import * as cuid from 'cuid' // import * as cuid from 'cuid'
import { import {
log, log,
} from '../config' } from '../config'
import { import {
WebRecomendInfo, // WebRecomendInfo,
WebMessageRawPayload, WebMessageRawPayload,
} from './web-schemas' } from './web-schemas'
import PuppetPuppeteer from './puppet-puppeteer' import PuppetPuppeteer from './puppet-puppeteer'
import { // import {
// FriendRequestPayload, // // FriendRequestPayload,
FriendRequestType, // FriendRequestType,
FriendRequestPayloadReceive, // FriendRequestPayloadReceive,
FriendRequestPayloadConfirm, // FriendRequestPayloadConfirm,
} from '../puppet/' // } from '../puppet/'
const REGEX_CONFIG = { const REGEX_CONFIG = {
friendConfirm: [ friendConfirm: [
...@@ -101,37 +101,37 @@ export class Firer { ...@@ -101,37 +101,37 @@ export class Firer {
// //
} }
public async checkFriendRequest( // public async checkFriendRequest(
rawPayload : WebMessageRawPayload, // rawPayload : WebMessageRawPayload,
): Promise<void> { // ): Promise<void> {
if (!rawPayload.RecommendInfo) { // if (!rawPayload.RecommendInfo) {
throw new Error('no RecommendInfo') // throw new Error('no RecommendInfo')
} // }
const recommendInfo: WebRecomendInfo = rawPayload.RecommendInfo // const recommendInfo: WebRecomendInfo = rawPayload.RecommendInfo
log.verbose('PuppetPuppeteerFirer', 'fireFriendRequest(%s)', recommendInfo) // log.verbose('PuppetPuppeteerFirer', 'fireFriendRequest(%s)', recommendInfo)
if (!recommendInfo) { // if (!recommendInfo) {
throw new Error('no recommendInfo') // throw new Error('no recommendInfo')
} // }
const contactId = recommendInfo.UserName // const contactId = recommendInfo.UserName
const hello = recommendInfo.Content // const hello = recommendInfo.Content
const ticket = recommendInfo.Ticket // const ticket = recommendInfo.Ticket
const type = FriendRequestType.Receive // const type = FriendRequestType.Receive
const id = cuid() // const id = cuid()
const payloadReceive: FriendRequestPayloadReceive = { // const payloadReceive: FriendRequestPayloadReceive = {
id, // id,
contactId, // contactId,
hello, // hello,
ticket, // ticket,
type, // type,
} // }
this.puppet.cacheFriendRequestPayload.set(id, payloadReceive) // this.puppet.cacheFriendRequestPayload.set(id, payloadReceive)
this.puppet.emit('friend', id) // this.puppet.emit('friend', id)
} // }
public async checkFriendConfirm( public async checkFriendConfirm(
rawPayload : WebMessageRawPayload, rawPayload : WebMessageRawPayload,
...@@ -143,20 +143,20 @@ export class Firer { ...@@ -143,20 +143,20 @@ export class Firer {
return return
} }
const contactId = rawPayload.FromUserName // const contactId = rawPayload.FromUserName
const type = FriendRequestType.Confirm // const type = FriendRequestType.Confirm
const id = cuid() // const id = cuid()
const payloadConfirm: FriendRequestPayloadConfirm = { // const payloadConfirm: FriendRequestPayloadConfirm = {
id, // id,
contactId, // contactId,
type, // 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( public async checkRoomJoin(
......
...@@ -62,6 +62,7 @@ import { ...@@ -62,6 +62,7 @@ import {
WebMessageRawPayload, WebMessageRawPayload,
WebMediaType, WebMediaType,
WebMessageType, WebMessageType,
WebRecomendInfo,
// WebRoomRawMember, // WebRoomRawMember,
WebRoomRawPayload, WebRoomRawPayload,
} from './web-schemas' } from './web-schemas'
...@@ -71,6 +72,11 @@ import { ...@@ -71,6 +72,11 @@ import {
// ContactQueryFilter, // ContactQueryFilter,
ContactType, ContactType,
FriendRequestPayload,
FriendRequestPayloadReceive,
FriendRequestPayloadConfirm,
FriendRequestType,
MessagePayload, MessagePayload,
MessageType, MessageType,
...@@ -1110,6 +1116,51 @@ export class PuppetPuppeteer extends Puppet { ...@@ -1110,6 +1116,51 @@ export class PuppetPuppeteer extends Puppet {
* FriendRequest * 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( public async friendRequestSend(
contactId : string, contactId : string,
hello : string, hello : string,
...@@ -1306,7 +1357,7 @@ export class PuppetPuppeteer extends Puppet { ...@@ -1306,7 +1357,7 @@ export class PuppetPuppeteer extends Puppet {
private filename( private filename(
rawPayload: WebMessageRawPayload, rawPayload: WebMessageRawPayload,
): null | string { ): string {
log.verbose('PuppetPuppeteer', 'filename()') log.verbose('PuppetPuppeteer', 'filename()')
let filename = rawPayload.FileName || rawPayload.MediaId || rawPayload.MsgId 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 @@ ...@@ -16,10 +16,10 @@
* limitations under the License. * limitations under the License.
* *
*/ */
import { PuppetMock } from './puppet-mock' import { PuppetWechat4u } from './puppet-wechat4u'
export { export {
PuppetMock, PuppetWechat4u,
} }
export default PuppetMock export default PuppetWechat4u
...@@ -18,7 +18,7 @@ import { ...@@ -18,7 +18,7 @@ import {
// ContactPayloadFilterFactory, // ContactPayloadFilterFactory,
} from '../puppet/schemas/contact' } from '../puppet/schemas/contact'
import { import {
// FriendRequestPayload, FriendRequestPayload,
} from '../puppet/schemas/friend-request' } from '../puppet/schemas/friend-request'
import { import {
MessagePayload, MessagePayload,
...@@ -62,6 +62,9 @@ class PuppetTest extends Puppet { ...@@ -62,6 +62,9 @@ class PuppetTest extends Puppet {
* FriendRequest * 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 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 } public async friendRequestAccept(contactId: string, ticket: string) : Promise<void> { return {contactId, ticket} as any }
......
...@@ -71,7 +71,11 @@ import { ...@@ -71,7 +71,11 @@ import {
let PUPPET_COUNTER = 0 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 { export abstract class Puppet extends EventEmitter implements Sayable {
...@@ -492,6 +496,9 @@ 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 friendRequestSend(contactId: string, hello?: string) : Promise<void>
public abstract async friendRequestAccept(contactId: string, ticket: 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( public async friendRequestPayload(
id: string, id: string,
noCache = false, noCache = false,
...@@ -516,7 +523,12 @@ export abstract class Puppet extends EventEmitter implements Sayable { ...@@ -516,7 +523,12 @@ export abstract class Puppet extends EventEmitter implements Sayable {
log.silly('Puppet', 'friendRequestPayload() cache MISS') 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.
先完成此消息的编辑!
想要评论请 注册