UNPKG

@juzi/wechaty

Version:

Wechaty is a RPA SDK for Chatbot Makers.

53 lines 2.42 kB
import { log } from '@juzi/wechaty-puppet'; import { isWechatyPluginUninstaller, } from '../plugin.js'; const pluginMixin = (mixinBase) => { log.verbose('WechatyPluginMixin', 'pluginMixin(%s)', mixinBase.name); class PluginMixin extends mixinBase { constructor(...args) { super(...args); } /** * @param {WechatyPlugin[]} plugins - The plugins you want to use * * @return {WechatyInterface} - this for chaining, * * @desc * For wechaty ecosystem, allow user to define a 3rd party plugin for the all wechaty instances * * @example * // Report all chat message to my server. * * function WechatyReportPlugin(options: { url: string }) { * return function (this: Wechaty) { * this.on('message', message => http.post(options.url, { data: message })) * } * } * * bot.use(WechatyReportPlugin({ url: 'http://somewhere.to.report.your.data.com' }) */ use(...plugins) { const pluginList = plugins.flat(); log.verbose('WechatyPluginMixin', 'use() total %d plugins', pluginList.length); const uninstallerList = []; for (const plugin of pluginList) { log.verbose('WechatyPluginMixin', 'use() installing Plugin %s on Wechaty %s ...', plugin.name, this.name()); const uninstaller = plugin(this); // <- Huan(202110): TODO: remove any if (isWechatyPluginUninstaller(uninstaller)) { log.verbose('WechatyPluginMixin', 'use() saving uninstaller for Plugin %s on Wechaty %s ...', plugin.name, this.name()); uninstallerList.push(uninstaller); } } /** * Return the function to uninstall all plugins */ return () => uninstallerList.forEach(uninstaller => { log.verbose('WechatyPluginMixin', 'use() uninstalling Plugin %s on Wechaty %s ...', uninstaller.name, this.name()); uninstaller(); log.verbose('WechatyPluginMixin', 'use() uninstalling Plugin %s on Wechaty %s ... done', uninstaller.name, this.name()); }); } } return PluginMixin; }; export { pluginMixin, }; //# sourceMappingURL=plugin-mixin.js.map