UNPKG

@juzi/wechaty-puppet-whatsapp

Version:
112 lines 4.24 kB
import * as PUPPET from '@juzi/wechaty-puppet'; import { WA_ERROR_TYPE } from '../../exception/error-type.js'; import WAError from '../../exception/whatsapp-error.js'; import { isRoomId } from '../miscellaneous.js'; import { MessageAck, MessageTypes as WhatsAppMessageType, } from '../../schema/whatsapp-interface.js'; import { SpecialSystemType, } from '../../schema/whatsapp-type.js'; export function parserMessageRawPayload(messagePayload) { const talkerId = messagePayload.author || messagePayload.from; let listenerId; let roomId; if (typeof messagePayload.id.remote === 'object') { const { _serialized } = messagePayload.id.remote; roomId = isRoomId(_serialized) ? _serialized : undefined; listenerId = isRoomId(_serialized) ? undefined : messagePayload.to; } else { roomId = isRoomId(messagePayload.id.remote) ? messagePayload.id.remote : undefined; listenerId = isRoomId(messagePayload.id.remote) ? undefined : messagePayload.to; } if (!talkerId) { throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, 'empty talkerIdId!'); } if (!roomId && !listenerId) { throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, 'empty roomId and empty listenerId!'); } const readList = roomId ? undefined : [MessageAck.ACK_READ, MessageAck.ACK_PLAYED].includes(messagePayload.ack) ? [listenerId] : []; return { /** * @deprecated `fromId` is deprecated, use `talkerId` instead. * `fromId` will be removed in v2.0 */ fromId: talkerId, talkerId, // eslint-disable-next-line sort-keys id: messagePayload.id.id, mentionIdList: messagePayload.mentionedIds, roomId, text: messagePayload.body, timestamp: messagePayload.timestamp, /** * @deprecated `toId` is deprecated, use `listenerId` instead. * `toId` will be removed in v2.0 */ toId: listenerId, // eslint-disable-next-line sort-keys listenerId, quoteId: messagePayload.hasQuotedMsg ? messagePayload._data?.quotedStanzaID : undefined, type: getMessageType(messagePayload), readList, }; } function getMessageType(messagePayload) { let type = PUPPET.types.Message.Unknown; // @ts-ignore if (messagePayload.type === 'notification') { type = PUPPET.types.Message.Text; } switch (messagePayload.type) { case WhatsAppMessageType.TEXT: if (messagePayload.isStatus) { type = PUPPET.types.Message.Post; } else { type = PUPPET.types.Message.Text; } break; case WhatsAppMessageType.STICKER: type = PUPPET.types.Message.Emoticon; break; case WhatsAppMessageType.VOICE: type = PUPPET.types.Message.Audio; break; case WhatsAppMessageType.IMAGE: if (messagePayload.isStatus) { type = PUPPET.types.Message.Post; } else { type = PUPPET.types.Message.Image; } break; case WhatsAppMessageType.AUDIO: type = PUPPET.types.Message.Audio; break; case WhatsAppMessageType.VIDEO: if (messagePayload.isStatus) { type = PUPPET.types.Message.Post; } else { type = PUPPET.types.Message.Video; } break; case WhatsAppMessageType.CONTACT_CARD: type = PUPPET.types.Message.Contact; break; case WhatsAppMessageType.DOCUMENT: type = PUPPET.types.Message.Attachment; break; case WhatsAppMessageType.LOCATION: type = PUPPET.types.Message.Location; break; case WhatsAppMessageType.REVOKED: type = PUPPET.types.Message.Recalled; break; case WhatsAppMessageType.PRODUCT: type = PUPPET.types.Message.MiniProgram; break; case SpecialSystemType: type = PUPPET.types.Message.System; } return type; } //# sourceMappingURL=message-raw-payload-parser.js.map