puppet.ts 2.2 KB
Newer Older
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
1
/**
2
 * Wechaty - Wechat for Bot. Connecting ChatBots
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
3
 *
4
 * Interface for Puppet
5
 *
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
6
 * Class Puppet
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
7 8
 *
 * Licenst: ISC
9
 * https://github.com/wechaty/wechaty
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
10 11
 *
 */
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
12

13
import { EventEmitter } from 'events'
14

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
15 16
import {
  Sayable
17
}                       from './config'
18 19 20 21
import { Contact }      from './contact'
import { Message }      from './message'
import { StateMonitor } from './state-monitor'
import { Room }         from './room'
22

23 24 25
// type ContactGetterFunc = {
//   (id: string): Promise<any>
// }
26

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
27
export abstract class Puppet extends EventEmitter implements Sayable {
28 29
  public userId:  string  | null
  public user:    Contact | null
30 31
  public abstract getContact(id: string): Promise<any>

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
32 33
  public state = new StateMonitor<'live', 'dead'>('Puppet', 'dead')

34 35
  constructor() {
    super()
36 37
  }

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
38
  public abstract async init(): Promise<void>
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
39 40 41 42
  /**
   * @deprecated
   * use Message.self() instead
   */
43
  public abstract self(message?: Message): boolean
44

45 46 47 48 49 50
  // public user(contact?: Contact) {
  //   if (contact) {
  //     this._user = contact
  //   }
  //   return this._user
  // }
51

52 53
  public abstract send(message: Message): Promise<void>
  public abstract say(content: string): Promise<void>
54 55

  // @deprecated
56 57
  public abstract reply(message: Message, reply): Promise<void>

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
58
  public abstract reset(reason?: string): void
59 60
  public abstract logout(): Promise<void>
  public abstract quit(): Promise<void>
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
61

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
62
  public abstract ding(): Promise<string>
63

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
64 65 66
  /**
   * FriendRequest
   */
67 68 69
  public abstract friendRequestSend(contact: Contact, hello?: string): Promise<any>
  public abstract friendRequestAccept(contact: Contact, ticket: string): Promise<any>

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
70 71 72
  /**
   * Room
   */
73 74 75 76
  public abstract roomAdd(room: Room, contact: Contact): Promise<number>
  public abstract roomDel(room: Room, contact: Contact): Promise<number>
  public abstract roomTopic(room: Room, topic: string): Promise<string>
  public abstract roomCreate(contactList: Contact[], topic?: string): Promise<Room>
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
77
  public abstract roomFind(filterFunc: string): Promise<Room[]>
78

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
79 80 81
  /**
   * Contact
   */
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
82
  public abstract contactFind(filterFunc: string): Promise<Contact[]>
83
  public abstract contactRemark(contact: Contact, remark: string): Promise<boolean>
84
}