UNPKG

@juzi/wechaty-puppet-whatsapp

Version:
120 lines 6.08 kB
"use strict"; 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