diff --git a/package.json b/package.json index 273d317eae69a7046b83d0b66c87dc2a71196a91..20bf74c1e754555cb86c17f64d8ff3aa039b3e1c 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,7 @@ "read-pkg-up": "^7.0.0", "state-switch": "^0.6.2", "watchdog": "^0.8.1", - "wechaty-puppet": "^0.19.1", + "wechaty-puppet": "^0.19.5", "ws": "^7.0.0" }, "devDependencies": { diff --git a/src/user/room-invitation.ts b/src/user/room-invitation.ts index ad2fd3c87bc69854293363beca717a3ac63eb219..1fb137808d59a20e0f6d039c6a893034ee77b1e0 100644 --- a/src/user/room-invitation.ts +++ b/src/user/room-invitation.ts @@ -37,6 +37,7 @@ import { import { Contact, } from './contact' +import { RoomInvitationPayload } from 'wechaty-puppet' /** * @@ -267,4 +268,51 @@ export class RoomInvitation extends Accessory implements Acceptable { return ageSeconds } + /** + * Load the room invitation info from disk + * + * @returns {RoomInvitation} + * @example + * const bot = new Wechaty() + * const dataFromDisk // get the room invitation info data from disk + * const roomInvitation = await bot.RoomInvitation.fromJSON(dataFromDisk) + * await roomInvitation.accept() + */ + public static async fromJSON ( + payload: string | RoomInvitationPayload, + ): Promise { + log.verbose('RoomInvitation', 'fromJSON(%s)', + typeof payload === 'string' + ? payload + : JSON.stringify(payload), + ) + + if (typeof payload === 'string') { + payload = JSON.parse(payload) as RoomInvitationPayload + } + + await this.puppet.roomInvitationPayload(payload.id, payload) + + return this.wechaty.RoomInvitation.load(payload.id) + } + + /** + * Get the room invitation info when listened on room-invite event + * + * @returns {string} + * @example + * const bot = new Wechaty() + * bot.on('room-invite', async roomInvitation => { + * const roomInvitation = bot.RoomInvitation.load(roomInvitation.id) + * const jsonData = await roomInvitation.toJSON(roomInvitation.id) + * // save the json data to disk, and we can use it by RoomInvitation.fromJSON() + * } + * .start() + */ + public async toJSON (): Promise { + log.verbose('RoomInvitation', `toJSON()`) + const payload = await this.puppet.roomInvitationPayload(this.id) + return JSON.stringify(payload) + } + }