UNPKG

@juzi/wechaty-puppet-whatsapp

Version:
331 lines 13.2 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 }); exports.PuppetWhatsapp = void 0; /** * Wechaty - https://github.com/chatie/wechaty * * @copyright 2016-2018 Huan LI <zixia@zixia.net> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ const PUPPET = __importStar(require("@juzi/wechaty-puppet")); const wechaty_puppet_1 = require("@juzi/wechaty-puppet"); const config_js_1 = require("./config.js"); const manager_js_1 = __importDefault(require("./manager.js")); const whatsapp_error_js_1 = __importDefault(require("./exception/whatsapp-error.js")); const error_type_js_1 = require("./exception/error-type.js"); const event_name_js_1 = require("./schema/event-name.js"); const request_pool_js_1 = require("./request/request-pool.js"); const contact_self_js_1 = require("./puppet-mixin/contact-self.js"); const contact_js_1 = require("./puppet-mixin/contact.js"); const conversation_js_1 = require("./puppet-mixin/conversation.js"); const friendship_js_1 = require("./puppet-mixin/friendship.js"); const message_js_1 = require("./puppet-mixin/message.js"); const room_js_1 = require("./puppet-mixin/room.js"); const tag_js_1 = require("./puppet-mixin/tag.js"); const PRE = 'PuppetWhatsapp'; class PuppetWhatsapp extends PUPPET.Puppet { options; static VERSION = config_js_1.VERSION; manager; constructor(options = {}) { super(options); this.options = options; wechaty_puppet_1.log.verbose(PRE, 'constructor()'); this.manager = new manager_js_1.default(this.options); } version() { return config_js_1.VERSION; } async onStart() { wechaty_puppet_1.log.verbose(PRE, 'onStart()'); let whatsapp; try { whatsapp = await this.startManager(this.manager); } catch (err) { wechaty_puppet_1.log.error(PRE, `Can not start whatsapp, error: ${err.message}`); throw (0, whatsapp_error_js_1.default)(error_type_js_1.WA_ERROR_TYPE.ERR_INIT, `Can not start whatsapp, error: ${err.message}`); } /** * Huan(202102): Wait for Puppeteer to be inited before resolve start() for robust state management */ const future = new Promise(resolve => { function check() { if (whatsapp.pupBrowser) { resolve(); } else { setTimeout(check, 100); } } check(); }); return Promise.race([ future, this.state.stable('inactive'), ]); } async startManager(manager) { manager.on({ dirty: data => { this.emit('dirty', data); }, error: this.onError.bind(this), friendship: this.onFriendship.bind(this), heartbeat: data => this.emit('heartbeat', { data, }), login: this.onLogin.bind(this), logout: this.onLogout.bind(this), message: this.onMessage.bind(this), ready: this.onReady.bind(this), reset: this.onReset.bind(this), 'room-invite': this.onRoomInvite.bind(this), 'room-join': this.onRoomJoin.bind(this), 'room-leave': this.onRoomLeave.bind(this), 'room-topic': this.onRoomTopic.bind(this), 'room-announce': this.onRoomAnnounce.bind(this), scan: this.onScan.bind(this), }); const memory = this.memory; const whatsapp = await this.manager.start(memory); return whatsapp; } async onStop() { wechaty_puppet_1.log.verbose(PRE, 'onStop()'); try { await this.stopManager(); } catch (err) { wechaty_puppet_1.log.error(PRE, `Can not stop, error: ${err.message}`); } } async stopManager() { this.manager.off('*'); await this.manager.stop(); } /** * Event section: onXXX */ async onLogin(wxid) { wechaty_puppet_1.log.verbose(PRE, 'onLogin(%s)', wxid); if (this.isLoggedIn) { wechaty_puppet_1.log.warn(PRE, 'onLogin(%s) already login? NOOP', wxid); return; } wechaty_puppet_1.log.info(PRE, `${event_name_js_1.EventName.LOGIN}, ${wxid}`); await super.login(wxid); // no need to emit login since super.login will do that // this.emit('login', { contactId: wxid }) } async onLogout(wxid, message) { wechaty_puppet_1.log.verbose(PRE, 'onLogout(%s, %s)', wxid, message); if (!this.isLoggedIn) { wechaty_puppet_1.log.warn(PRE, 'onLogout(%s) already logged out?', wxid); } wechaty_puppet_1.log.info(PRE, `${event_name_js_1.EventName.LOGOUT}, ${wxid}`); const requestPool = request_pool_js_1.RequestPool.Instance; requestPool.clearPool(); this.emit('logout', { contactId: wxid, data: message }); } async onMessage(message) { wechaty_puppet_1.log.verbose(PRE, 'onMessage(%s)', JSON.stringify(message)); this.emit('message', message); } async onScan(payload) { wechaty_puppet_1.log.verbose(PRE, 'onScan(%s)', JSON.stringify(payload)); wechaty_puppet_1.log.info(PRE, `${event_name_js_1.EventName.SCAN}`); this.emit('scan', payload); } async onError(e) { wechaty_puppet_1.log.info(PRE, `${event_name_js_1.EventName.ERROR}, ${e}`); this.emit('error', { data: e, }); } async onReset(reason) { wechaty_puppet_1.log.info(PRE, `${event_name_js_1.EventName.RESET}, ${reason}`); this.emit('reset', { data: reason }); } async onFriendship(payload) { const friendshipPayload = await this.friendshipRawPayload(payload.friendshipId); if (friendshipPayload.type === PUPPET.types.Friendship.Receive) { // 收到好友请求暂不冒泡,直接接受 await this.friendshipAccept(payload.friendshipId); return; } this.emit('friendship', payload); } async onRoomJoin(payload) { const roomId = payload.roomId; await this.dirtyPayload(PUPPET.types.Payload.Room, roomId); this.emit('room-join', payload); } async onRoomLeave(payload) { const roomId = payload.roomId; await this.dirtyPayload(PUPPET.types.Payload.Room, roomId); this.emit('room-leave', payload); } async onRoomTopic(payload) { const roomId = payload.roomId; await this.dirtyPayload(PUPPET.types.Payload.Room, roomId); this.emit('room-topic', payload); } async onRoomInvite(payload) { this.emit('room-invite', payload); } async onRoomAnnounce(payload) { const roomId = payload.roomId; await this.dirtyPayload(PUPPET.types.Payload.Room, roomId); this.emit('room-announce', payload); } async onReady() { wechaty_puppet_1.log.verbose(PRE, 'onReady()'); wechaty_puppet_1.log.info(PRE, `${event_name_js_1.EventName.READY}`); this.emit('ready', { data: 'ready' }); } /** * Override Methods */ async logout() { await super.logout(); if (!this.isLoggedIn) { wechaty_puppet_1.log.verbose(PRE, 'logout() do nothing'); return; } return this.manager.logout(); } ding(data) { wechaty_puppet_1.log.silly(PRE, 'ding(%s)', data || ''); setTimeout(() => this.emit('dong', { data: data || '' }), 1000); } /** * ContactSelf */ contactSelfQRCode = contact_self_js_1.contactSelfQRCode; contactSelfName = contact_self_js_1.contactSelfName; contactSelfSignature = contact_self_js_1.contactSelfSignature; /** * Contact */ contactAlias = contact_js_1.contactAlias; contactPhone = contact_js_1.contactPhone; contactCorporationRemark = contact_js_1.contactCorporationRemark; contactDescription = contact_js_1.contactDescription; contactList = contact_js_1.contactList; contactAvatar = contact_js_1.contactAvatar; contactRawPayloadParser = contact_js_1.contactRawPayloadParser; contactRawPayload = contact_js_1.contactRawPayload; /** * Conversation */ conversationReadMark = conversation_js_1.conversationReadMark; /** * Message */ // FIXME: need to implement in wechaty-puppet messagePost = message_js_1.messagePost; messageContact = message_js_1.messageContact; messageImage = message_js_1.messageImage; messageRecall = message_js_1.messageRecall; messageFile = message_js_1.messageFile; messageUrl = message_js_1.messageUrl; messageMiniProgram = message_js_1.messageMiniProgram; messageChannel = message_js_1.messageChannel; messageSendText = message_js_1.messageSendText; messageSendFile = message_js_1.messageSendFile; messageSendContact = message_js_1.messageSendContact; messageSendUrl = message_js_1.messageSendUrl; messageSendMiniProgram = message_js_1.messageSendMiniProgram; messageSendChannel = message_js_1.messageSendChannel; messageSendLocation = message_js_1.messageSendLocation; messageLocation = message_js_1.messageLocation; messageForward = message_js_1.messageForward; messageRawPayloadParser = message_js_1.messageRawPayloadParser; messageRawPayload = message_js_1.messageRawPayload; /** * Room */ roomRawPayloadParser = room_js_1.roomRawPayloadParser; roomRawPayload = room_js_1.roomRawPayload; roomList = room_js_1.roomList; roomDel = room_js_1.roomDel; roomAvatar = room_js_1.roomAvatar; roomAdd = room_js_1.roomAdd; roomTopic = room_js_1.roomTopic; roomCreate = room_js_1.roomCreate; roomQuit = room_js_1.roomQuit; roomQRCode = room_js_1.roomQRCode; roomMemberList = room_js_1.roomMemberList; roomMemberRawPayload = room_js_1.roomMemberRawPayload; roomMemberRawPayloadParser = room_js_1.roomMemberRawPayloadParser; roomAnnounce = room_js_1.roomAnnounce; roomInvitationAccept = room_js_1.roomInvitationAccept; roomInvitationRawPayload = room_js_1.roomInvitationRawPayload; roomInvitationRawPayloadParser = room_js_1.roomInvitationRawPayloadParser; /** * Friendship */ friendshipRawPayload = friendship_js_1.friendshipRawPayload; friendshipRawPayloadParser = friendship_js_1.friendshipRawPayloadParser; friendshipSearchPhone = friendship_js_1.friendshipSearchPhone; friendshipSearchWeixin = friendship_js_1.friendshipSearchWeixin; friendshipSearchHandle = friendship_js_1.friendshipSearchHandle; friendshipAdd = friendship_js_1.friendshipAdd; friendshipAccept = friendship_js_1.friendshipAccept; /** * Tag */ tagContactTagAdd = tag_js_1.tagContactTagAdd; tagContactTagRemove = tag_js_1.tagContactTagRemove; tagContactTagList = tag_js_1.tagContactTagList; tagGroupAdd = tag_js_1.tagGroupAdd; tagGroupDelete = tag_js_1.tagGroupDelete; tagGroupList = tag_js_1.tagGroupList; tagGroupTagList = tag_js_1.tagGroupTagList; tagTagAdd = tag_js_1.tagTagAdd; tagTagDelete = tag_js_1.tagTagDelete; tagTagList = tag_js_1.tagTagList; tagTagContactList = tag_js_1.tagTagContactList; } exports.PuppetWhatsapp = PuppetWhatsapp; exports.default = PuppetWhatsapp; //# sourceMappingURL=puppet-whatsapp.js.map