@juzi/wechaty-puppet-whatsapp
Version:
Wechaty Puppet for WhatsApp
120 lines • 6.08 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable no-case-declarations */
const whatsapp_interface_js_1 = require("../../schema/whatsapp-interface.js");
const whatsapp_base_js_1 = __importDefault(require("../whatsapp-base.js"));
const PUPPET = __importStar(require("@juzi/wechaty-puppet"));
const config_js_1 = require("../../config.js");
const room_event_generator_js_1 = require("../../helper/pure-function/room-event-generator.js");
const PRE = 'GroupEventHandler';
class GroupEventHandler extends whatsapp_base_js_1.default {
async onRoomJoin(notification) {
config_js_1.log.info(PRE, `onRoomJoin(${JSON.stringify(notification)})`);
const roomId = notification.id.remote;
const roomJoinPayload = {
inviteeIdList: notification.recipientIds,
inviterId: notification.author,
roomId,
timestamp: notification.timestamp,
};
await this.manager.syncRoomMemberList(roomId);
this.emit('room-join', roomJoinPayload);
this.emit('dirty', {
payloadId: roomId,
payloadType: PUPPET.types.Dirty.Room,
});
}
async onRoomLeave(notification) {
config_js_1.log.info(PRE, `onRoomLeave(${JSON.stringify(notification)})`);
const { id, recipientIds } = notification;
const roomId = id.remote;
const isLeaveSelf = id.fromMe && recipientIds.length === 1 && recipientIds[0] === this.getBotId();
const roomLeavePayload = {
removeeIdList: notification.recipientIds,
removerId: notification.author || isLeaveSelf ? this.getBotId() : '',
roomId,
timestamp: notification.timestamp,
};
const cacheManager = await this.manager.getCacheManager();
await cacheManager.removeRoomMemberFromList(roomId, notification.recipientIds);
this.emit('room-leave', roomLeavePayload);
this.emit('dirty', {
payloadId: roomId,
payloadType: PUPPET.types.Dirty.Room,
});
}
async onRoomUpdate(notification) {
config_js_1.log.info(PRE, `onRoomUpdate(${JSON.stringify(notification)})`);
const roomId = notification.id.remote;
const cacheManager = await this.manager.getCacheManager();
let roomPayload = await cacheManager.getContactOrRoomRawPayload(roomId);
if (!roomPayload) {
const rawRoom = await this.manager.requestManager.getContactById(roomId);
const avatar = await rawRoom.getProfilePicUrl();
roomPayload = Object.assign(rawRoom, { avatar });
await cacheManager.setContactOrRoomRawPayload(roomId, roomPayload);
}
const type = notification.type;
switch (type) {
case whatsapp_interface_js_1.GroupNotificationTypes.SUBJECT:
const roomTopicPayload = (0, room_event_generator_js_1.genRoomTopicEvent)(notification, roomPayload);
roomPayload.name = notification.body;
await cacheManager.setContactOrRoomRawPayload(roomId, roomPayload);
this.emit('room-topic', roomTopicPayload);
break;
case whatsapp_interface_js_1.GroupNotificationTypes.DESCRIPTION:
const roomChat = await this.manager.getRoomChatById(roomId);
const roomMetadata = roomChat.groupMetadata;
const description = roomMetadata.desc;
const msgPayload = (0, room_event_generator_js_1.genRoomAnnounce)(notification, description);
await this.manager.processMessage(msgPayload); // FIXME: how to use method of another class which extends from the same base class.
break;
case whatsapp_interface_js_1.GroupNotificationTypes.CREATE:
const members = await this.manager.syncRoomMemberList(roomId);
const roomJoinPayload = (0, room_event_generator_js_1.genRoomJoinEvent)(notification, members);
this.emit('room-join', roomJoinPayload);
break;
case whatsapp_interface_js_1.GroupNotificationTypes.PICTURE:
const rawRoom = await this.manager.requestManager.getContactById(roomId);
const avatar = await rawRoom.getProfilePicUrl() || '';
const roomPayloadInCache = await cacheManager.getContactOrRoomRawPayload(roomId);
if (roomPayloadInCache) {
roomPayloadInCache.avatar = avatar;
await cacheManager.setContactOrRoomRawPayload(roomId, roomPayloadInCache);
}
this.emit('dirty', {
payloadId: roomId,
payloadType: PUPPET.types.Dirty.Room,
});
break;
}
}
}
exports.default = GroupEventHandler;
//# sourceMappingURL=group-event-handler.js.map