UNPKG

@juzi/wechaty

Version:

Wechaty is a RPA SDK for Chatbot Makers.

206 lines 7.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RoomInvitationImpl = void 0; const config_js_1 = require("../config.js"); const timestamp_to_date_js_1 = require("../pure-functions/timestamp-to-date.js"); const wechatify_js_1 = require("../user-mixins/wechatify.js"); const validation_js_1 = require("../user-mixins/validation.js"); /** * * accept room invitation */ class RoomInvitationMixin extends (0, wechatify_js_1.wechatifyMixinBase)() { id; static load(id) { const newRoomInvitation = new this(id); return newRoomInvitation; } static async acceptByQRCode(qrcode) { if (!qrcode) { throw new Error('acceptByQRCode() qrcode is required'); } return this.wechaty.puppet.roomInvitationAcceptByQRCode(qrcode); } /** * @hideconstructor * Instance Properties * */ constructor(id) { super(); this.id = id; config_js_1.log.verbose('RoomInvitation', 'constructor(id=%s)', id); } toString() { return [ 'RoomInvitation#', this.id || 'loading', ].join(''); } /** * @ignore */ async toStringAsync() { const payload = await this.wechaty.puppet.roomInvitationPayload(this.id); return [ 'RoomInvitation#', this.id, '<', payload.topic, ',', payload.inviterId, '>', ].join(''); } /** * Accept Room Invitation * * @returns {Promise<void>} * * @example * const bot = new Wechaty() * bot.on('room-invite', async roomInvitation => { * try { * console.log(`received room-invite event.`) * await roomInvitation.accept() * } catch (e) { * console.error(e) * } * } * .start() */ async accept() { config_js_1.log.verbose('RoomInvitation', 'accept()'); try { await this.wechaty.puppet.roomInvitationAccept(this.id); const inviter = await this.inviter(); const topic = await this.topic(); config_js_1.log.verbose('RoomInvitation', 'accept() with room(%s) & inviter(%s) ready()', topic, inviter); } catch (e) { this.wechaty.emitError(e); config_js_1.log.warn('RoomInvitation', 'accept() rejection: %s', (e && e.message) || e); } } /** * Get the inviter from room invitation * * @returns {ContactInterface} * @example * const bot = new Wechaty() * bot.on('room-invite', async roomInvitation => { * const inviter = await roomInvitation.inviter() * const name = inviter.name() * console.log(`received room invitation event from ${name}`) * } * .start() */ async inviter() { config_js_1.log.verbose('RoomInvitation', 'inviter()'); const payload = await this.wechaty.puppet.roomInvitationPayload(this.id); const inviter = await this.wechaty.Contact.find({ id: payload.inviterId }); if (!inviter) { throw new Error('can not found inviter with id: ' + payload.inviterId); } return inviter; } /** * Get the room topic from room invitation * * @returns {string} * @example * const bot = new Wechaty() * bot.on('room-invite', async roomInvitation => { * const topic = await roomInvitation.topic() * console.log(`received room invitation event from room ${topic}`) * } * .start() */ async topic() { const payload = await this.wechaty.puppet.roomInvitationPayload(this.id); return payload.topic || payload.topic || ''; } async memberCount() { config_js_1.log.verbose('RoomInvitation', 'memberCount()'); const payload = await this.wechaty.puppet.roomInvitationPayload(this.id); return payload.memberCount || payload.memberCount || 0; } /** * List of Room Members that you known(is friend) * @ignore */ async memberList() { config_js_1.log.verbose('RoomInvitation', 'roomMemberList()'); const payload = await this.wechaty.puppet.roomInvitationPayload(this.id); const contactIdList = payload.memberIdList; const contactListAll = await Promise.all(contactIdList.map(id => this.wechaty.Contact.find({ id }))); const contactList = contactListAll.filter(c => !!c); return contactList; } /** * Get the invitation time * * @returns {Promise<Date>} */ async date() { config_js_1.log.verbose('RoomInvitation', 'date()'); const payload = await this.wechaty.puppet.roomInvitationPayload(this.id); return (0, timestamp_to_date_js_1.timestampToDate)(payload.timestamp); } /** * Returns the roopm invitation age in seconds. <br> * * For example, the invitation is sent at time `8:43:01`, * and when we received it in Wechaty, the time is `8:43:15`, * then the age() will return `8:43:15 - 8:43:01 = 14 (seconds)` * @returns {number} */ async age() { const recvDate = await this.date(); const ageMilliseconds = Date.now() - recvDate.getTime(); const ageSeconds = Math.floor(ageMilliseconds / 1000); return ageSeconds; } /** * Load the room invitation info from disk * * @returns {RoomInvitationInterface} * @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() */ static async fromJSON(payload) { config_js_1.log.verbose('RoomInvitation', 'fromJSON(%s)', typeof payload === 'string' ? payload : JSON.stringify(payload)); if (typeof payload === 'string') { payload = JSON.parse(payload); } await this.wechaty.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() */ async toJSON() { config_js_1.log.verbose('RoomInvitation', 'toJSON()'); const payload = await this.wechaty.puppet.roomInvitationPayload(this.id); return JSON.stringify(payload); } } class RoomInvitationImpl extends (0, validation_js_1.validationMixin)(RoomInvitationMixin)() { } exports.RoomInvitationImpl = RoomInvitationImpl; //# sourceMappingURL=room-invitation.js.map