UNPKG

@juzi/wechaty

Version:

Wechaty is a RPA SDK for Chatbot Makers.

78 lines 2.63 kB
import { FileBox } from 'file-box'; import { ContactImpl, MessageImpl, DelayImpl, UrlLinkImpl, MiniProgramImpl, PostImpl, LocationImpl, ChannelImpl, } from '../user-modules/mod.js'; /** * TODO: add unit test to ensure the interface validation code works */ const deliverSayableConversationPuppet = (puppet) => (conversationId) => async (sayable, options) => { let msgId; if (typeof sayable === 'number') { sayable = String(sayable); } if (typeof sayable === 'string') { return puppet.messageSendText(conversationId, sayable, { mentionIdList: options?.mentionList?.map(c => c === '@all' ? '@all' : c.id), quoteId: options?.quoteMessage?.id, }); } /** * Huan(202110): Checking `looseInstanceOf` is enough for the following types: * so we do not check `interfaceOfClass` anymore because it will consume more resources. */ if (FileBox.valid(sayable)) { /** * 1. File */ msgId = await puppet.messageSendFile(conversationId, sayable); } else if (MessageImpl.validInstance(sayable)) { /** * 2. Message */ msgId = await puppet.messageForward(conversationId, sayable.id); } else if (ContactImpl.validInstance(sayable)) { /** * 3. Contact */ msgId = await puppet.messageSendContact(conversationId, sayable.id); } else if (UrlLinkImpl.validInstance(sayable)) { /** * 4. Link Message */ msgId = await puppet.messageSendUrl(conversationId, sayable.payload); } else if (MiniProgramImpl.validInstance(sayable)) { /** * 5. Mini Program */ msgId = await puppet.messageSendMiniProgram(conversationId, sayable.payload); } else if (LocationImpl.validInstance(sayable)) { /** * 6. Location */ msgId = await puppet.messageSendLocation(conversationId, sayable.payload); } else if (DelayImpl.validInstance(sayable)) { /** * 7. Delay for a while */ await sayable.wait(); } else if (PostImpl.validInstance(sayable)) { /** * 8. Post */ msgId = await puppet.messageSendPost(conversationId, sayable.payload); } else if (ChannelImpl.validInstance(sayable)) { msgId = await puppet.messageSendChannel(conversationId, sayable.payload); } else { throw new Error('unsupported arg: ' + sayable); } return msgId; }; export { deliverSayableConversationPuppet, }; //# sourceMappingURL=deliver-sayable.js.map