@juzi/wechaty
Version:
Wechaty is a RPA SDK for Chatbot Makers.
203 lines • 6.73 kB
JavaScript
import { log } from '../config.js';
import { timestampToDate, } from '../pure-functions/timestamp-to-date.js';
import { wechatifyMixinBase, } from '../user-mixins/wechatify.js';
import { validationMixin } from '../user-mixins/validation.js';
/**
*
* accept room invitation
*/
class RoomInvitationMixin extends 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;
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() {
log.verbose('RoomInvitation', 'accept()');
try {
await this.wechaty.puppet.roomInvitationAccept(this.id);
const inviter = await this.inviter();
const topic = await this.topic();
log.verbose('RoomInvitation', 'accept() with room(%s) & inviter(%s) ready()', topic, inviter);
}
catch (e) {
this.wechaty.emitError(e);
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() {
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() {
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() {
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() {
log.verbose('RoomInvitation', 'date()');
const payload = await this.wechaty.puppet.roomInvitationPayload(this.id);
return 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) {
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() {
log.verbose('RoomInvitation', 'toJSON()');
const payload = await this.wechaty.puppet.roomInvitationPayload(this.id);
return JSON.stringify(payload);
}
}
class RoomInvitationImpl extends validationMixin(RoomInvitationMixin)() {
}
export { RoomInvitationImpl, };
//# sourceMappingURL=room-invitation.js.map