UNPKG

koishi-plugin-pics

Version:
6 lines (5 loc) 17.9 kB
var T=Object.defineProperty;var C=(F,A)=>T(F,"name",{value:A,configurable:!0});(()=>{"use strict";var F={913:function(w,c,l){var g=this&&this.__decorate||function(u,o,s,n){var r=arguments.length,v=r<3?o:n===null?n=Object.getOwnPropertyDescriptor(o,s):n,h;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")v=Reflect.decorate(u,o,s,n);else for(var _=u.length-1;_>=0;_--)(h=u[_])&&(v=(r<3?h(v):r>3?h(o,s,v):h(o,s))||v);return r>3&&v&&Object.defineProperty(o,s,v),v},P=this&&this.__metadata||function(u,o){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(u,o)};Object.defineProperty(c,"__esModule",{value:!0}),c.PicMiddlewareConfig=c.PicSourceConfig=c.PicsPluginConfig=void 0;const S=l(856),j=l(126);let y=C(class{constructor(o){}},"PicsPluginConfig");g([(0,S.SchemaProperty)({description:"\u6307\u4EE4\u540D",default:"pic",hidden:!0}),P("design:type",String)],y.prototype,"commandName",void 0),g([(0,S.SchemaProperty)({description:"Assets \u670D\u52A1\u53EF\u7528\u65F6\uFF0C\u4F7F\u7528 Assets \u7F13\u5B58\u56FE\u7247\u3002",default:!0}),P("design:type",Boolean)],y.prototype,"useAssets",void 0),g([(0,S.SchemaProperty)({description:"\u4F7F\u7528 Base64 \u53D1\u9001\u56FE\u7247\u7ED3\u679C\u3002",default:!1}),P("design:type",Boolean)],y.prototype,"useBase64",void 0),g([(0,S.SchemaProperty)({type:j.Schema.object({}),default:{}}),P("design:type",j.Quester.Config)],y.prototype,"httpConfig",void 0),g([(0,S.SchemaProperty)({description:"OneBot \u673A\u5668\u4EBA\u6C38\u8FDC\u4F7F\u7528 file \u5B57\u6BB5\u3002",default:!1}),P("design:type",Boolean)],y.prototype,"preferFile",void 0),y=g([(0,S.RegisterSchema)(),P("design:paramtypes",[Object])],y),c.PicsPluginConfig=y;const f={...j.Quester.Config.dict};delete f.endpoint;class p{applyTo(o){o.tags=this.tags,o.weight=this.weight,o.name=this.name,o.description=this.description,o.isDefault=this.isDefault}}C(p,"PicSourceConfig"),g([(0,S.SchemaProperty)({type:"string",default:[],description:"\u56FE\u6E90\u6807\u7B7E"}),P("design:type",Array)],p.prototype,"tags",void 0),g([(0,S.SchemaProperty)({default:1,description:"\u56FE\u6E90\u6743\u91CD"}),P("design:type",Number)],p.prototype,"weight",void 0),g([(0,S.SchemaProperty)({description:"\u56FE\u6E90\u540D\u79F0",required:!0}),P("design:type",String)],p.prototype,"name",void 0),g([(0,S.SchemaProperty)({description:"\u56FE\u6E90\u63CF\u8FF0"}),P("design:type",String)],p.prototype,"description",void 0),g([(0,S.SchemaProperty)({description:"\u662F\u5426\u4E3A\u9ED8\u8BA4\u56FE\u6E90"}),P("design:type",Boolean)],p.prototype,"isDefault",void 0),g([(0,S.SchemaProperty)({type:j.Schema.object(f),description:"\u8BF7\u6C42\u8BBE\u7F6E",default:{}}),P("design:type",Object)],p.prototype,"http",void 0),c.PicSourceConfig=p;class d{constructor(o){}applyTo(o){o.name=this.name,o.prepend=this.prepend}}C(d,"PicMiddlewareConfig"),g([(0,S.SchemaProperty)({description:"\u4E2D\u95F4\u4EF6\u540D\u79F0\u3002"}),P("design:type",String)],d.prototype,"name",void 0),g([(0,S.SchemaProperty)({description:"\u662F\u5426\u5728\u9996\u4F4D\u63D2\u5165\u4E2D\u95F4\u4EF6\u3002",default:!1}),P("design:type",Boolean)],d.prototype,"prepend",void 0),c.PicMiddlewareConfig=d},519:(w,c)=>{Object.defineProperty(c,"__esModule",{value:!0})},607:function(w,c,l){var g=this&&this.__createBinding||(Object.create?function(m,e,t,i){i===void 0&&(i=t);var a=Object.getOwnPropertyDescriptor(e,t);(!a||("get"in a?!e.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(m,i,a)}:function(m,e,t,i){i===void 0&&(i=t),m[i]=e[t]}),P=this&&this.__setModuleDefault||(Object.create?function(m,e){Object.defineProperty(m,"default",{enumerable:!0,value:e})}:function(m,e){m.default=e}),S=this&&this.__decorate||function(m,e,t,i){var a=arguments.length,b=a<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,M;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")b=Reflect.decorate(m,e,t,i);else for(var D=m.length-1;D>=0;D--)(M=m[D])&&(b=(a<3?M(b):a>3?M(e,t,b):M(e,t))||b);return a>3&&b&&Object.defineProperty(e,t,b),b},j=this&&this.__importStar||function(m){if(m&&m.__esModule)return m;var e={};if(m!=null)for(var t in m)t!=="default"&&Object.prototype.hasOwnProperty.call(m,t)&&g(e,m,t);return P(e,m),e},y=this&&this.__exportStar||function(m,e){for(var t in m)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&g(e,m,t)},f=this&&this.__metadata||function(m,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(m,e)},p=this&&this.__param||function(m,e){return function(t,i){e(t,i,m)}},d=this&&this.__importDefault||function(m){return m&&m.__esModule?m:{default:m}};Object.defineProperty(c,"__esModule",{value:!0});const u=l(126),o=l(913),s=d(l(517)),n=l(126),r=l(856),v=l(670),h=l(177),_=d(l(221)),O=d(l(17)),B=d(l(162)),L=j(l(147));y(l(913),c),y(l(714),c),y(l(310),c),y(l(519),c);let R=C(class extends(0,r.StarterPlugin)(o.PicsPluginConfig){constructor(){super(...arguments),this.sources=new Map,this.picMiddlewares=[]}addSource(e,t){const i=t||this.caller,a=i.on("dispose",()=>this.removeSource(e));this.sources.set(e,a),i.on("ready",()=>e.onStartup()),this.logger.info(`Loaded pic source ${e.name}.`)}async removeSource(e){try{await e.onShutdown()}catch(i){this.logger.warn(`Shutdown of ${e.name} failed: ${i.toString()}`)}const t=this.sources.get(e);this.sources.delete(e),t&&t(),this.logger.info(`Removed pic source ${e.name}.`)}allSources(){return Array.from(this.sources.keys())}middleware(e,t){const i=t||this.caller;e.name||=i.state?.runtime?.plugin?.name;const a=i.on("dispose",()=>{a(),this.removeMiddlware(e)});e.prepend?this.picMiddlewares.unshift(e):this.picMiddlewares.push(e)}removeMiddlware(e){(0,u.remove)(this.picMiddlewares,e)}pickAvailableSources(e=[],t=!1){let i=this.allSources();return e.length?i=i.filter(a=>e.some(b=>a.name===b)||e.every(b=>a.tags.includes(b))):!t&&i.length>1&&(i=i.filter(a=>a.isDefault)),i}randomSourceWithWeight(e=this.allSources()){if(!e.length)return null;if(e.length===1)return e[0];const t=s.default.flatten(e.map(i=>s.default.range(i.weight).map(()=>i)));return u.Random.pick(t)}async retryWithAnotherSource(e,t,i){const a=t.filter(b=>b!==e);return this.fetchPicsWithSources(a,i)}async fetchPicsWithSources(e,t){const i=this.randomSourceWithWeight(e);if(!i)return null;this.logger.debug(`Using source ${i.name} for searching ${t.join(",")}`);try{const a=await i.randomPic(t);return a?(this.logger.debug(`Got pic ${a.url}`),a):(this.logger.debug(`Pic not found from ${i.name}, retrying with another source.`),this.retryWithAnotherSource(i,e,t))}catch(a){return this.logger.warn(`Fetch pic failed from ${i.name}, retrying with another source: ${a.toString()}`),this.retryWithAnotherSource(i,e,t)}}async randomPic(e=[],t=[]){const i=this.pickAvailableSources(t);return this.fetchPicsWithSources(i,e)}async urlToBuffer(e){if(e.startsWith("base64://")){const i=Buffer.from(e.slice(9),"base64"),a=await _.default.fromBuffer(i);return{buffer:i,mime:a?.mime||"application/octet-stream"}}if(e.startsWith("file://")){const i=e.slice(7),a=await L.promises.readFile(i),b=(0,B.default)(O.default.extname(i))||(await _.default.fromBuffer(a)).mime;return{buffer:a,mime:b}}const t=await this._http.file(e);return{buffer:Buffer.from(t.data),mime:t.mime}}async bufferToUrl(e,t){if(!t){const i=await _.default.fromBuffer(e);i?t=i.mime:t="application/octet-stream"}return`data:${t};base64,${e.toString("base64")}`}async download(e){if(e.startsWith("base64://"))return this.bufferToUrl(Buffer.from(e.slice(9),"base64"));const t=await this.urlToBuffer(e);return this.bufferToUrl(t.buffer,t.mime)}async resolveUrl(e,t=this.picMiddlewares){if(!t.length)return e;const i=C(async a=>(a||=e,await this.resolveUrl(a,t.slice(1))||a),"next");try{let a=await t[0].use(e,i);return a||(this.logger.warn(`Got empty result from middleware ${t[0].name||"???"}`),a=e),a}catch(a){return this.logger.warn(`Resolve url ${e} failed: ${a.toString()}`),e}}async getSegment(e){return e=await this.resolveUrl(e),n.segment.image(e)}installDefaultMiddlewares(){this.config.useAssets&&this.ctx.plugin(v.PicAssetsTransformMiddleware),this.config.useBase64&&this.ctx.plugin(h.PicDownloaderMiddleware)}async onPic(e,t,i){const a=e?.split(/[ ,+\uFF0C\uFF0B\u3001]/)||[];t||=[];const b=await this.randomPic(t,a);if(!b)return i();let M=(await this.getSegment(b.url)).toString();return b.description&&(M+=` ${b.description}`),M}async onQuerySource(e,t){e||=[];const i=this.pickAvailableSources(e,!0);return`${t()} ${i.map(a=>a.getDisplayString()).join(` `)}`}onApply(){this._http=this.http.extend(this.config.httpConfig),this.installDefaultMiddlewares()}async picsComponent(e,t,i){const a=e.tags?.split(/[ ,+\uFF0C\uFF0B\u3001]/)||[],b=e.source?.split(/[ ,+\uFF0C\uFF0B\u3001]/)||[],M=await this.randomPic(a,b);if(!M)return e.fallback||"";const D=await this.getSegment(M.url);return M.description&&(D.attrs.description=M.description),D}},"PicsContainer");S([(0,r.Caller)(),f("design:type",u.Context)],R.prototype,"caller",void 0),S([(0,r.InjectLogger)(),f("design:type",u.Logger)],R.prototype,"logger",void 0),S([(0,r.Inject)(!0),f("design:type",n.Quester)],R.prototype,"http",void 0),S([(0,r.UseCommand)("{{commandName}} [...tags:string]"),(0,r.CommandLocale)("zh",{description:"\u83B7\u53D6\u968F\u673A\u56FE\u7247",options:{source:"\u6307\u5B9A\u56FE\u6E90\uFF0C\u9017\u53F7\u5206\u9694\u3002\u56FE\u6E90\u53EF\u4EE5\u7528 {{commandName}}.sources \u67E5\u8BE2\u3002"},usage:"\u4ECE\u5404\u4E2A\u56FE\u6E90\u4E2D\u968F\u673A\u83B7\u53D6\u4E00\u5F20\u968F\u673A\u56FE\u7247\u3002\u56FE\u6E90\u53EF\u4EE5\u7528 {{commandName}}.sources \u67E5\u8BE2\u3002\u53C2\u6570\u5747\u4E3A\u53EF\u9009\u3002",messages:{"not-found":"\u672A\u627E\u5230\u4EFB\u4F55\u56FE\u7247\u3002"}}),(0,r.CommandLocale)("en",{description:"Get random picture",options:{source:"Specify the source, separated by comma. You can query the sources with {{commandName}}.sources."},usage:"Get a random picture from a random source. Sources can be queried with command {{commandName}}.sources",messages:{"not-found":"No pictures found."}}),(0,r.CommandExample)("{{commandName}}"),(0,r.CommandExample)("{{commandName}} yuyuko"),(0,r.CommandExample)("{{commandName}} -s yande"),(0,r.CommandExample)("{{commandName}} -s yande yuyuko saigyouji"),p(0,(0,r.PutOption)("source","-s <source>")),p(1,(0,r.PutArgs)()),p(2,(0,r.PutRenderer)(".not-found")),f("design:type",Function),f("design:paramtypes",[String,Array,Function]),f("design:returntype",Promise)],R.prototype,"onPic",null),S([(0,r.UseCommand)("{{commandName}}.sources"),(0,r.CommandLocale)("zh",{description:"\u67E5\u8BE2\u56FE\u6E90\u5217\u8868",options:{},usage:"\u56FE\u6E90\u6807\u7B7E\u53EF\u7528\u4E8E\u56FE\u7247\u83B7\u53D6\u7684\u56FE\u6E90\u7B5B\u9009\u3002",messages:{list:"\u56FE\u6E90\u7684\u5217\u8868\u5982\u4E0B:"}}),(0,r.CommandLocale)("en",{description:"Query picture sources",options:{},usage:"Source tags can be used to filter picture sources.",messages:{list:"List of sources:"}}),(0,r.CommandExample)("{{commandName}}.sources"),(0,r.CommandExample)("{{commandName}}.sources pixiv"),p(0,(0,r.PutArgs)()),p(1,(0,r.PutRenderer)(".list")),f("design:type",Function),f("design:paramtypes",[Array,Function]),f("design:returntype",Promise)],R.prototype,"onQuerySource",null),S([(0,r.UseComponent)("pics"),f("design:type",Function),f("design:paramtypes",[Object,Array,u.Session]),f("design:returntype",Promise)],R.prototype,"picsComponent",null),R=S([(0,r.Provide)("pics",{immediate:!0}),(0,r.DefinePlugin)({name:"pics"})],R),c.default=R},714:function(w,c,l){var g=this&&this.__decorate||function(o,s,n,r){var v=arguments.length,h=v<3?s:r===null?r=Object.getOwnPropertyDescriptor(s,n):r,_;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")h=Reflect.decorate(o,s,n,r);else for(var O=o.length-1;O>=0;O--)(_=o[O])&&(h=(v<3?_(h):v>3?_(s,n,h):_(s,n))||h);return v>3&&h&&Object.defineProperty(s,n,h),h},P=this&&this.__metadata||function(o,s){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,s)},S=this&&this.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(c,"__esModule",{value:!0}),c.PlainPicMiddlewarePlugin=c.PicMiddlewarePlugin=c.BasePicMiddlewarePlugin=void 0;const j=l(126),y=l(913),f=l(856),p=S(l(607));let d=C(class extends(0,f.StarterPlugin)(y.PicMiddlewareConfig){onApply(){this.config.applyTo(this),this.pics.middleware(this)}use(s,n){return n(s)}},"BasePicMiddlewarePlugin");g([(0,f.Inject)(!0),P("design:type",p.default)],d.prototype,"pics",void 0),g([(0,f.InjectLogger)(),P("design:type",j.Logger)],d.prototype,"logger",void 0),d=g([(0,f.Reusable)()],d),c.BasePicMiddlewarePlugin=d,c.PicMiddlewarePlugin=(0,f.CreatePluginFactory)(d,y.PicMiddlewareConfig);function u(o){var s;const n=(0,f.schemaFromClass)(y.PicMiddlewareConfig);return Object.assign(n.dict,o),s=C(class{constructor(v,h){this.ctx=v,this.config=h,this.name=h.name,this.prepend=h.prepend,v.pics.middleware(this)}use(v,h){return h(v)}},"PlainPicMiddlewarePluginBase"),s.Config=n,s.using=["pics"],s.reusable=!0,s}C(u,"PlainPicMiddlewarePlugin"),c.PlainPicMiddlewarePlugin=u},670:function(w,c,l){var g=this&&this.__decorate||function(d,u,o,s){var n=arguments.length,r=n<3?u:s===null?s=Object.getOwnPropertyDescriptor(u,o):s,v;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(d,u,o,s);else for(var h=d.length-1;h>=0;h--)(v=d[h])&&(r=(n<3?v(r):n>3?v(u,o,r):v(u,o))||r);return n>3&&r&&Object.defineProperty(u,o,r),r},P=this&&this.__metadata||function(d,u){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(d,u)},S=this&&this.__importDefault||function(d){return d&&d.__esModule?d:{default:d}};Object.defineProperty(c,"__esModule",{value:!0}),c.PicAssetsTransformMiddleware=void 0;const j=l(856),y=S(l(24)),f=l(714);let p=C(class extends(0,f.PicMiddlewarePlugin)(){async use(u,o){const s=await o(u);return this.assets?this.assets.upload(s,void 0):s}},"PicAssetsTransformMiddleware");g([(0,j.Inject)(),P("design:type",y.default)],p.prototype,"assets",void 0),p=g([(0,j.DefinePlugin)()],p),c.PicAssetsTransformMiddleware=p},177:function(w,c,l){var g=this&&this.__decorate||function(y,f,p,d){var u=arguments.length,o=u<3?f:d===null?d=Object.getOwnPropertyDescriptor(f,p):d,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(y,f,p,d);else for(var n=y.length-1;n>=0;n--)(s=y[n])&&(o=(u<3?s(o):u>3?s(f,p,o):s(f,p))||o);return u>3&&o&&Object.defineProperty(f,p,o),o};Object.defineProperty(c,"__esModule",{value:!0}),c.PicDownloaderMiddleware=void 0;const P=l(856),S=l(714);let j=C(class extends(0,S.PicMiddlewarePlugin)(){async use(f,p){const d=await this.pics.download(f);return p(d)}},"PicDownloaderMiddleware");j=g([(0,P.DefinePlugin)()],j),c.PicDownloaderMiddleware=j},310:function(w,c,l){var g=this&&this.__decorate||function(s,n,r,v){var h=arguments.length,_=h<3?n:v===null?v=Object.getOwnPropertyDescriptor(n,r):v,O;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")_=Reflect.decorate(s,n,r,v);else for(var B=s.length-1;B>=0;B--)(O=s[B])&&(_=(h<3?O(_):h>3?O(n,r,_):O(n,r))||_);return h>3&&_&&Object.defineProperty(n,r,_),_},P=this&&this.__metadata||function(s,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(s,n)},S=this&&this.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(c,"__esModule",{value:!0}),c.PlainPicSourcePlugin=c.PicSourcePlugin=c.BasePicSourcePlugin=c.PicSource=void 0;const j=l(126),y=l(856),f=S(l(607)),p=l(913);class d{constructor(n){this.ctx=n,this.tags=[],this.weight=1,this.name="default",this.description="",this.isDefault=!1}applyConfig(n){this.name=n.name,this.tags??=n.tags,this.weight??=n.weight,this.description??=n.description,this.isDefault??=n.isDefault}randomPic(n){throw new Error("Not implemented")}onStartup(){}onShutdown(){}getDisplayString(){let n=this.name;return this.tags.length&&(n+=` \u6807\u7B7E: ${this.tags.join(",")}`),this.description&&(n+=` ${this.description}`),n}}C(d,"PicSource"),c.PicSource=d;let u=C(class extends d{constructor(n,r){super(n)}initializeSource(){this.http=this.ctx.http.extend(this.config.http||{}),this.config.applyTo(this),this.pics.addSource(this)}},"BasePicSourcePlugin");g([(0,y.InjectConfig)(),P("design:type",p.PicSourceConfig)],u.prototype,"config",void 0),g([(0,y.Inject)(!0),P("design:type",f.default)],u.prototype,"pics",void 0),g([(0,y.InjectLogger)(),P("design:type",j.Logger)],u.prototype,"logger",void 0),g([(0,y.Apply)(),P("design:type",Function),P("design:paramtypes",[]),P("design:returntype",void 0)],u.prototype,"initializeSource",null),u=g([(0,y.Reusable)(),P("design:paramtypes",[j.Context,Object])],u),c.BasePicSourcePlugin=u,c.PicSourcePlugin=(0,y.CreatePluginFactory)(u,p.PicSourceConfig);function o(s){var n;const r=(0,y.SchemaClass)(p.PicSourceConfig);return Object.assign(r.dict,s),n=C(class extends d{constructor(h,_){super(h),this.config=_,this.http=this.ctx.http.extend(this.config.http||{}),this.applyConfig(_),h.pics.addSource(this)}},"PlainPicSourcePluginBase"),n.Config=r,n.using=["pics"],n.reusable=!0,n}C(o,"PlainPicSourcePlugin"),c.PlainPicSourcePlugin=o},24:w=>{w.exports=require("@koishijs/assets")},162:w=>{w.exports=require("ext2mime")},221:w=>{w.exports=require("file-type")},126:w=>{w.exports=require("koishi")},856:w=>{w.exports=require("koishi-thirdeye")},517:w=>{w.exports=require("lodash")},147:w=>{w.exports=require("fs")},17:w=>{w.exports=require("path")}},A={};function x(w){var c=A[w];if(c!==void 0)return c.exports;var l=A[w]={exports:{}};return F[w].call(l.exports,l,l.exports,x),l.exports}C(x,"__webpack_require__");var $=x(607),N=exports;for(var W in $)N[W]=$[W];$.__esModule&&Object.defineProperty(N,"__esModule",{value:!0})})(); //# sourceMappingURL=index.js.map