@pikokr/command.ts 5.0.6 → 5.0.7-dev.51b0ed5

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var Yt=Object.create;var B=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var oe=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var c=(n,t)=>B(n,"name",{value:t,configurable:!0});var m=(n,t)=>()=>(n&&(t=n(n=0)),t);var Tt=(n,t)=>{for(var e in t)B(n,e,{get:t[e],enumerable:!0})},Ht=(n,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ee(t))!re.call(n,r)&&r!==e&&B(n,r,{get:()=>t[r],enumerable:!(o=te(t,r))||o.enumerable});return n};var x=(n,t,e)=>(e=n!=null?Yt(oe(n)):{},Ht(t||!n||!n.__esModule?B(e,"default",{value:n,enumerable:!0}):e,n)),ne=n=>Ht(B({},"__esModule",{value:!0}),n);var z,fe,pt,X,lt,Y,E=m(()=>{"use strict";z=Symbol(),fe=Symbol(),pt=Symbol(),X=Symbol(),lt=Symbol(),Y=Symbol()});var jt,ft,tt,ut=m(()=>{"use strict";jt=require("discord.js");E();ft=c((n,t)=>{let e=Reflect.getMetadata(lt,n,t);return e||(e=new jt.Collection,Reflect.defineMetadata(lt,e,n,t)),e},"getComponentHookStore"),tt=c((n,t)=>(e,o)=>{let r=ft(e,o),s=r.get(n);s||(s=[],r.set(n,s)),s.push(t)},"createComponentHook")});var dt,U,se,w,gt,Z,$=m(()=>{"use strict";dt=require("discord.js");ut();E();U=c(n=>{let t=Reflect.getMetadata(z,n);return t||(t=new dt.Collection,Reflect.defineMetadata(z,t,n)),t},"getComponentStore"),se=c((n,t)=>U(n).get(t),"getComponent"),w=c(n=>t=>(e,o)=>{var r=new n(t,Reflect.get(e,o),Reflect.getMetadata("design:paramtypes",e,o));let s=ft(e,o);r.hooks=s;let i=U(e);gt(e,o).forEach((l,u)=>{var f;(f=r.argTypes.get(u))==null||f.decorators.push(l)}),i.set(o,r)},"createComponentDecorator"),gt=c((n,t)=>{let e=Reflect.getMetadata(z,n,t);return e||(e=new dt.Collection,Reflect.defineMetadata(z,e,n,t)),e},"getComponentArgumentStore"),Z=c(n=>t=>(e,o,r)=>{var s=new n(t);gt(e,o).set(r,s)},"createArgumentDecorator")});var A,ht=m(()=>{"use strict";A=class{constructor(t){this.type=t,this.decorators=[]}};c(A,"ComponentArgument")});var It,R,Lt=m(()=>{"use strict";It=x(require("lodash")),R=class{constructor(t){typeof t=="object"?this.options=It.default.merge(this.defaultOptions(),t):this.options=t}defaultOptions(){return{}}};c(R,"ComponentArgumentDecorator")});var d,ie,yt=m(()=>{"use strict";$();W();d=class extends g{};c(d,"ApplicationCommandComponent");ie=w(d)});var H,Ot,xt=m(()=>{"use strict";D();H=class extends R{};c(H,"ApplicationCommandOption");Ot=Z(H)});var Et,et,Ct,$t=m(()=>{"use strict";Et=require("discord.js");E();et=c(n=>{let t=Reflect.getMetadata(pt,n);return t||(t=new Et.Collection,Reflect.defineMetadata(pt,t,n)),t},"getModuleHookStore"),Ct=c(n=>(t,e)=>{let o=et(t),r=o.get(n);r||(r=[],o.set(n,r)),r.push(Reflect.get(t,e))},"moduleHook")});var J=m(()=>{"use strict";$t();ut()});var k,K,Q=m(()=>{"use strict";W();$();k=class extends g{defaultOptions(){return{emitter:"discord"}}constructor(t,e,o){super({event:t.event,emitter:t.emitter??"discord"},e,o)}};c(k,"ListenerComponent");K=w(k)});var ot,At,Wt,Dt,Pt,P,wt=m(()=>{"use strict";ot=x(require("chalk")),At=require("discord.js"),Wt=x(require("lodash"));bt();J();Q();E();Dt=x(require("walk-sync")),Pt=x(require("path")),P=class{constructor(t,e){this.client=e,this.extensions=[],this.emitters=new At.Collection,this.logger=t.getChildLogger({prefix:[ot.default.green("[Registry]")]})}getComponentsWithTypeGlobal(t){let e=[];for(let o of this.extensions)e.push(...this.getComponentsWithType(o,t));return e}getComponentsWithType(t,e){let o=U(t);return Array.from(o.filter(r=>r.constructor===e).values())}registerEventListeners(t){let e=this.getComponentsWithType(t,k);for(let o of e){let r=this.emitters.get(o.options.emitter);if(r){let s=o.method.bind(t);Reflect.defineMetadata("bound",s,o),r.addListener(o.options.event,s)}}}unregisterEventListeners(t){let e=this.getComponentsWithType(t,k);for(let o of e){let r=this.emitters.get(o.options.emitter),s=Reflect.getMetadata("bound",o);r&&s&&r.removeListener(o.options.event,s)}}async loadAllModulesInDirectory(t){let e=[],o=(0,Dt.default)(t).filter(r=>r.endsWith(".ts")||r.endsWith(".js"));for(let r of o)try{let s=Pt.default.join(t,r),i=require(s);if(typeof i.setup!="function")continue;let a=await i.setup();e.push(...await this.registerModules(a,s))}catch{this.logger.error(`Failed to load ${r}`)}return e}async registerModules(t,e){let o=[];if(t instanceof Array)for(let r of t)await this.registerModule(r),Reflect.defineMetadata(Y,e,r),o.push(r);else await this.registerModule(t),Reflect.defineMetadata(Y,e,t),o.push(t);return o}async reloadModules(){let t=[],e=new Set;for(let o of this.extensions){let r=Reflect.getMetadata(Y,o);!r||(e.add(r),await this.unregisterModule(o),delete require.cache[require.resolve(r)])}for(let o of e)try{let r=require(o);if(typeof r.setup!="function")continue;let s=await r.setup(this.client);await this.registerModules(s,o),t.push({file:o,result:!0})}catch(r){t.push({file:o,result:!1,error:r})}return t}async registerModule(t){Reflect.defineMetadata(X,this.client,t),this.registerEventListeners(t),await this.runModuleHook(t,"load"),this.extensions.push(t),this.logger.info(`Module registered: ${ot.default.green(t.constructor.name)}`)}async unregisterModule(t){this.unregisterEventListeners(t),await this.runModuleHook(t,"unload"),Wt.default.remove(this.extensions,e=>e===t),this.logger.info(`Module unregistered: ${ot.default.green(t.constructor.name)}`)}runModuleHook(t,e,...o){let s=et(t).get(e);if(s)for(let i of s)i.call(t,...o)}registerEventEmitter(t,e){this.emitters.set(t,e)}};c(P,"Registry")});var rt=m(()=>{"use strict";wt();Mt()});var j,b,nt=m(()=>{"use strict";W();$();j=class extends g{};c(j,"ConverterComponent");b=w(j)});var Nt,Gt,N,St=m(()=>{"use strict";Nt=x(require("chalk")),Gt=require("discord.js");nt();rt();N=class{get commandClient(){return M.getFromModule(this)}get client(){return this.commandClient.discord}get logger(){return this._logger||(this._logger=this.commandClient.logger.getChildLogger({prefix:[Nt.default.green(`[${this.constructor.name}]`)],displayFunctionName:!1})),this._logger}async convertArguments(t,e,o,r){let s=new Gt.Collection;for(let i of this.commandClient.registry.extensions)for(let a of this.commandClient.registry.getComponentsWithType(i,j))a.options.component==t&&s.set(a.options.type,{component:a,ext:i});for(let[i,a]of o){let l=s.get(a.type);if(!l){e[i]=void 0;continue}let u=await r(a,i,l.component);e[i]=await l.component.execute(l.ext,u)}}};c(N,"Extension")});var qt,I,vt=m(()=>{"use strict";qt=x(require("chalk"));St();I=class extends N{get logger(){return this._logger||(this._logger=this.commandClient.ctsLogger.getChildLogger({prefix:[qt.default.green(`[${this.constructor.name}]`)],displayFunctionName:!1})),this._logger}};c(I,"CTSExtension")});var F,p,V,C,h,Bt=m(()=>{"use strict";F=x(require("chalk")),p=require("discord.js");yt();xt();J();Q();rt();nt();vt();V=function(n,t,e,o){var r=arguments.length,s=r<3?t:o===null?o=Object.getOwnPropertyDescriptor(t,e):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,t,e,o);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(s=(r<3?i(s):r>3?i(t,e,s):i(t,e))||s);return r>3&&s&&Object.defineProperty(t,e,s),s},C=function(n,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,t)},h=class extends I{constructor(t){super(),this.config=t}async interactionCreate(t){var s;if(t.type!==p.InteractionType.ApplicationCommand)return;let e=null,o=null,r=this.commandClient.registry.extensions;for(let i of r){let a=this.commandClient.registry.getComponentsWithType(i,d);for(let l of a)l.options.name===t.commandName&&(o=i,e=l)}if(e&&o){let i=[];await this.convertArguments(d,i,e.argTypes,()=>[t]);for(let[a,l]of e.argTypes){let u=null;for(let f of l.decorators)if(f instanceof H){if([p.ApplicationCommandOptionType.Subcommand,p.ApplicationCommandOptionType.SubcommandGroup].includes(f.options.type)&&t.isChatInputCommand()){if(f.options.type===p.ApplicationCommandOptionType.Subcommand){u=t.options.getSubcommand()===f.options.name;break}if(f.options.type===p.ApplicationCommandOptionType.SubcommandGroup){u=t.options.getSubcommandGroup()===f.options.name;break}}u=(s=t.options.get(f.options.name,!1))==null?void 0:s.value;break}u&&(i[a]=u)}try{await e.execute(o,i,[t])}catch(a){this.commandClient.emit("applicationCommandInvokeError",a,t)}}}async load(){}async sync(){let t=M.getFromModule(this);this.logger.info("Trying to sync commands...");let e=[],o=new p.Collection;for(let r of t.registry.getComponentsWithTypeGlobal(d)){let s={...r.options};if(s.type===p.ApplicationCommandType.ChatInput){s.options=[];for(let[,i]of r.argTypes){let a=i.decorators.find(l=>l.constructor===H);a&&s.options.push(a.options)}}if(r.options.guilds){for(let i of r.options.guilds){let a=o.get(i);a||(a=[],o.set(i,a)),a.push(s)}continue}if(this.config.guilds){for(let i of this.config.guilds){let a=o.get(i);a||(a=[],o.set(i,a)),a.push(s)}continue}e.push(s)}if(o.size)for(let[r,s]of o){this.logger.info(`Processing ${F.default.green(s.length)} commands(${s.map(i=>F.default.blue(i.name)).join(", ")})`);try{let i=await this.client.guilds.fetch(r);await i.fetch(),this.logger.info(`Registering commands for guild ${F.default.green(i.name)}(${F.default.blue(i.id)})`),await i.commands.set(s),this.logger.info(`Successfully registered commands for guild ${F.default.green(i.name)}(${F.default.blue(i.id)})`)}catch(i){this.logger.error(`Failed to register commands to guild ${F.default.green(r)}: ${i.message}`)}}if(e.length)try{this.logger.info("Registering commands globally..."),await this.client.application.commands.set(e),this.logger.info("Successfully registered commands.")}catch(r){this.logger.error(`Failed to register commands to global: ${r.message}`)}}async chatInteraction(t){return t}async messageInteraction(t){return t}async userInteraction(t){return t}};c(h,"ApplicationCommandExtension");V([K({event:"interactionCreate"}),C("design:type",Function),C("design:paramtypes",[typeof p.Interaction>"u"?Object:p.Interaction])],h.prototype,"interactionCreate",null);V([Ct("load"),C("design:type",Function),C("design:paramtypes",[])],h.prototype,"load",null);V([b({component:d,parameterless:!0,type:p.ChatInputCommandInteraction}),C("design:type",Function),C("design:paramtypes",[typeof p.ChatInputCommandInteraction>"u"?Object:p.ChatInputCommandInteraction])],h.prototype,"chatInteraction",null);V([b({component:d,parameterless:!0,type:p.MessageContextMenuCommandInteraction}),C("design:type",Function),C("design:paramtypes",[typeof p.MessageContextMenuCommandInteraction>"u"?Object:p.MessageContextMenuCommandInteraction])],h.prototype,"messageInteraction",null);V([b({component:d,parameterless:!0,type:p.UserContextMenuCommandInteraction}),C("design:type",Function),C("design:paramtypes",[typeof p.UserContextMenuCommandInteraction>"u"?Object:p.UserContextMenuCommandInteraction])],h.prototype,"userInteraction",null)});var y,ce,Rt=m(()=>{"use strict";$();W();y=class extends g{};c(y,"TextCommandComponent");ce=w(y)});var L,ae,kt=m(()=>{"use strict";D();D();L=class extends R{};c(L,"TextCommandRestOption");ae=Z(L)});var G,st,_,S,zt=m(()=>{"use strict";Q();G=require("discord.js");vt();Rt();kt();D();st=function(n,t,e,o){var r=arguments.length,s=r<3?t:o===null?o=Object.getOwnPropertyDescriptor(t,e):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,t,e,o);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(s=(r<3?i(s):r>3?i(t,e,s):i(t,e))||s);return r>3&&s&&Object.defineProperty(t,e,s),s},_=function(n,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,t)},S=class extends I{constructor(t){super(),this.config=t}async processPrefix(t){let e=t.content,o=this.config.prefix;if(typeof o=="function"&&(o=await o(t)),typeof o=="string")return e.startsWith(o)?o.length:null;if(o instanceof Array){let r=o.find(s=>e.startsWith(s));return r?r.length:null}return null}async messageCreate(t){let e=await this.processPrefix(t);if(!e)return;let o=t.content.slice(e),r=[],s=new Map;for(let v of this.commandClient.registry.extensions)for(let O of this.commandClient.registry.getComponentsWithType(v,y))r.push(O),s.set(O,v);let i=0,a=r.find(v=>{let O=[v.options.name];v.options.aliases&&O.push(...v.options.aliases);for(let T of O)if(o.startsWith(T))return o.length===T.length?(i=T.length,!0):(i=T.length,o.startsWith(T+" "));return!1});if(!a)return;let l=s.get(a);if(!l)return;let u=[],f=o.slice(i+1).split(/ /g);await this.convertArguments(y,u,a.argTypes,async(v,O,T)=>{if(T.options.parameterless)return[t];if(v.decorators.find(mt=>mt.constructor===L)){let mt=f.join(" ");return f=[],[mt,t]}return[f.shift(),t]}),await a.execute(l,u,[t])}async mesage(t){return t}async str(t){return t}async num(t){return Number(t)}};c(S,"TextCommandExtension");st([K({event:"messageCreate",emitter:"discord"}),_("design:type",Function),_("design:paramtypes",[typeof G.Message>"u"?Object:G.Message])],S.prototype,"messageCreate",null);st([b({component:y,type:G.Message,parameterless:!0}),_("design:type",Function),_("design:paramtypes",[typeof G.Message>"u"?Object:G.Message])],S.prototype,"mesage",null);st([b({component:y,type:String}),_("design:type",Function),_("design:paramtypes",[String])],S.prototype,"str",null);st([b({component:y,type:Number}),_("design:type",Function),_("design:paramtypes",[String])],S.prototype,"num",null)});var Jt={};Tt(Jt,{CommandClient:()=>M});var it,ct,Ut,Zt,M,Mt=m(()=>{"use strict";it=x(require("chalk")),ct=require("discord.js"),Ut=x(require("events")),Zt=require("tslog");Bt();zt();E();wt();M=class extends Ut.default{constructor(t,e=new Zt.Logger({dateTimeTimezone:Intl.DateTimeFormat().resolvedOptions().timeZone})){super(),this.discord=t,this.logger=e,this.owners=new Set,this.ctsLogger=e.getChildLogger({prefix:[it.default.blue("[command.ts]")],displayFilePath:"hidden",displayFunctionName:!1}),this.registry=new P(this.ctsLogger,this),this.registry.registerEventEmitter("cts",this),this.registry.registerEventEmitter("discord",this.discord)}async fetchOwners(){if(!this.discord.application)throw new Error("The client is not logged in.");this.ctsLogger.info("Fetching owners..."),await this.discord.application.fetch();let t=this.discord.application.owner;if(!t)throw new Error("Cannot find application owner");let e=[];if(t instanceof ct.User)this.owners.add(t.id),e.push(t.tag);else if(t instanceof ct.Team)for(let[o,r]of t.members)this.owners.add(o),e.push(r.user.tag);this.ctsLogger.info(`Fetched ${it.default.green(e.length)} owners(${e.map(o=>it.default.blue(o)).join(", ")})`)}async enableApplicationCommandsExtension(t){await this.registry.registerModule(new h(t)),this.ctsLogger.info("Application command extension enabled.")}async enableTextCommandsExtension(t){await this.registry.registerModule(new S(t)),this.ctsLogger.info("Text command extension enabled.")}getApplicationCommandsExtension(){return this.registry.extensions.find(t=>t.constructor===h)}static getFromModule(t){return Reflect.getMetadata(X,t)}};c(M,"CommandClient")});var Ft,g,W=m(()=>{"use strict";Ft=require("discord.js");ht();g=class{hooks=new Ft.Collection;argTypes=new Ft.Collection;constructor(t,e,o){this.options=this.convertOptions(t),this.method=e;for(let r=0;r<o.length;r++){let s=o[r];this.argTypes.set(r,new A(s))}}convertOptions(t){return t}async executeHook(t,e,o){let r=this.hooks.get(e);if(!r)return;let{CommandClient:s}=await Promise.resolve().then(()=>(Mt(),Jt));for(let i of r)await i.call(null,s.getFromModule(t),...o)}async execute(t,e,o=e){await this.executeHook(t,"beforeCall",o);let r;try{r=await this.method.call(t,...e)}catch(s){throw await this.executeHook(t,"invokeError",[s]),s}return await this.executeHook(t,"afterCall",[r]),r}};c(g,"BaseComponent")});var So,bt=m(()=>{"use strict";So=require("reflect-metadata");$();ht();Lt();W()});var q,_t=m(()=>{"use strict";q=class{};c(q,"OwnerOnlyError")});var at,Kt,me,Qt=m(()=>{"use strict";at=require("discord.js");J();_t();Kt=c(n=>tt("beforeCall",n),"createCheckDecorator"),me=Kt(async(n,t)=>{let e=!1;if(t instanceof at.BaseInteraction?e=n.owners.has(t.user.id):t instanceof at.Message&&(e=n.owners.has(t.author.id)),!e)throw new q})});var Vt=m(()=>{"use strict";Qt();_t()});var Xt=m(()=>{"use strict";St()});var D=m(()=>{"use strict";bt();J();nt();Vt();Q();rt();Xt()});var pe={};Tt(pe,{ApplicationCommandComponent:()=>d,BaseComponent:()=>g,CommandClient:()=>M,ComponentArgument:()=>A,ComponentArgumentDecorator:()=>R,ConverterComponent:()=>j,Extension:()=>N,ListenerComponent:()=>k,OwnerOnlyError:()=>q,Registry:()=>P,TextCommandComponent:()=>y,TextCommandRestOption:()=>L,applicationCommand:()=>ie,argConverter:()=>b,command:()=>ce,createArgumentDecorator:()=>Z,createCheckDecorator:()=>Kt,createComponentDecorator:()=>w,createComponentHook:()=>tt,getComponent:()=>se,getComponentArgumentStore:()=>gt,getComponentStore:()=>U,getModuleHookStore:()=>et,listener:()=>K,moduleHook:()=>Ct,option:()=>Ot,ownerOnly:()=>me,rest:()=>ae});module.exports=ne(pe);D();yt();xt();Rt();kt();0&&(module.exports={ApplicationCommandComponent,BaseComponent,CommandClient,ComponentArgument,ComponentArgumentDecorator,ConverterComponent,Extension,ListenerComponent,OwnerOnlyError,Registry,TextCommandComponent,TextCommandRestOption,applicationCommand,argConverter,command,createArgumentDecorator,createCheckDecorator,createComponentDecorator,createComponentHook,getComponent,getComponentArgumentStore,getComponentStore,getModuleHookStore,listener,moduleHook,option,ownerOnly,rest});
1
+ "use strict";var Yt=Object.create;var B=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var oe=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var c=(n,t)=>B(n,"name",{value:t,configurable:!0});var m=(n,t)=>()=>(n&&(t=n(n=0)),t);var Tt=(n,t)=>{for(var e in t)B(n,e,{get:t[e],enumerable:!0})},Ht=(n,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ee(t))!re.call(n,r)&&r!==e&&B(n,r,{get:()=>t[r],enumerable:!(o=te(t,r))||o.enumerable});return n};var x=(n,t,e)=>(e=n!=null?Yt(oe(n)):{},Ht(t||!n||!n.__esModule?B(e,"default",{value:n,enumerable:!0}):e,n)),ne=n=>Ht(B({},"__esModule",{value:!0}),n);var z,fe,pt,X,lt,Y,E=m(()=>{"use strict";z=Symbol(),fe=Symbol(),pt=Symbol(),X=Symbol(),lt=Symbol(),Y=Symbol()});var jt,ft,tt,ut=m(()=>{"use strict";jt=require("discord.js");E();ft=c((n,t)=>{let e=Reflect.getMetadata(lt,n,t);return e||(e=new jt.Collection,Reflect.defineMetadata(lt,e,n,t)),e},"getComponentHookStore"),tt=c((n,t)=>(e,o)=>{let r=ft(e,o),s=r.get(n);s||(s=[],r.set(n,s)),s.push(t)},"createComponentHook")});var dt,U,se,w,gt,Z,W=m(()=>{"use strict";dt=require("discord.js");ut();E();U=c(n=>{let t=Reflect.getMetadata(z,n);return t||(t=new dt.Collection,Reflect.defineMetadata(z,t,n)),t},"getComponentStore"),se=c((n,t)=>U(n).get(t),"getComponent"),w=c(n=>t=>(e,o)=>{var r=new n(t,Reflect.get(e,o),Reflect.getMetadata("design:paramtypes",e,o));let s=ft(e,o);r.hooks=s;let i=U(e);gt(e,o).forEach((l,u)=>{var f;(f=r.argTypes.get(u))==null||f.decorators.push(l)}),i.set(o,r)},"createComponentDecorator"),gt=c((n,t)=>{let e=Reflect.getMetadata(z,n,t);return e||(e=new dt.Collection,Reflect.defineMetadata(z,e,n,t)),e},"getComponentArgumentStore"),Z=c(n=>t=>(e,o,r)=>{var s=new n(t);gt(e,o).set(r,s)},"createArgumentDecorator")});var $,ht=m(()=>{"use strict";$=class{constructor(t){this.type=t,this.decorators=[]}};c($,"ComponentArgument")});var It,R,Lt=m(()=>{"use strict";It=x(require("lodash")),R=class{constructor(t){typeof t=="object"?this.options=It.default.merge(this.defaultOptions(),t):this.options=t}defaultOptions(){return{}}};c(R,"ComponentArgumentDecorator")});var d,ie,yt=m(()=>{"use strict";W();A();d=class extends g{};c(d,"ApplicationCommandComponent");ie=w(d)});var H,Ot,xt=m(()=>{"use strict";D();H=class extends R{};c(H,"ApplicationCommandOption");Ot=Z(H)});var Et,et,Ct,Wt=m(()=>{"use strict";Et=require("discord.js");E();et=c(n=>{let t=Reflect.getMetadata(pt,n);return t||(t=new Et.Collection,Reflect.defineMetadata(pt,t,n)),t},"getModuleHookStore"),Ct=c(n=>(t,e)=>{let o=et(t),r=o.get(n);r||(r=[],o.set(n,r)),r.push(Reflect.get(t,e))},"moduleHook")});var J=m(()=>{"use strict";Wt();ut()});var k,K,Q=m(()=>{"use strict";A();W();k=class extends g{defaultOptions(){return{emitter:"discord"}}constructor(t,e,o){super({event:t.event,emitter:t.emitter??"discord"},e,o)}};c(k,"ListenerComponent");K=w(k)});var ot,$t,At,Dt,Pt,P,wt=m(()=>{"use strict";ot=x(require("chalk")),$t=require("discord.js"),At=x(require("lodash"));bt();J();Q();E();Dt=x(require("walk-sync")),Pt=x(require("path")),P=class{constructor(t,e){this.client=e,this.extensions=[],this.emitters=new $t.Collection,this.logger=t.getChildLogger({prefix:[ot.default.green("[Registry]")]})}getComponentsWithTypeGlobal(t){let e=[];for(let o of this.extensions)e.push(...this.getComponentsWithType(o,t));return e}getComponentsWithType(t,e){let o=U(t);return Array.from(o.filter(r=>r.constructor===e).values())}registerEventListeners(t){let e=this.getComponentsWithType(t,k);for(let o of e){let r=this.emitters.get(o.options.emitter);if(r){let s=o.method.bind(t);Reflect.defineMetadata("bound",s,o),r.addListener(o.options.event,s)}}}unregisterEventListeners(t){let e=this.getComponentsWithType(t,k);for(let o of e){let r=this.emitters.get(o.options.emitter),s=Reflect.getMetadata("bound",o);r&&s&&r.removeListener(o.options.event,s)}}async loadAllModulesInDirectory(t){let e=[],o=(0,Dt.default)(t).filter(r=>r.endsWith(".ts")||r.endsWith(".js"));for(let r of o)if(!r.endsWith(".d.ts"))try{let s=Pt.default.join(t,r),i=require(s);if(typeof i.setup!="function")continue;let a=await i.setup();e.push(...await this.registerModules(a,s))}catch{this.logger.error(`Failed to load ${r}`)}return e}async registerModules(t,e){let o=[];if(t instanceof Array)for(let r of t)await this.registerModule(r),Reflect.defineMetadata(Y,e,r),o.push(r);else await this.registerModule(t),Reflect.defineMetadata(Y,e,t),o.push(t);return o}async reloadModules(){let t=[],e=new Set;for(let o of this.extensions){let r=Reflect.getMetadata(Y,o);!r||(e.add(r),await this.unregisterModule(o),delete require.cache[require.resolve(r)])}for(let o of e)try{let r=require(o);if(typeof r.setup!="function")continue;let s=await r.setup(this.client);await this.registerModules(s,o),t.push({file:o,result:!0})}catch(r){t.push({file:o,result:!1,error:r})}return t}async registerModule(t){Reflect.defineMetadata(X,this.client,t),this.registerEventListeners(t),await this.runModuleHook(t,"load"),this.extensions.push(t),this.logger.info(`Module registered: ${ot.default.green(t.constructor.name)}`)}async unregisterModule(t){this.unregisterEventListeners(t),await this.runModuleHook(t,"unload"),At.default.remove(this.extensions,e=>e===t),this.logger.info(`Module unregistered: ${ot.default.green(t.constructor.name)}`)}runModuleHook(t,e,...o){let s=et(t).get(e);if(s)for(let i of s)i.call(t,...o)}registerEventEmitter(t,e){this.emitters.set(t,e)}};c(P,"Registry")});var rt=m(()=>{"use strict";wt();Mt()});var j,b,nt=m(()=>{"use strict";A();W();j=class extends g{};c(j,"ConverterComponent");b=w(j)});var Nt,Gt,N,St=m(()=>{"use strict";Nt=x(require("chalk")),Gt=require("discord.js");nt();rt();N=class{get commandClient(){return M.getFromModule(this)}get client(){return this.commandClient.discord}get logger(){return this._logger||(this._logger=this.commandClient.logger.getChildLogger({prefix:[Nt.default.green(`[${this.constructor.name}]`)],displayFunctionName:!1})),this._logger}async convertArguments(t,e,o,r){let s=new Gt.Collection;for(let i of this.commandClient.registry.extensions)for(let a of this.commandClient.registry.getComponentsWithType(i,j))a.options.component==t&&s.set(a.options.type,{component:a,ext:i});for(let[i,a]of o){let l=s.get(a.type);if(!l){e[i]=void 0;continue}let u=await r(a,i,l.component);e[i]=await l.component.execute(l.ext,u)}}};c(N,"Extension")});var qt,I,vt=m(()=>{"use strict";qt=x(require("chalk"));St();I=class extends N{get logger(){return this._logger||(this._logger=this.commandClient.ctsLogger.getChildLogger({prefix:[qt.default.green(`[${this.constructor.name}]`)],displayFunctionName:!1})),this._logger}};c(I,"CTSExtension")});var F,p,V,C,h,Bt=m(()=>{"use strict";F=x(require("chalk")),p=require("discord.js");yt();xt();J();Q();rt();nt();vt();V=function(n,t,e,o){var r=arguments.length,s=r<3?t:o===null?o=Object.getOwnPropertyDescriptor(t,e):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,t,e,o);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(s=(r<3?i(s):r>3?i(t,e,s):i(t,e))||s);return r>3&&s&&Object.defineProperty(t,e,s),s},C=function(n,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,t)},h=class extends I{constructor(t){super(),this.config=t}async interactionCreate(t){var s;if(t.type!==p.InteractionType.ApplicationCommand)return;let e=null,o=null,r=this.commandClient.registry.extensions;for(let i of r){let a=this.commandClient.registry.getComponentsWithType(i,d);for(let l of a)l.options.name===t.commandName&&(o=i,e=l)}if(e&&o){let i=[];await this.convertArguments(d,i,e.argTypes,()=>[t]);for(let[a,l]of e.argTypes){let u=null;for(let f of l.decorators)if(f instanceof H){if([p.ApplicationCommandOptionType.Subcommand,p.ApplicationCommandOptionType.SubcommandGroup].includes(f.options.type)&&t.isChatInputCommand()){if(f.options.type===p.ApplicationCommandOptionType.Subcommand){u=t.options.getSubcommand()===f.options.name;break}if(f.options.type===p.ApplicationCommandOptionType.SubcommandGroup){u=t.options.getSubcommandGroup()===f.options.name;break}}u=(s=t.options.get(f.options.name,!1))==null?void 0:s.value;break}u&&(i[a]=u)}try{await e.execute(o,i,[t])}catch(a){this.commandClient.emit("applicationCommandInvokeError",a,t)}}}async load(){}async sync(){let t=M.getFromModule(this);this.logger.info("Trying to sync commands...");let e=[],o=new p.Collection;for(let r of t.registry.getComponentsWithTypeGlobal(d)){let s={...r.options};if(s.type===p.ApplicationCommandType.ChatInput){s.options=[];for(let[,i]of r.argTypes){let a=i.decorators.find(l=>l.constructor===H);a&&s.options.push(a.options)}}if(r.options.guilds){for(let i of r.options.guilds){let a=o.get(i);a||(a=[],o.set(i,a)),a.push(s)}continue}if(this.config.guilds){for(let i of this.config.guilds){let a=o.get(i);a||(a=[],o.set(i,a)),a.push(s)}continue}e.push(s)}if(o.size)for(let[r,s]of o){this.logger.info(`Processing ${F.default.green(s.length)} commands(${s.map(i=>F.default.blue(i.name)).join(", ")})`);try{let i=await this.client.guilds.fetch(r);await i.fetch(),this.logger.info(`Registering commands for guild ${F.default.green(i.name)}(${F.default.blue(i.id)})`),await i.commands.set(s),this.logger.info(`Successfully registered commands for guild ${F.default.green(i.name)}(${F.default.blue(i.id)})`)}catch(i){this.logger.error(`Failed to register commands to guild ${F.default.green(r)}: ${i.message}`)}}if(e.length)try{this.logger.info("Registering commands globally..."),await this.client.application.commands.set(e),this.logger.info("Successfully registered commands.")}catch(r){this.logger.error(`Failed to register commands to global: ${r.message}`)}}async chatInteraction(t){return t}async messageInteraction(t){return t}async userInteraction(t){return t}};c(h,"ApplicationCommandExtension");V([K({event:"interactionCreate"}),C("design:type",Function),C("design:paramtypes",[typeof p.Interaction>"u"?Object:p.Interaction])],h.prototype,"interactionCreate",null);V([Ct("load"),C("design:type",Function),C("design:paramtypes",[])],h.prototype,"load",null);V([b({component:d,parameterless:!0,type:p.ChatInputCommandInteraction}),C("design:type",Function),C("design:paramtypes",[typeof p.ChatInputCommandInteraction>"u"?Object:p.ChatInputCommandInteraction])],h.prototype,"chatInteraction",null);V([b({component:d,parameterless:!0,type:p.MessageContextMenuCommandInteraction}),C("design:type",Function),C("design:paramtypes",[typeof p.MessageContextMenuCommandInteraction>"u"?Object:p.MessageContextMenuCommandInteraction])],h.prototype,"messageInteraction",null);V([b({component:d,parameterless:!0,type:p.UserContextMenuCommandInteraction}),C("design:type",Function),C("design:paramtypes",[typeof p.UserContextMenuCommandInteraction>"u"?Object:p.UserContextMenuCommandInteraction])],h.prototype,"userInteraction",null)});var y,ce,Rt=m(()=>{"use strict";W();A();y=class extends g{};c(y,"TextCommandComponent");ce=w(y)});var L,ae,kt=m(()=>{"use strict";D();D();L=class extends R{};c(L,"TextCommandRestOption");ae=Z(L)});var G,st,_,S,zt=m(()=>{"use strict";Q();G=require("discord.js");vt();Rt();kt();D();st=function(n,t,e,o){var r=arguments.length,s=r<3?t:o===null?o=Object.getOwnPropertyDescriptor(t,e):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(n,t,e,o);else for(var a=n.length-1;a>=0;a--)(i=n[a])&&(s=(r<3?i(s):r>3?i(t,e,s):i(t,e))||s);return r>3&&s&&Object.defineProperty(t,e,s),s},_=function(n,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,t)},S=class extends I{constructor(t){super(),this.config=t}async processPrefix(t){let e=t.content,o=this.config.prefix;if(typeof o=="function"&&(o=await o(t)),typeof o=="string")return e.startsWith(o)?o.length:null;if(o instanceof Array){let r=o.find(s=>e.startsWith(s));return r?r.length:null}return null}async messageCreate(t){let e=await this.processPrefix(t);if(!e)return;let o=t.content.slice(e),r=[],s=new Map;for(let v of this.commandClient.registry.extensions)for(let O of this.commandClient.registry.getComponentsWithType(v,y))r.push(O),s.set(O,v);let i=0,a=r.find(v=>{let O=[v.options.name];v.options.aliases&&O.push(...v.options.aliases);for(let T of O)if(o.startsWith(T))return o.length===T.length?(i=T.length,!0):(i=T.length,o.startsWith(T+" "));return!1});if(!a)return;let l=s.get(a);if(!l)return;let u=[],f=o.slice(i+1).split(/ /g);await this.convertArguments(y,u,a.argTypes,async(v,O,T)=>{if(T.options.parameterless)return[t];if(v.decorators.find(mt=>mt.constructor===L)){let mt=f.join(" ");return f=[],[mt,t]}return[f.shift(),t]}),await a.execute(l,u,[t])}async mesage(t){return t}async str(t){return t}async num(t){return Number(t)}};c(S,"TextCommandExtension");st([K({event:"messageCreate",emitter:"discord"}),_("design:type",Function),_("design:paramtypes",[typeof G.Message>"u"?Object:G.Message])],S.prototype,"messageCreate",null);st([b({component:y,type:G.Message,parameterless:!0}),_("design:type",Function),_("design:paramtypes",[typeof G.Message>"u"?Object:G.Message])],S.prototype,"mesage",null);st([b({component:y,type:String}),_("design:type",Function),_("design:paramtypes",[String])],S.prototype,"str",null);st([b({component:y,type:Number}),_("design:type",Function),_("design:paramtypes",[String])],S.prototype,"num",null)});var Jt={};Tt(Jt,{CommandClient:()=>M});var it,ct,Ut,Zt,M,Mt=m(()=>{"use strict";it=x(require("chalk")),ct=require("discord.js"),Ut=x(require("events")),Zt=require("tslog");Bt();zt();E();wt();M=class extends Ut.default{constructor(t,e=new Zt.Logger({dateTimeTimezone:Intl.DateTimeFormat().resolvedOptions().timeZone})){super(),this.discord=t,this.logger=e,this.owners=new Set,this.ctsLogger=e.getChildLogger({prefix:[it.default.blue("[command.ts]")],displayFilePath:"hidden",displayFunctionName:!1}),this.registry=new P(this.ctsLogger,this),this.registry.registerEventEmitter("cts",this),this.registry.registerEventEmitter("discord",this.discord)}async fetchOwners(){if(!this.discord.application)throw new Error("The client is not logged in.");this.ctsLogger.info("Fetching owners..."),await this.discord.application.fetch();let t=this.discord.application.owner;if(!t)throw new Error("Cannot find application owner");let e=[];if(t instanceof ct.User)this.owners.add(t.id),e.push(t.tag);else if(t instanceof ct.Team)for(let[o,r]of t.members)this.owners.add(o),e.push(r.user.tag);this.ctsLogger.info(`Fetched ${it.default.green(e.length)} owners(${e.map(o=>it.default.blue(o)).join(", ")})`)}async enableApplicationCommandsExtension(t){await this.registry.registerModule(new h(t)),this.ctsLogger.info("Application command extension enabled.")}async enableTextCommandsExtension(t){await this.registry.registerModule(new S(t)),this.ctsLogger.info("Text command extension enabled.")}getApplicationCommandsExtension(){return this.registry.extensions.find(t=>t.constructor===h)}static getFromModule(t){return Reflect.getMetadata(X,t)}};c(M,"CommandClient")});var Ft,g,A=m(()=>{"use strict";Ft=require("discord.js");ht();g=class{hooks=new Ft.Collection;argTypes=new Ft.Collection;constructor(t,e,o){this.options=this.convertOptions(t),this.method=e;for(let r=0;r<o.length;r++){let s=o[r];this.argTypes.set(r,new $(s))}}convertOptions(t){return t}async executeHook(t,e,o){let r=this.hooks.get(e);if(!r)return;let{CommandClient:s}=await Promise.resolve().then(()=>(Mt(),Jt));for(let i of r)await i.call(null,s.getFromModule(t),...o)}async execute(t,e,o=e){await this.executeHook(t,"beforeCall",o);let r;try{r=await this.method.call(t,...e)}catch(s){throw await this.executeHook(t,"invokeError",[s]),s}return await this.executeHook(t,"afterCall",[r]),r}};c(g,"BaseComponent")});var So,bt=m(()=>{"use strict";So=require("reflect-metadata");W();ht();Lt();A()});var q,_t=m(()=>{"use strict";q=class{};c(q,"OwnerOnlyError")});var at,Kt,me,Qt=m(()=>{"use strict";at=require("discord.js");J();_t();Kt=c(n=>tt("beforeCall",n),"createCheckDecorator"),me=Kt(async(n,t)=>{let e=!1;if(t instanceof at.BaseInteraction?e=n.owners.has(t.user.id):t instanceof at.Message&&(e=n.owners.has(t.author.id)),!e)throw new q})});var Vt=m(()=>{"use strict";Qt();_t()});var Xt=m(()=>{"use strict";St()});var D=m(()=>{"use strict";bt();J();nt();Vt();Q();rt();Xt()});var pe={};Tt(pe,{ApplicationCommandComponent:()=>d,BaseComponent:()=>g,CommandClient:()=>M,ComponentArgument:()=>$,ComponentArgumentDecorator:()=>R,ConverterComponent:()=>j,Extension:()=>N,ListenerComponent:()=>k,OwnerOnlyError:()=>q,Registry:()=>P,TextCommandComponent:()=>y,TextCommandRestOption:()=>L,applicationCommand:()=>ie,argConverter:()=>b,command:()=>ce,createArgumentDecorator:()=>Z,createCheckDecorator:()=>Kt,createComponentDecorator:()=>w,createComponentHook:()=>tt,getComponent:()=>se,getComponentArgumentStore:()=>gt,getComponentStore:()=>U,getModuleHookStore:()=>et,listener:()=>K,moduleHook:()=>Ct,option:()=>Ot,ownerOnly:()=>me,rest:()=>ae});module.exports=ne(pe);D();yt();xt();Rt();kt();0&&(module.exports={ApplicationCommandComponent,BaseComponent,CommandClient,ComponentArgument,ComponentArgumentDecorator,ConverterComponent,Extension,ListenerComponent,OwnerOnlyError,Registry,TextCommandComponent,TextCommandRestOption,applicationCommand,argConverter,command,createArgumentDecorator,createCheckDecorator,createComponentDecorator,createComponentHook,getComponent,getComponentArgumentStore,getComponentStore,getModuleHookStore,listener,moduleHook,option,ownerOnly,rest});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/symbols.ts","../src/core/hooks/componentHook.ts","../src/core/components/decoratorCreator.ts","../src/core/components/ComponentArgument.ts","../src/core/components/ComponentArgumentDecorator.ts","../src/applicationCommand/ApplicationCommand.ts","../src/applicationCommand/ApplicationCommandOption.ts","../src/core/hooks/moduleHook.ts","../src/core/hooks/index.ts","../src/core/listener/index.ts","../src/core/structures/Registry.ts","../src/core/structures/index.ts","../src/core/converter/index.ts","../src/core/extensions/Extension.ts","../src/core/extensions/CTSExtension.ts","../src/applicationCommand/ApplicationCommandExtension.ts","../src/textCommand/TextCommand.ts","../src/textCommand/parameters.ts","../src/textCommand/TextCommandExtension.ts","../src/core/structures/CommandClient.ts","../src/core/components/BaseComponent.ts","../src/core/components/index.ts","../src/core/utils/errors.ts","../src/core/utils/checks.ts","../src/core/utils/index.ts","../src/core/extensions/index.ts","../src/core/index.ts","../src/index.ts"],"sourcesContent":["/*\r\n * File: symbols.ts\r\n *\r\n * Copyright (c) 2022-2022 pikokr\r\n *\r\n * Licensed under MIT License. Please see more defails in LICENSE file.\r\n */\r\n\r\nexport const ComponentStoreSymbol = Symbol()\r\nexport const ComponentArgStoreSymbol = Symbol()\r\nexport const ModuleHookStoreSymbol = Symbol()\r\nexport const CommandClientSymbol = Symbol()\r\nexport const ComponentHookSymbol = Symbol()\r\nexport const FilePathSymbol = Symbol()\r\n","/*\r\n* File: componentHook.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ComponentHookSymbol } from '../symbols'\n\nexport type ComponentHookFn = (...args: any[]) => void | Promise<void>\n\nexport type ComponentHookStore = Collection<string, ComponentHookFn[]>\n\nexport const getComponentHookStore = (target: object, property: string | symbol): ComponentHookStore => {\n let data = Reflect.getMetadata(ComponentHookSymbol, target, property) as ComponentHookStore\n\n if (!data) {\n data = new Collection()\n Reflect.defineMetadata(ComponentHookSymbol, data, target, property)\n }\n\n return data\n}\n\nexport const createComponentHook = (name: string, fn: ComponentHookFn): MethodDecorator => {\n return (target, key) => {\n const store = getComponentHookStore(target, key)\n\n let hooks = store.get(name)\n\n if (!hooks) {\n hooks = []\n store.set(name, hooks)\n }\n\n hooks.push(fn)\n }\n}\n","/*\r\n* File: decoratorCreator.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ComponentHookStore } from '../hooks'\nimport { getComponentHookStore } from '../hooks/componentHook'\nimport { ComponentStoreSymbol } from '../symbols'\nimport { BaseComponent } from './BaseComponent'\nimport { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\ntype ComponentStore = Collection<string | symbol, BaseComponent>\ntype ComponentArgumentStore = Collection<number, ComponentArgumentDecorator>\n\nexport const getComponentStore = (target: object): ComponentStore => {\n let result: ComponentStore | null = Reflect.getMetadata(ComponentStoreSymbol, target)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ComponentStoreSymbol, result, target)\n }\n\n return result\n}\n\nexport const getComponent = (target: object, key: string | symbol) => {\n const store = getComponentStore(target)\n\n return store.get(key)\n}\n\nexport const createComponentDecorator = <Options, OptionArgs>(type: typeof BaseComponent<Options, OptionArgs>) => {\n return (options: OptionArgs): MethodDecorator => {\n return (target, key) => {\n var component: BaseComponent<Options, OptionArgs> = new type(options, Reflect.get(target, key), Reflect.getMetadata('design:paramtypes', target, key))\n\n const componentHookStore: ComponentHookStore = getComponentHookStore(target, key)\n\n component.hooks = componentHookStore\n\n const store = getComponentStore(target)\n\n const decorators = getComponentArgumentStore(target, key)\n\n decorators.forEach((x, i) => {\n component.argTypes.get(i)?.decorators.push(x)\n })\n\n store.set(key, component)\n }\n }\n}\n\nexport const getComponentArgumentStore = (target: object, key: string | symbol): ComponentArgumentStore => {\n let result: ComponentArgumentStore | null = Reflect.getMetadata(ComponentStoreSymbol, target, key)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ComponentStoreSymbol, result, target, key)\n }\n\n return result\n}\n\nexport const createArgumentDecorator = <Options>(type: typeof ComponentArgumentDecorator<Options>) => {\n return (options: Options): ParameterDecorator => {\n return (target, key, idx) => {\n var arg: ComponentArgumentDecorator<Options> = new type(options)\n\n const store = getComponentArgumentStore(target, key)\n\n store.set(idx, arg)\n }\n }\n}\n","/*\r\n* File: ComponentArgument.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport class ComponentArgument {\n decorators: ComponentArgumentDecorator[] = []\n\n constructor(public type: unknown) {}\n}\n","/*\r\n* File: ComponentArgumentDecorator.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport _ from 'lodash'\n\nexport class ComponentArgumentDecorator<Options = unknown> {\n options: Options\n\n constructor(options: Partial<Options>) {\n if (typeof options === 'object') {\n this.options = _.merge(this.defaultOptions(), options)\n } else {\n this.options = options\n }\n }\n\n defaultOptions(): Options {\n return {} as unknown as Options\n }\n}\n","/*\n * File: ApplicationCommand.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport type { ApplicationCommandType, ChatInputApplicationCommandData, MessageApplicationCommandData, Snowflake, UserApplicationCommandData } from 'discord.js'\nimport { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\n\nexport class ApplicationCommandComponent extends BaseComponent<\n (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & { type: ApplicationCommandType; guilds?: Snowflake[] }\n> {}\n\nexport const applicationCommand = createComponentDecorator(ApplicationCommandComponent)\n","/*\r\n* File: ApplicationCommandOption.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { APIApplicationCommandOption } from 'discord.js'\nimport { createArgumentDecorator, ComponentArgumentDecorator } from '../core'\n\ntype Options = APIApplicationCommandOption\n\nexport class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}\n\nexport const option = createArgumentDecorator(ApplicationCommandOption)\n","/*\r\n* File: moduleHook.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ModuleHookStoreSymbol } from '../symbols'\n\ntype ModuleHookStore = Collection<string, Function[]>\n\nexport const getModuleHookStore = (target: object) => {\n let result: ModuleHookStore | null = Reflect.getMetadata(ModuleHookStoreSymbol, target)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ModuleHookStoreSymbol, result, target)\n }\n\n return result\n}\n\nexport const moduleHook = (name: string): MethodDecorator => {\n return (target, key) => {\n const store = getModuleHookStore(target)\n\n let v = store.get(name)\n\n if (!v) {\n v = []\n store.set(name, v)\n }\n\n v.push(Reflect.get(target, key))\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './moduleHook'\r\nexport { createComponentHook } from './componentHook'\r\nexport type { ComponentHookStore } from './componentHook'\r\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\nexport class ListenerComponent extends BaseComponent<{ emitter: string; event: string }, { emitter?: string; event: string }> {\n defaultOptions() {\n return { emitter: 'discord' }\n }\n\n constructor(options: ListenerComponent['options'], method: Function, argTypes: unknown[]) {\n super(\n {\n event: options.event,\n emitter: options.emitter ?? 'discord',\n },\n method,\n argTypes,\n )\n }\n}\n\nexport const listener = createComponentDecorator(ListenerComponent)\n","/*\n * File: Registry.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport EventEmitter from 'events'\nimport _, { result } from 'lodash'\nimport { Logger } from 'tslog'\nimport { getComponentStore } from '../components'\nimport type { BaseComponent } from '../components'\nimport { getModuleHookStore } from '../hooks'\nimport { ListenerComponent } from '../listener'\nimport { CommandClientSymbol, FilePathSymbol } from '../symbols'\nimport { CommandClient } from './CommandClient'\nimport walkSync from 'walk-sync'\nimport path from 'path'\n\nexport class Registry {\n extensions: object[] = []\n\n emitters: Collection<string, EventEmitter> = new Collection()\n\n logger: Logger\n\n constructor(logger: Logger, public client: CommandClient) {\n this.logger = logger.getChildLogger({\n prefix: [chalk.green('[Registry]')],\n })\n }\n\n getComponentsWithTypeGlobal<T extends typeof BaseComponent<Config>, Config>(type: T): InstanceType<T>[] {\n const result: InstanceType<T>[] = []\n\n for (const ext of this.extensions) {\n result.push(...this.getComponentsWithType(ext, type))\n }\n\n return result\n }\n\n getComponentsWithType<T extends typeof BaseComponent<Config>, Config>(ext: object, type: T): InstanceType<T>[] {\n const componentStore = getComponentStore(ext)\n\n return Array.from(componentStore.filter((x) => (x.constructor as unknown) === type).values() as Iterable<InstanceType<T>>)\n }\n\n registerEventListeners(ext: object) {\n const listeners = this.getComponentsWithType(ext, ListenerComponent)\n\n for (const listener of listeners) {\n const emitter = this.emitters.get(listener.options.emitter)\n\n if (emitter) {\n const bound = listener.method.bind(ext)\n\n Reflect.defineMetadata('bound', bound, listener)\n\n emitter.addListener(listener.options.event, bound)\n }\n }\n }\n\n unregisterEventListeners(ext: object) {\n const listeners = this.getComponentsWithType(ext, ListenerComponent)\n\n for (const listener of listeners) {\n const emitter = this.emitters.get(listener.options.emitter)\n const bound = Reflect.getMetadata('bound', listener)\n\n if (emitter && bound) {\n emitter.removeListener(listener.options.event, bound)\n }\n }\n }\n\n async loadAllModulesInDirectory(dir: string): Promise<object[]> {\n const results: object[] = []\n\n const files = walkSync(dir).filter((x) => x.endsWith('.ts') || x.endsWith('.js'))\n\n for (const file of files) {\n try {\n const p = path.join(dir, file)\n const mod = require(p)\n\n if (typeof mod.setup !== 'function') continue\n\n const modules = await mod.setup()\n\n results.push(...(await this.registerModules(modules, p)))\n } catch (e) {\n this.logger.error(`Failed to load ${file}`)\n }\n }\n\n return results\n }\n\n private async registerModules(modules: object | object[], p: string) {\n const results: object[] = []\n if (modules instanceof Array) {\n for (const module of modules) {\n await this.registerModule(module)\n Reflect.defineMetadata(FilePathSymbol, p, module)\n results.push(module)\n }\n } else {\n await this.registerModule(modules)\n Reflect.defineMetadata(FilePathSymbol, p, modules)\n results.push(modules)\n }\n\n return results\n }\n\n async reloadModules() {\n const result: { file: string; result: boolean; error?: Error }[] = []\n const paths = new Set<string>()\n for (const module of this.extensions) {\n const file = Reflect.getMetadata(FilePathSymbol, module)\n if (!file) continue\n\n paths.add(file)\n\n await this.unregisterModule(module)\n delete require.cache[require.resolve(file)]\n }\n\n for (const path of paths) {\n try {\n const mod = require(path)\n\n if (typeof mod.setup !== 'function') continue\n\n const modules = await mod.setup(this.client)\n\n await this.registerModules(modules, path)\n\n result.push({\n file: path,\n result: true,\n })\n } catch (e) {\n result.push({\n file: path,\n result: false,\n error: e as Error,\n })\n }\n }\n\n return result\n }\n\n async registerModule(ext: object) {\n Reflect.defineMetadata(CommandClientSymbol, this.client, ext)\n\n this.registerEventListeners(ext)\n await this.runModuleHook(ext, 'load')\n this.extensions.push(ext)\n this.logger.info(`Module registered: ${chalk.green(ext.constructor.name)}`)\n }\n\n async unregisterModule(ext: object) {\n this.unregisterEventListeners(ext)\n await this.runModuleHook(ext, 'unload')\n _.remove(this.extensions, (x) => x === ext)\n this.logger.info(`Module unregistered: ${chalk.green(ext.constructor.name)}`)\n }\n\n runModuleHook(ext: object, hookName: string, ...args: unknown[]) {\n const hooks = getModuleHookStore(ext)\n\n const functions = hooks.get(hookName)\n\n if (functions) {\n for (const fn of functions) {\n fn.call(ext, ...args)\n }\n }\n }\n\n registerEventEmitter(name: string, emitter: EventEmitter) {\n this.emitters.set(name, emitter)\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './Registry'\nexport * from './CommandClient'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\ntype Options = { component: typeof BaseComponent<unknown>; type: Function; parameterless: boolean }\n\nexport class ConverterComponent extends BaseComponent<Options, Omit<Options, 'parameterless'> & { parameterless?: boolean }> {}\n\nexport const argConverter = createComponentDecorator(ConverterComponent)\n","/*\r\n* File: Extension.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport { Logger } from 'tslog'\nimport { BaseComponent } from '../components'\nimport { ComponentArgument } from '../components/ComponentArgument'\nimport { ConverterComponent } from '../converter'\nimport { CommandClient } from '../structures'\n\nexport class Extension {\n protected get commandClient() {\n return CommandClient.getFromModule(this)\n }\n\n protected get client() {\n return this.commandClient.discord\n }\n\n protected _logger?: Logger\n\n protected get logger() {\n if (!this._logger) this._logger = this.commandClient.logger.getChildLogger({ prefix: [chalk.green(`[${this.constructor.name}]`)], displayFunctionName: false })\n return this._logger\n }\n\n protected async convertArguments(\n component: typeof BaseComponent<unknown>,\n argList: unknown[],\n args: Collection<number, ComponentArgument>,\n getConverterArgs: (arg: ComponentArgument, index: number, converter: ConverterComponent) => unknown[] | Promise<unknown[]>,\n ) {\n const items = new Collection<unknown, { ext: object; component: ConverterComponent }>()\n\n for (const extension of this.commandClient.registry.extensions) {\n for (const converter of this.commandClient.registry.getComponentsWithType(extension, ConverterComponent)) {\n if (converter.options.component != component) continue\n\n items.set(converter.options.type, { component: converter, ext: extension })\n }\n }\n\n for (const [index, arg] of args) {\n const converter = items.get(arg.type)\n\n if (!converter) {\n argList[index] = undefined\n continue\n }\n\n const converterArgs = await getConverterArgs(arg, index, converter.component)\n\n argList[index] = await converter.component.execute(converter.ext, converterArgs)\n }\n }\n}\n","/*\r\n* File: CTSExtension.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Extension } from './Extension'\n\nexport class CTSExtension extends Extension {\n protected get logger() {\n if (!this._logger) this._logger = this.commandClient.ctsLogger.getChildLogger({ prefix: [chalk.green(`[${this.constructor.name}]`)], displayFunctionName: false })\n return this._logger\n }\n}\n","/*\n * File: ApplicationCommandExtension.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport chalk from 'chalk'\nimport {\n ApplicationCommandData,\n ApplicationCommandOptionType,\n ApplicationCommandType,\n ChatInputCommandInteraction,\n Collection,\n Interaction,\n InteractionType,\n MessageContextMenuCommandInteraction,\n Snowflake,\n UserContextMenuCommandInteraction,\n} from 'discord.js'\nimport { ApplicationCommandComponent } from './ApplicationCommand'\nimport { ApplicationCommandOption } from './ApplicationCommandOption'\nimport { moduleHook } from '../core/hooks'\nimport { listener } from '../core/listener'\nimport { CommandClient } from '../core/structures'\nimport { argConverter } from '../core/converter'\nimport { CTSExtension } from '../core/extensions/CTSExtension'\n\nexport type ApplicationCommandExtensionConfig = {\n guilds?: Snowflake[]\n}\n\nexport class ApplicationCommandExtension extends CTSExtension {\n constructor(public config: ApplicationCommandExtensionConfig) {\n super()\n }\n\n @listener({ event: 'interactionCreate' })\n async interactionCreate(i: Interaction) {\n if (i.type !== InteractionType.ApplicationCommand) return\n\n let cmd: ApplicationCommandComponent | null = null\n let ext: object | null = null\n\n const extensions = this.commandClient.registry.extensions\n\n for (const extension of extensions) {\n const components = this.commandClient.registry.getComponentsWithType(extension, ApplicationCommandComponent)\n\n for (const command of components) {\n if (command.options.name === i.commandName) {\n ext = extension\n cmd = command\n }\n }\n }\n\n if (cmd && ext) {\n const argList: unknown[] = []\n\n await this.convertArguments(ApplicationCommandComponent, argList, cmd.argTypes, () => [i])\n\n for (const [idx, arg] of cmd.argTypes) {\n let value: unknown = null\n\n for (const decorator of arg.decorators) {\n if (decorator instanceof ApplicationCommandOption) {\n if ([ApplicationCommandOptionType.Subcommand, ApplicationCommandOptionType.SubcommandGroup].includes(decorator.options.type) && i.isChatInputCommand()) {\n if (decorator.options.type === ApplicationCommandOptionType.Subcommand) {\n value = i.options.getSubcommand() === decorator.options.name\n break\n }\n if (decorator.options.type === ApplicationCommandOptionType.SubcommandGroup) {\n value = i.options.getSubcommandGroup() === decorator.options.name\n break\n }\n }\n\n value = i.options.get(decorator.options.name, false)?.value\n break\n }\n }\n\n if (value) {\n argList[idx] = value\n }\n }\n\n try {\n await cmd.execute(ext, argList, [i])\n } catch (e) {\n this.commandClient.emit('applicationCommandInvokeError', e, i)\n }\n }\n }\n\n @moduleHook('load')\n async load() {}\n\n async sync() {\n const client = CommandClient.getFromModule(this)\n\n this.logger.info('Trying to sync commands...')\n\n const commands: ApplicationCommandData[] = []\n\n const guildCommands = new Collection<Snowflake, ApplicationCommandData[]>()\n\n for (const command of client.registry.getComponentsWithTypeGlobal(ApplicationCommandComponent)) {\n const cmd: ApplicationCommandData = { ...command.options }\n\n if (cmd.type === ApplicationCommandType.ChatInput) {\n cmd.options = []\n\n for (const [, arg] of command.argTypes) {\n const option = arg.decorators.find((x) => x.constructor === ApplicationCommandOption) as ApplicationCommandOption\n\n if (option) {\n cmd.options.push(option.options)\n }\n }\n }\n\n if (command.options.guilds) {\n for (const guild of command.options.guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n commands.push(cmd)\n }\n continue\n }\n\n if (this.config.guilds) {\n for (const guild of this.config.guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n commands.push(cmd)\n }\n continue\n }\n commands.push(cmd)\n }\n\n if (guildCommands.size) {\n for (const [guild, commands] of guildCommands) {\n this.logger.info(`Processing ${chalk.green(commands.length)} commands(${commands.map((x) => chalk.blue(x.name)).join(', ')})`)\n try {\n const g = await this.client.guilds.fetch(guild)\n await g.fetch()\n this.logger.info(`Registering commands for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`)\n\n await g.commands.set(commands)\n\n this.logger.info(`Successfully registered commands for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`)\n } catch (e) {\n this.logger.error(`Failed to register commands to guild ${chalk.green(guild)}: ${(e as Error).message}`)\n }\n }\n }\n if (commands.length) {\n try {\n this.logger.info(`Registering commands globally...`)\n\n await this.client.application!.commands.set(commands)\n\n this.logger.info('Successfully registered commands.')\n } catch (e) {\n this.logger.error(`Failed to register commands to global: ${(e as Error).message}`)\n }\n }\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: ChatInputCommandInteraction,\n })\n async chatInteraction(i: ChatInputCommandInteraction) {\n return i\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: MessageContextMenuCommandInteraction,\n })\n async messageInteraction(i: MessageContextMenuCommandInteraction) {\n return i\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: UserContextMenuCommandInteraction,\n })\n async userInteraction(i: UserContextMenuCommandInteraction) {\n return i\n }\n}\n","/*\n * File: TextCommand.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\n\ntype TextCommandOptions = {\n name: string\n aliases?: string[]\n description?: string\n}\n\nexport class TextCommandComponent extends BaseComponent<TextCommandOptions> {}\n\nexport const command = createComponentDecorator(TextCommandComponent)\n","/*\r\n * File: parameters.ts\r\n *\r\n * Copyright (c) 2022-2022 pikokr\r\n *\r\n * Licensed under MIT License. Please see more defails in LICENSE file.\r\n */\r\n\r\nimport { ComponentArgumentDecorator } from '../core'\r\nimport { createArgumentDecorator } from '../core'\r\n\r\nexport class TextCommandRestOption extends ComponentArgumentDecorator<void> {}\r\n\r\nexport const rest = createArgumentDecorator(TextCommandRestOption)\r\n","/*\n * File: TextCommandExtension.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport { listener } from '../core/listener'\nimport { Message } from 'discord.js'\nimport { CTSExtension } from '../core/extensions/CTSExtension'\nimport { TextCommandComponent } from './TextCommand'\nimport { TextCommandRestOption } from './parameters'\nimport { argConverter } from '../core'\n\nexport type TextCommandConfig = {\n prefix: string | string[] | ((msg: Message) => Promise<string | string[]> | string | string[])\n}\n\nexport class TextCommandExtension extends CTSExtension {\n constructor(private config: TextCommandConfig) {\n super()\n }\n\n private async processPrefix(msg: Message): Promise<number | null> {\n const content = msg.content\n let prefix = this.config.prefix\n\n if (typeof prefix === 'function') {\n prefix = await prefix(msg)\n }\n\n if (typeof prefix === 'string') {\n if (content.startsWith(prefix)) return prefix.length\n return null\n }\n\n if (prefix instanceof Array) {\n const p = prefix.find((x) => content.startsWith(x))\n\n if (p) return p.length\n return null\n }\n\n return null\n }\n\n @listener({ event: 'messageCreate', emitter: 'discord' })\n private async messageCreate(msg: Message) {\n const startIndex = await this.processPrefix(msg)\n\n if (!startIndex) return\n\n const content = msg.content.slice(startIndex)\n\n const commands: TextCommandComponent[] = []\n\n const extensions = new Map<TextCommandComponent, object>()\n\n for (const ext of this.commandClient.registry.extensions) {\n for (const cmd of this.commandClient.registry.getComponentsWithType(ext, TextCommandComponent)) {\n commands.push(cmd)\n extensions.set(cmd, ext)\n }\n }\n\n let commandNameLength = 0\n\n const command = commands.find((x) => {\n const names = [x.options.name]\n\n if (x.options.aliases) {\n names.push(...x.options.aliases)\n }\n\n for (const name of names) {\n if (content.startsWith(name)) {\n if (content.length === name.length) {\n commandNameLength = name.length\n return true\n }\n commandNameLength = name.length\n return content.startsWith(name + ' ')\n }\n }\n\n return false\n })\n\n if (!command) return\n\n const ext = extensions.get(command)\n\n if (!ext) return\n\n const args: unknown[] = []\n\n let argStrings = content.slice(commandNameLength + 1).split(/ /g)\n\n await this.convertArguments(TextCommandComponent, args, command.argTypes, async (arg, i, converter) => {\n if (converter.options.parameterless) return [msg]\n\n if (arg.decorators.find((x) => x.constructor === TextCommandRestOption)) {\n const text = argStrings.join(' ')\n argStrings = []\n return [text, msg]\n }\n return [argStrings.shift(), msg]\n })\n\n await command.execute(ext, args, [msg])\n }\n\n @argConverter({ component: TextCommandComponent, type: Message, parameterless: true })\n async mesage(msg: Message) {\n return msg\n }\n\n @argConverter({ component: TextCommandComponent, type: String })\n async str(value: string) {\n return value\n }\n\n @argConverter({ component: TextCommandComponent, type: Number })\n async num(value: string) {\n return Number(value)\n }\n}\n","/*\r\n* File: CommandClient.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Client, Snowflake, Team, User } from 'discord.js'\nimport EventEmitter from 'events'\nimport { Logger } from 'tslog'\nimport { ApplicationCommandExtension, ApplicationCommandExtensionConfig } from '../../applicationCommand/ApplicationCommandExtension'\nimport { TextCommandConfig } from '../../textCommand'\nimport { TextCommandExtension } from '../../textCommand/TextCommandExtension'\nimport { CommandClientSymbol } from '../symbols'\nimport { Registry } from './Registry'\nexport class CommandClient extends EventEmitter {\n ctsLogger: Logger\n registry: Registry\n\n owners: Set<Snowflake> = new Set()\n\n constructor(public discord: Client, public logger: Logger = new Logger({ dateTimeTimezone: Intl.DateTimeFormat().resolvedOptions().timeZone })) {\n super()\n\n this.ctsLogger = logger.getChildLogger({ prefix: [chalk.blue('[command.ts]')], displayFilePath: 'hidden', displayFunctionName: false })\n\n this.registry = new Registry(this.ctsLogger, this)\n\n this.registry.registerEventEmitter('cts', this)\n this.registry.registerEventEmitter('discord', this.discord)\n }\n\n async fetchOwners() {\n if (!this.discord.application) throw new Error('The client is not logged in.')\n\n this.ctsLogger.info('Fetching owners...')\n\n await this.discord.application.fetch()\n\n const owner = this.discord.application.owner\n\n if (!owner) throw new Error('Cannot find application owner')\n\n const owners: string[] = []\n\n if (owner instanceof User) {\n this.owners.add(owner.id)\n owners.push(owner.tag)\n } else if (owner instanceof Team) {\n for (const [id, member] of owner.members) {\n this.owners.add(id)\n owners.push(member.user.tag)\n }\n }\n\n this.ctsLogger.info(`Fetched ${chalk.green(owners.length)} owners(${owners.map((x) => chalk.blue(x)).join(', ')})`)\n }\n\n async enableApplicationCommandsExtension(config: ApplicationCommandExtensionConfig) {\n await this.registry.registerModule(new ApplicationCommandExtension(config))\n this.ctsLogger.info('Application command extension enabled.')\n }\n\n async enableTextCommandsExtension(config: TextCommandConfig) {\n await this.registry.registerModule(new TextCommandExtension(config))\n this.ctsLogger.info('Text command extension enabled.')\n }\n\n getApplicationCommandsExtension() {\n return this.registry.extensions.find((x) => x.constructor === ApplicationCommandExtension) as ApplicationCommandExtension | undefined\n }\n\n static getFromModule(ext: object): CommandClient {\n return Reflect.getMetadata(CommandClientSymbol, ext)\n }\n}\n","/*\r\n* File: BaseComponent.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport _ from 'lodash'\nimport type { ComponentHookStore } from '../hooks'\nimport { ComponentArgument } from './ComponentArgument'\n\nexport class BaseComponent<Options = unknown, OptionsArg = Options> {\n options: Options\n\n method: Function\n\n hooks: ComponentHookStore = new Collection()\n\n argTypes: Collection<number, ComponentArgument> = new Collection()\n\n constructor(options: OptionsArg, method: Function, argTypes: unknown[]) {\n this.options = this.convertOptions(options)\n\n this.method = method\n for (let i = 0; i < argTypes.length; i++) {\n const element = argTypes[i]\n this.argTypes.set(i, new ComponentArgument(element))\n }\n }\n\n convertOptions(options: OptionsArg): Options {\n return options as unknown as Options\n }\n\n async executeHook(target: object, name: string, args: unknown[]) {\n const hook = this.hooks.get(name)\n\n if (!hook) return\n\n const { CommandClient } = await import('../structures/CommandClient')\n\n for (const fn of hook) {\n await fn.call(null, CommandClient.getFromModule(target), ...args)\n }\n }\n\n async execute(target: object, args: unknown[], beforeCallArgs: unknown[] = args) {\n await this.executeHook(target, 'beforeCall', beforeCallArgs)\n let result\n try {\n result = await this.method.call(target, ...args)\n } catch (e) {\n await this.executeHook(target, 'invokeError', [e])\n throw e\n }\n await this.executeHook(target, 'afterCall', [result])\n\n return result\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport 'reflect-metadata'\r\nexport * from './decoratorCreator'\r\nexport * from './ComponentArgument'\r\nexport * from './ComponentArgumentDecorator'\r\nexport * from './BaseComponent'\r\n","/*\r\n* File: errors.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport class OwnerOnlyError {}\n","/*\r\n* File: checks.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseInteraction, Interaction, Message } from 'discord.js'\nimport { createComponentHook } from '../hooks'\nimport { ComponentHookFn } from '../hooks/componentHook'\nimport { CommandClient } from '../structures'\nimport { OwnerOnlyError } from './errors'\n\nexport const createCheckDecorator = (fn: ComponentHookFn) => createComponentHook('beforeCall', fn)\n\nexport const ownerOnly = createCheckDecorator(async (client: CommandClient, i: Interaction | Message) => {\n let isOwner = false\n\n if (i instanceof BaseInteraction) {\n isOwner = client.owners.has(i.user.id)\n } else if (i instanceof Message) {\n isOwner = client.owners.has(i.author.id)\n }\n\n if (!isOwner) throw new OwnerOnlyError()\n})\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './checks'\nexport * from './errors'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './Extension'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './components'\nexport * from './hooks'\nexport * from './converter'\nexport * from './utils'\nexport * from './listener'\nexport * from './structures'\nexport * from './extensions'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './core'\r\nexport * from './applicationCommand'\r\nexport * from './textCommand'\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/core/symbols.ts","../src/core/hooks/componentHook.ts","../src/core/components/decoratorCreator.ts","../src/core/components/ComponentArgument.ts","../src/core/components/ComponentArgumentDecorator.ts","../src/applicationCommand/ApplicationCommand.ts","../src/applicationCommand/ApplicationCommandOption.ts","../src/core/hooks/moduleHook.ts","../src/core/hooks/index.ts","../src/core/listener/index.ts","../src/core/structures/Registry.ts","../src/core/structures/index.ts","../src/core/converter/index.ts","../src/core/extensions/Extension.ts","../src/core/extensions/CTSExtension.ts","../src/applicationCommand/ApplicationCommandExtension.ts","../src/textCommand/TextCommand.ts","../src/textCommand/parameters.ts","../src/textCommand/TextCommandExtension.ts","../src/core/structures/CommandClient.ts","../src/core/components/BaseComponent.ts","../src/core/components/index.ts","../src/core/utils/errors.ts","../src/core/utils/checks.ts","../src/core/utils/index.ts","../src/core/extensions/index.ts","../src/core/index.ts","../src/index.ts"],"sourcesContent":["/*\r\n * File: symbols.ts\r\n *\r\n * Copyright (c) 2022-2022 pikokr\r\n *\r\n * Licensed under MIT License. Please see more defails in LICENSE file.\r\n */\r\n\r\nexport const ComponentStoreSymbol = Symbol()\r\nexport const ComponentArgStoreSymbol = Symbol()\r\nexport const ModuleHookStoreSymbol = Symbol()\r\nexport const CommandClientSymbol = Symbol()\r\nexport const ComponentHookSymbol = Symbol()\r\nexport const FilePathSymbol = Symbol()\r\n","/*\r\n* File: componentHook.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ComponentHookSymbol } from '../symbols'\n\nexport type ComponentHookFn = (...args: any[]) => void | Promise<void>\n\nexport type ComponentHookStore = Collection<string, ComponentHookFn[]>\n\nexport const getComponentHookStore = (target: object, property: string | symbol): ComponentHookStore => {\n let data = Reflect.getMetadata(ComponentHookSymbol, target, property) as ComponentHookStore\n\n if (!data) {\n data = new Collection()\n Reflect.defineMetadata(ComponentHookSymbol, data, target, property)\n }\n\n return data\n}\n\nexport const createComponentHook = (name: string, fn: ComponentHookFn): MethodDecorator => {\n return (target, key) => {\n const store = getComponentHookStore(target, key)\n\n let hooks = store.get(name)\n\n if (!hooks) {\n hooks = []\n store.set(name, hooks)\n }\n\n hooks.push(fn)\n }\n}\n","/*\r\n* File: decoratorCreator.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ComponentHookStore } from '../hooks'\nimport { getComponentHookStore } from '../hooks/componentHook'\nimport { ComponentStoreSymbol } from '../symbols'\nimport { BaseComponent } from './BaseComponent'\nimport { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\ntype ComponentStore = Collection<string | symbol, BaseComponent>\ntype ComponentArgumentStore = Collection<number, ComponentArgumentDecorator>\n\nexport const getComponentStore = (target: object): ComponentStore => {\n let result: ComponentStore | null = Reflect.getMetadata(ComponentStoreSymbol, target)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ComponentStoreSymbol, result, target)\n }\n\n return result\n}\n\nexport const getComponent = (target: object, key: string | symbol) => {\n const store = getComponentStore(target)\n\n return store.get(key)\n}\n\nexport const createComponentDecorator = <Options, OptionArgs>(type: typeof BaseComponent<Options, OptionArgs>) => {\n return (options: OptionArgs): MethodDecorator => {\n return (target, key) => {\n var component: BaseComponent<Options, OptionArgs> = new type(options, Reflect.get(target, key), Reflect.getMetadata('design:paramtypes', target, key))\n\n const componentHookStore: ComponentHookStore = getComponentHookStore(target, key)\n\n component.hooks = componentHookStore\n\n const store = getComponentStore(target)\n\n const decorators = getComponentArgumentStore(target, key)\n\n decorators.forEach((x, i) => {\n component.argTypes.get(i)?.decorators.push(x)\n })\n\n store.set(key, component)\n }\n }\n}\n\nexport const getComponentArgumentStore = (target: object, key: string | symbol): ComponentArgumentStore => {\n let result: ComponentArgumentStore | null = Reflect.getMetadata(ComponentStoreSymbol, target, key)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ComponentStoreSymbol, result, target, key)\n }\n\n return result\n}\n\nexport const createArgumentDecorator = <Options>(type: typeof ComponentArgumentDecorator<Options>) => {\n return (options: Options): ParameterDecorator => {\n return (target, key, idx) => {\n var arg: ComponentArgumentDecorator<Options> = new type(options)\n\n const store = getComponentArgumentStore(target, key)\n\n store.set(idx, arg)\n }\n }\n}\n","/*\r\n* File: ComponentArgument.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport class ComponentArgument {\n decorators: ComponentArgumentDecorator[] = []\n\n constructor(public type: unknown) {}\n}\n","/*\r\n* File: ComponentArgumentDecorator.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport _ from 'lodash'\n\nexport class ComponentArgumentDecorator<Options = unknown> {\n options: Options\n\n constructor(options: Partial<Options>) {\n if (typeof options === 'object') {\n this.options = _.merge(this.defaultOptions(), options)\n } else {\n this.options = options\n }\n }\n\n defaultOptions(): Options {\n return {} as unknown as Options\n }\n}\n","/*\n * File: ApplicationCommand.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport type { ApplicationCommandType, ChatInputApplicationCommandData, MessageApplicationCommandData, Snowflake, UserApplicationCommandData } from 'discord.js'\nimport { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\n\nexport class ApplicationCommandComponent extends BaseComponent<\n (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & { type: ApplicationCommandType; guilds?: Snowflake[] }\n> {}\n\nexport const applicationCommand = createComponentDecorator(ApplicationCommandComponent)\n","/*\r\n* File: ApplicationCommandOption.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { APIApplicationCommandOption } from 'discord.js'\nimport { createArgumentDecorator, ComponentArgumentDecorator } from '../core'\n\ntype Options = APIApplicationCommandOption\n\nexport class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}\n\nexport const option = createArgumentDecorator(ApplicationCommandOption)\n","/*\r\n* File: moduleHook.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ModuleHookStoreSymbol } from '../symbols'\n\ntype ModuleHookStore = Collection<string, Function[]>\n\nexport const getModuleHookStore = (target: object) => {\n let result: ModuleHookStore | null = Reflect.getMetadata(ModuleHookStoreSymbol, target)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ModuleHookStoreSymbol, result, target)\n }\n\n return result\n}\n\nexport const moduleHook = (name: string): MethodDecorator => {\n return (target, key) => {\n const store = getModuleHookStore(target)\n\n let v = store.get(name)\n\n if (!v) {\n v = []\n store.set(name, v)\n }\n\n v.push(Reflect.get(target, key))\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './moduleHook'\r\nexport { createComponentHook } from './componentHook'\r\nexport type { ComponentHookStore } from './componentHook'\r\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\nexport class ListenerComponent extends BaseComponent<{ emitter: string; event: string }, { emitter?: string; event: string }> {\n defaultOptions() {\n return { emitter: 'discord' }\n }\n\n constructor(options: ListenerComponent['options'], method: Function, argTypes: unknown[]) {\n super(\n {\n event: options.event,\n emitter: options.emitter ?? 'discord',\n },\n method,\n argTypes,\n )\n }\n}\n\nexport const listener = createComponentDecorator(ListenerComponent)\n","/*\n * File: Registry.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport EventEmitter from 'events'\nimport _, { result } from 'lodash'\nimport { Logger } from 'tslog'\nimport { getComponentStore } from '../components'\nimport type { BaseComponent } from '../components'\nimport { getModuleHookStore } from '../hooks'\nimport { ListenerComponent } from '../listener'\nimport { CommandClientSymbol, FilePathSymbol } from '../symbols'\nimport { CommandClient } from './CommandClient'\nimport walkSync from 'walk-sync'\nimport path from 'path'\n\nexport class Registry {\n extensions: object[] = []\n\n emitters: Collection<string, EventEmitter> = new Collection()\n\n logger: Logger\n\n constructor(logger: Logger, public client: CommandClient) {\n this.logger = logger.getChildLogger({\n prefix: [chalk.green('[Registry]')],\n })\n }\n\n getComponentsWithTypeGlobal<T extends typeof BaseComponent<Config>, Config>(type: T): InstanceType<T>[] {\n const result: InstanceType<T>[] = []\n\n for (const ext of this.extensions) {\n result.push(...this.getComponentsWithType(ext, type))\n }\n\n return result\n }\n\n getComponentsWithType<T extends typeof BaseComponent<Config>, Config>(ext: object, type: T): InstanceType<T>[] {\n const componentStore = getComponentStore(ext)\n\n return Array.from(componentStore.filter((x) => (x.constructor as unknown) === type).values() as Iterable<InstanceType<T>>)\n }\n\n registerEventListeners(ext: object) {\n const listeners = this.getComponentsWithType(ext, ListenerComponent)\n\n for (const listener of listeners) {\n const emitter = this.emitters.get(listener.options.emitter)\n\n if (emitter) {\n const bound = listener.method.bind(ext)\n\n Reflect.defineMetadata('bound', bound, listener)\n\n emitter.addListener(listener.options.event, bound)\n }\n }\n }\n\n unregisterEventListeners(ext: object) {\n const listeners = this.getComponentsWithType(ext, ListenerComponent)\n\n for (const listener of listeners) {\n const emitter = this.emitters.get(listener.options.emitter)\n const bound = Reflect.getMetadata('bound', listener)\n\n if (emitter && bound) {\n emitter.removeListener(listener.options.event, bound)\n }\n }\n }\n\n async loadAllModulesInDirectory(dir: string): Promise<object[]> {\n const results: object[] = []\n\n const files = walkSync(dir).filter((x) => x.endsWith('.ts') || x.endsWith('.js'))\n\n for (const file of files) {\n if (file.endsWith('.d.ts')) continue\n try {\n const p = path.join(dir, file)\n const mod = require(p)\n\n if (typeof mod.setup !== 'function') continue\n\n const modules = await mod.setup()\n\n results.push(...(await this.registerModules(modules, p)))\n } catch (e) {\n this.logger.error(`Failed to load ${file}`)\n }\n }\n\n return results\n }\n\n private async registerModules(modules: object | object[], p: string) {\n const results: object[] = []\n if (modules instanceof Array) {\n for (const module of modules) {\n await this.registerModule(module)\n Reflect.defineMetadata(FilePathSymbol, p, module)\n results.push(module)\n }\n } else {\n await this.registerModule(modules)\n Reflect.defineMetadata(FilePathSymbol, p, modules)\n results.push(modules)\n }\n\n return results\n }\n\n async reloadModules() {\n const result: { file: string; result: boolean; error?: Error }[] = []\n const paths = new Set<string>()\n for (const module of this.extensions) {\n const file = Reflect.getMetadata(FilePathSymbol, module)\n if (!file) continue\n\n paths.add(file)\n\n await this.unregisterModule(module)\n delete require.cache[require.resolve(file)]\n }\n\n for (const path of paths) {\n try {\n const mod = require(path)\n\n if (typeof mod.setup !== 'function') continue\n\n const modules = await mod.setup(this.client)\n\n await this.registerModules(modules, path)\n\n result.push({\n file: path,\n result: true,\n })\n } catch (e) {\n result.push({\n file: path,\n result: false,\n error: e as Error,\n })\n }\n }\n\n return result\n }\n\n async registerModule(ext: object) {\n Reflect.defineMetadata(CommandClientSymbol, this.client, ext)\n\n this.registerEventListeners(ext)\n await this.runModuleHook(ext, 'load')\n this.extensions.push(ext)\n this.logger.info(`Module registered: ${chalk.green(ext.constructor.name)}`)\n }\n\n async unregisterModule(ext: object) {\n this.unregisterEventListeners(ext)\n await this.runModuleHook(ext, 'unload')\n _.remove(this.extensions, (x) => x === ext)\n this.logger.info(`Module unregistered: ${chalk.green(ext.constructor.name)}`)\n }\n\n runModuleHook(ext: object, hookName: string, ...args: unknown[]) {\n const hooks = getModuleHookStore(ext)\n\n const functions = hooks.get(hookName)\n\n if (functions) {\n for (const fn of functions) {\n fn.call(ext, ...args)\n }\n }\n }\n\n registerEventEmitter(name: string, emitter: EventEmitter) {\n this.emitters.set(name, emitter)\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './Registry'\nexport * from './CommandClient'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\ntype Options = { component: typeof BaseComponent<unknown>; type: Function; parameterless: boolean }\n\nexport class ConverterComponent extends BaseComponent<Options, Omit<Options, 'parameterless'> & { parameterless?: boolean }> {}\n\nexport const argConverter = createComponentDecorator(ConverterComponent)\n","/*\r\n* File: Extension.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport { Logger } from 'tslog'\nimport { BaseComponent } from '../components'\nimport { ComponentArgument } from '../components/ComponentArgument'\nimport { ConverterComponent } from '../converter'\nimport { CommandClient } from '../structures'\n\nexport class Extension {\n protected get commandClient() {\n return CommandClient.getFromModule(this)\n }\n\n protected get client() {\n return this.commandClient.discord\n }\n\n protected _logger?: Logger\n\n protected get logger() {\n if (!this._logger) this._logger = this.commandClient.logger.getChildLogger({ prefix: [chalk.green(`[${this.constructor.name}]`)], displayFunctionName: false })\n return this._logger\n }\n\n protected async convertArguments(\n component: typeof BaseComponent<unknown>,\n argList: unknown[],\n args: Collection<number, ComponentArgument>,\n getConverterArgs: (arg: ComponentArgument, index: number, converter: ConverterComponent) => unknown[] | Promise<unknown[]>,\n ) {\n const items = new Collection<unknown, { ext: object; component: ConverterComponent }>()\n\n for (const extension of this.commandClient.registry.extensions) {\n for (const converter of this.commandClient.registry.getComponentsWithType(extension, ConverterComponent)) {\n if (converter.options.component != component) continue\n\n items.set(converter.options.type, { component: converter, ext: extension })\n }\n }\n\n for (const [index, arg] of args) {\n const converter = items.get(arg.type)\n\n if (!converter) {\n argList[index] = undefined\n continue\n }\n\n const converterArgs = await getConverterArgs(arg, index, converter.component)\n\n argList[index] = await converter.component.execute(converter.ext, converterArgs)\n }\n }\n}\n","/*\r\n* File: CTSExtension.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Extension } from './Extension'\n\nexport class CTSExtension extends Extension {\n protected get logger() {\n if (!this._logger) this._logger = this.commandClient.ctsLogger.getChildLogger({ prefix: [chalk.green(`[${this.constructor.name}]`)], displayFunctionName: false })\n return this._logger\n }\n}\n","/*\n * File: ApplicationCommandExtension.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport chalk from 'chalk'\nimport {\n ApplicationCommandData,\n ApplicationCommandOptionType,\n ApplicationCommandType,\n ChatInputCommandInteraction,\n Collection,\n Interaction,\n InteractionType,\n MessageContextMenuCommandInteraction,\n Snowflake,\n UserContextMenuCommandInteraction,\n} from 'discord.js'\nimport { ApplicationCommandComponent } from './ApplicationCommand'\nimport { ApplicationCommandOption } from './ApplicationCommandOption'\nimport { moduleHook } from '../core/hooks'\nimport { listener } from '../core/listener'\nimport { CommandClient } from '../core/structures'\nimport { argConverter } from '../core/converter'\nimport { CTSExtension } from '../core/extensions/CTSExtension'\n\nexport type ApplicationCommandExtensionConfig = {\n guilds?: Snowflake[]\n}\n\nexport class ApplicationCommandExtension extends CTSExtension {\n constructor(public config: ApplicationCommandExtensionConfig) {\n super()\n }\n\n @listener({ event: 'interactionCreate' })\n async interactionCreate(i: Interaction) {\n if (i.type !== InteractionType.ApplicationCommand) return\n\n let cmd: ApplicationCommandComponent | null = null\n let ext: object | null = null\n\n const extensions = this.commandClient.registry.extensions\n\n for (const extension of extensions) {\n const components = this.commandClient.registry.getComponentsWithType(extension, ApplicationCommandComponent)\n\n for (const command of components) {\n if (command.options.name === i.commandName) {\n ext = extension\n cmd = command\n }\n }\n }\n\n if (cmd && ext) {\n const argList: unknown[] = []\n\n await this.convertArguments(ApplicationCommandComponent, argList, cmd.argTypes, () => [i])\n\n for (const [idx, arg] of cmd.argTypes) {\n let value: unknown = null\n\n for (const decorator of arg.decorators) {\n if (decorator instanceof ApplicationCommandOption) {\n if ([ApplicationCommandOptionType.Subcommand, ApplicationCommandOptionType.SubcommandGroup].includes(decorator.options.type) && i.isChatInputCommand()) {\n if (decorator.options.type === ApplicationCommandOptionType.Subcommand) {\n value = i.options.getSubcommand() === decorator.options.name\n break\n }\n if (decorator.options.type === ApplicationCommandOptionType.SubcommandGroup) {\n value = i.options.getSubcommandGroup() === decorator.options.name\n break\n }\n }\n\n value = i.options.get(decorator.options.name, false)?.value\n break\n }\n }\n\n if (value) {\n argList[idx] = value\n }\n }\n\n try {\n await cmd.execute(ext, argList, [i])\n } catch (e) {\n this.commandClient.emit('applicationCommandInvokeError', e, i)\n }\n }\n }\n\n @moduleHook('load')\n async load() {}\n\n async sync() {\n const client = CommandClient.getFromModule(this)\n\n this.logger.info('Trying to sync commands...')\n\n const commands: ApplicationCommandData[] = []\n\n const guildCommands = new Collection<Snowflake, ApplicationCommandData[]>()\n\n for (const command of client.registry.getComponentsWithTypeGlobal(ApplicationCommandComponent)) {\n const cmd: ApplicationCommandData = { ...command.options }\n\n if (cmd.type === ApplicationCommandType.ChatInput) {\n cmd.options = []\n\n for (const [, arg] of command.argTypes) {\n const option = arg.decorators.find((x) => x.constructor === ApplicationCommandOption) as ApplicationCommandOption\n\n if (option) {\n cmd.options.push(option.options)\n }\n }\n }\n\n if (command.options.guilds) {\n for (const guild of command.options.guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n commands.push(cmd)\n }\n continue\n }\n\n if (this.config.guilds) {\n for (const guild of this.config.guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n commands.push(cmd)\n }\n continue\n }\n commands.push(cmd)\n }\n\n if (guildCommands.size) {\n for (const [guild, commands] of guildCommands) {\n this.logger.info(`Processing ${chalk.green(commands.length)} commands(${commands.map((x) => chalk.blue(x.name)).join(', ')})`)\n try {\n const g = await this.client.guilds.fetch(guild)\n await g.fetch()\n this.logger.info(`Registering commands for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`)\n\n await g.commands.set(commands)\n\n this.logger.info(`Successfully registered commands for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`)\n } catch (e) {\n this.logger.error(`Failed to register commands to guild ${chalk.green(guild)}: ${(e as Error).message}`)\n }\n }\n }\n if (commands.length) {\n try {\n this.logger.info(`Registering commands globally...`)\n\n await this.client.application!.commands.set(commands)\n\n this.logger.info('Successfully registered commands.')\n } catch (e) {\n this.logger.error(`Failed to register commands to global: ${(e as Error).message}`)\n }\n }\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: ChatInputCommandInteraction,\n })\n async chatInteraction(i: ChatInputCommandInteraction) {\n return i\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: MessageContextMenuCommandInteraction,\n })\n async messageInteraction(i: MessageContextMenuCommandInteraction) {\n return i\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: UserContextMenuCommandInteraction,\n })\n async userInteraction(i: UserContextMenuCommandInteraction) {\n return i\n }\n}\n","/*\n * File: TextCommand.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\n\ntype TextCommandOptions = {\n name: string\n aliases?: string[]\n description?: string\n}\n\nexport class TextCommandComponent extends BaseComponent<TextCommandOptions> {}\n\nexport const command = createComponentDecorator(TextCommandComponent)\n","/*\r\n * File: parameters.ts\r\n *\r\n * Copyright (c) 2022-2022 pikokr\r\n *\r\n * Licensed under MIT License. Please see more defails in LICENSE file.\r\n */\r\n\r\nimport { ComponentArgumentDecorator } from '../core'\r\nimport { createArgumentDecorator } from '../core'\r\n\r\nexport class TextCommandRestOption extends ComponentArgumentDecorator<void> {}\r\n\r\nexport const rest = createArgumentDecorator(TextCommandRestOption)\r\n","/*\n * File: TextCommandExtension.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nimport { listener } from '../core/listener'\nimport { Message } from 'discord.js'\nimport { CTSExtension } from '../core/extensions/CTSExtension'\nimport { TextCommandComponent } from './TextCommand'\nimport { TextCommandRestOption } from './parameters'\nimport { argConverter } from '../core'\n\nexport type TextCommandConfig = {\n prefix: string | string[] | ((msg: Message) => Promise<string | string[]> | string | string[])\n}\n\nexport class TextCommandExtension extends CTSExtension {\n constructor(private config: TextCommandConfig) {\n super()\n }\n\n private async processPrefix(msg: Message): Promise<number | null> {\n const content = msg.content\n let prefix = this.config.prefix\n\n if (typeof prefix === 'function') {\n prefix = await prefix(msg)\n }\n\n if (typeof prefix === 'string') {\n if (content.startsWith(prefix)) return prefix.length\n return null\n }\n\n if (prefix instanceof Array) {\n const p = prefix.find((x) => content.startsWith(x))\n\n if (p) return p.length\n return null\n }\n\n return null\n }\n\n @listener({ event: 'messageCreate', emitter: 'discord' })\n private async messageCreate(msg: Message) {\n const startIndex = await this.processPrefix(msg)\n\n if (!startIndex) return\n\n const content = msg.content.slice(startIndex)\n\n const commands: TextCommandComponent[] = []\n\n const extensions = new Map<TextCommandComponent, object>()\n\n for (const ext of this.commandClient.registry.extensions) {\n for (const cmd of this.commandClient.registry.getComponentsWithType(ext, TextCommandComponent)) {\n commands.push(cmd)\n extensions.set(cmd, ext)\n }\n }\n\n let commandNameLength = 0\n\n const command = commands.find((x) => {\n const names = [x.options.name]\n\n if (x.options.aliases) {\n names.push(...x.options.aliases)\n }\n\n for (const name of names) {\n if (content.startsWith(name)) {\n if (content.length === name.length) {\n commandNameLength = name.length\n return true\n }\n commandNameLength = name.length\n return content.startsWith(name + ' ')\n }\n }\n\n return false\n })\n\n if (!command) return\n\n const ext = extensions.get(command)\n\n if (!ext) return\n\n const args: unknown[] = []\n\n let argStrings = content.slice(commandNameLength + 1).split(/ /g)\n\n await this.convertArguments(TextCommandComponent, args, command.argTypes, async (arg, i, converter) => {\n if (converter.options.parameterless) return [msg]\n\n if (arg.decorators.find((x) => x.constructor === TextCommandRestOption)) {\n const text = argStrings.join(' ')\n argStrings = []\n return [text, msg]\n }\n return [argStrings.shift(), msg]\n })\n\n await command.execute(ext, args, [msg])\n }\n\n @argConverter({ component: TextCommandComponent, type: Message, parameterless: true })\n async mesage(msg: Message) {\n return msg\n }\n\n @argConverter({ component: TextCommandComponent, type: String })\n async str(value: string) {\n return value\n }\n\n @argConverter({ component: TextCommandComponent, type: Number })\n async num(value: string) {\n return Number(value)\n }\n}\n","/*\r\n* File: CommandClient.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Client, Snowflake, Team, User } from 'discord.js'\nimport EventEmitter from 'events'\nimport { Logger } from 'tslog'\nimport { ApplicationCommandExtension, ApplicationCommandExtensionConfig } from '../../applicationCommand/ApplicationCommandExtension'\nimport { TextCommandConfig } from '../../textCommand'\nimport { TextCommandExtension } from '../../textCommand/TextCommandExtension'\nimport { CommandClientSymbol } from '../symbols'\nimport { Registry } from './Registry'\nexport class CommandClient extends EventEmitter {\n ctsLogger: Logger\n registry: Registry\n\n owners: Set<Snowflake> = new Set()\n\n constructor(public discord: Client, public logger: Logger = new Logger({ dateTimeTimezone: Intl.DateTimeFormat().resolvedOptions().timeZone })) {\n super()\n\n this.ctsLogger = logger.getChildLogger({ prefix: [chalk.blue('[command.ts]')], displayFilePath: 'hidden', displayFunctionName: false })\n\n this.registry = new Registry(this.ctsLogger, this)\n\n this.registry.registerEventEmitter('cts', this)\n this.registry.registerEventEmitter('discord', this.discord)\n }\n\n async fetchOwners() {\n if (!this.discord.application) throw new Error('The client is not logged in.')\n\n this.ctsLogger.info('Fetching owners...')\n\n await this.discord.application.fetch()\n\n const owner = this.discord.application.owner\n\n if (!owner) throw new Error('Cannot find application owner')\n\n const owners: string[] = []\n\n if (owner instanceof User) {\n this.owners.add(owner.id)\n owners.push(owner.tag)\n } else if (owner instanceof Team) {\n for (const [id, member] of owner.members) {\n this.owners.add(id)\n owners.push(member.user.tag)\n }\n }\n\n this.ctsLogger.info(`Fetched ${chalk.green(owners.length)} owners(${owners.map((x) => chalk.blue(x)).join(', ')})`)\n }\n\n async enableApplicationCommandsExtension(config: ApplicationCommandExtensionConfig) {\n await this.registry.registerModule(new ApplicationCommandExtension(config))\n this.ctsLogger.info('Application command extension enabled.')\n }\n\n async enableTextCommandsExtension(config: TextCommandConfig) {\n await this.registry.registerModule(new TextCommandExtension(config))\n this.ctsLogger.info('Text command extension enabled.')\n }\n\n getApplicationCommandsExtension() {\n return this.registry.extensions.find((x) => x.constructor === ApplicationCommandExtension) as ApplicationCommandExtension | undefined\n }\n\n static getFromModule(ext: object): CommandClient {\n return Reflect.getMetadata(CommandClientSymbol, ext)\n }\n}\n","/*\r\n* File: BaseComponent.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport _ from 'lodash'\nimport type { ComponentHookStore } from '../hooks'\nimport { ComponentArgument } from './ComponentArgument'\n\nexport class BaseComponent<Options = unknown, OptionsArg = Options> {\n options: Options\n\n method: Function\n\n hooks: ComponentHookStore = new Collection()\n\n argTypes: Collection<number, ComponentArgument> = new Collection()\n\n constructor(options: OptionsArg, method: Function, argTypes: unknown[]) {\n this.options = this.convertOptions(options)\n\n this.method = method\n for (let i = 0; i < argTypes.length; i++) {\n const element = argTypes[i]\n this.argTypes.set(i, new ComponentArgument(element))\n }\n }\n\n convertOptions(options: OptionsArg): Options {\n return options as unknown as Options\n }\n\n async executeHook(target: object, name: string, args: unknown[]) {\n const hook = this.hooks.get(name)\n\n if (!hook) return\n\n const { CommandClient } = await import('../structures/CommandClient')\n\n for (const fn of hook) {\n await fn.call(null, CommandClient.getFromModule(target), ...args)\n }\n }\n\n async execute(target: object, args: unknown[], beforeCallArgs: unknown[] = args) {\n await this.executeHook(target, 'beforeCall', beforeCallArgs)\n let result\n try {\n result = await this.method.call(target, ...args)\n } catch (e) {\n await this.executeHook(target, 'invokeError', [e])\n throw e\n }\n await this.executeHook(target, 'afterCall', [result])\n\n return result\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport 'reflect-metadata'\r\nexport * from './decoratorCreator'\r\nexport * from './ComponentArgument'\r\nexport * from './ComponentArgumentDecorator'\r\nexport * from './BaseComponent'\r\n","/*\r\n* File: errors.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport class OwnerOnlyError {}\n","/*\r\n* File: checks.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseInteraction, Interaction, Message } from 'discord.js'\nimport { createComponentHook } from '../hooks'\nimport { ComponentHookFn } from '../hooks/componentHook'\nimport { CommandClient } from '../structures'\nimport { OwnerOnlyError } from './errors'\n\nexport const createCheckDecorator = (fn: ComponentHookFn) => createComponentHook('beforeCall', fn)\n\nexport const ownerOnly = createCheckDecorator(async (client: CommandClient, i: Interaction | Message) => {\n let isOwner = false\n\n if (i instanceof BaseInteraction) {\n isOwner = client.owners.has(i.user.id)\n } else if (i instanceof Message) {\n isOwner = client.owners.has(i.author.id)\n }\n\n if (!isOwner) throw new OwnerOnlyError()\n})\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './checks'\nexport * from './errors'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './Extension'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './components'\nexport * from './hooks'\nexport * from './converter'\nexport * from './utils'\nexport * from './listener'\nexport * from './structures'\nexport * from './extensions'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './core'\r\nexport * from './applicationCommand'\r\nexport * from './textCommand'\r\n"],"mappings":"+pBAAA,mBAAA,6FCAA,OAuBS,GAWH,GAlCN,0BAoB0B,0BAGxB,AAAO,GAAI,GAAA,EAAA,IAAA,CACZ,GAAA,GAAA,QAAA,YAAA,GAAA,EAAA,CAAA,EAED,MAAO,IACL,GAAQ,GAAM,eACZ,QAAM,eAAQ,GAA8B,EAAI,EAAA,CAAA,GAIhD,GATS,yBAWP,GAAsB,GAAA,EAAA,IACvB,CAAA,EAAA,IAAA,CAED,GAAM,GAAQ,GAAA,EAAA,CAAA,EACf,EAAA,EAAA,IAAA,CAAA,EACF,AAAA,gCAL2B,yBClC5B,OA2BS,EAWL,GAOE,EAsBG,GAWJ,EA9EL,yBAsBiB,+BAKf,AAAO,EAAM,EAAA,GAAA,CACd,GAAA,GAAA,QAAA,YAAA,EAAA,CAAA,EAED,MAAO,IACL,GAAW,GAAG,eAEd,QAAY,eAAS,EAAA,EAAA,CAAA,GAGhB,GATQ,qBAWX,GAAmB,GAAA,EAAK,IAClB,EAAwD,CAAC,EAE7D,IAAM,CAAA,EAHW,gBAOjB,EAAc,EAAA,GAEd,GAEA,CAAA,EAAW,IAAO,IAChB,GAAU,GAAA,GAAS,EAAQ,QAAW,IAAI,EAAG,CAAA,EAAA,QAAA,YAAA,oBAAA,EAAA,CAAA,CAAA,KAC7C,GAAA,GAAA,EAAA,CAAA,EAEF,EAAU,MAAK,EAChB,GAAA,GAAA,EAAA,CAAA,EAEJ,AADE,GAAA,EAAA,CAAA,EACF,QAAA,CAAA,EAAA,IAAA,CAxDD,MA0Da,KAAA,SAAA,IAAyB,CAAA,IAAzB,QAA6B,WAAoC,KAA6B,EACrG,CAAA,EAEC,EAAQ,IAAA,EAAA,CAAA,CACX,EAjBgB,4BAsBX,GAAM,GAAA,EAAA,IAAA,CACd,GAAA,GAAA,QAAA,YAAA,EAAA,EAAA,CAAA,EAED,MAAO,IACL,GAAQ,GAAgB,eACtB,QAAQ,eAAa,EAAQ,EAAA,EAAA,CAAA,MALlB,6BAWV,EAAA,EAAA,GACF,AAAA,GACF,CAAA,EAAA,EAAA,IAAA,kCAFI,6BC9EL,MAAA,0GCAA,OAkBK,EAlBL,0BAiBW,qBACN,OAAA,aACF,EAAA,CAED,AAAA,MAAc,IAAY,SACxB,KAAS,QAAsB,WAAA,MAAA,KAAA,eAAA,EAAA,CAAA,EAElC,KAAA,QAAA,8BANI,oCClBL,GAYa,GAIA,GAhBb,uBASA,IACA,IAEO,AAAM,EAAN,aAA0C,EAAa,GAAjD,mCAIN,AAAM,GAAqB,EAAyB,CAA2B,IChBtF,SAAA,yFCAA,OAsBS,GAWH,GAjCN,0BAmB0B,0BAGxB,AAAO,GAAM,EAAA,GAAA,CACd,GAAA,GAAA,QAAA,YAAA,GAAA,CAAA,EAED,MAAO,IACL,GAAQ,GAAQ,eACd,QAAM,eAAQ,GAA0B,EAAA,CAAA,GAIxC,GATW,sBAWT,GAAc,EAAA,GACf,CAAA,EAAA,IAAA,CAED,GAAM,GAAQ,GAAkB,CAAA,EACjC,EAAA,EAAA,IAAA,CAAA,EACF,AAAA,+CALmB,gBCjCpB,sCCAA,GAgBE,KAhBF,8BAgBE,AAAA,EAAA,aAAqE,EAAqB,iBAEtF,OACE,CACA,QAAS,WAMhB,YAAA,EAAA,EAAA,EAAA,CAEM,MAAM,oDAZX,kCChBF,GAQA,IACA,GAEA,GAQA,GACA,GAEa,EAtBb,uBAQA,GAAkB,oBAClB,GAA2B,sBAE3B,GAA0B,qBAE1B,KAEA,IACA,IACA,IAEA,GAAqB,wBACrB,GAAiB,mBAEJ,EAAN,KAAc,CAOnB,YAAY,EAAuB,EAAuB,MAAvB,OAAA,OANnC,WAAuB,CAAA,OAEvB,SAA6C,GAAI,eAK/C,KAAK,OAAS,EAAO,eAAe,CAClC,OAAQ,CAAC,WAAM,MAAM,YAAY,GAClC,EAGH,4BAA4E,EAA4B,CACtG,GAAM,GAA4B,CAAA,EAElC,OAAW,KAAO,MAAK,WACrB,EAAO,KAAI,GAAI,KAAK,sBAAsB,EAAK,CAAI,CAAC,EAGtD,MAAO,GAGT,sBAAsE,EAAa,EAA4B,CAC7G,GAAM,GAAiB,EAAkB,CAAG,EAE5C,MAAO,OAAM,KAAK,EAAe,OAAO,AAAC,GAAO,EAAE,cAA4B,CAAI,EAAE,OAAM,CAAE,EAG9F,uBAAuB,EAAa,CAClC,GAAM,GAAY,KAAK,sBAAsB,EAAK,CAAiB,EAEnE,OAAW,KAAY,GAAW,CAChC,GAAM,GAAU,KAAK,SAAS,IAAI,EAAS,QAAQ,OAAO,EAE1D,GAAI,EAAS,CACX,GAAM,GAAQ,EAAS,OAAO,KAAK,CAAG,EAEtC,QAAQ,eAAe,QAAS,EAAO,CAAQ,EAE/C,EAAQ,YAAY,EAAS,QAAQ,MAAO,CAAK,IAKvD,yBAAyB,EAAa,CACpC,GAAM,GAAY,KAAK,sBAAsB,EAAK,CAAiB,EAEnE,OAAW,KAAY,GAAW,CAChC,GAAM,GAAU,KAAK,SAAS,IAAI,EAAS,QAAQ,OAAO,EACpD,EAAQ,QAAQ,YAAY,QAAS,CAAQ,EAEnD,AAAI,GAAW,GACb,EAAQ,eAAe,EAAS,QAAQ,MAAO,CAAK,GAK1D,KAAM,2BAA0B,EAAgC,CAC9D,GAAM,GAAoB,CAAA,EAEpB,EAAQ,eAAS,CAAG,EAAE,OAAO,AAAC,GAAM,EAAE,SAAS,KAAK,GAAK,EAAE,SAAS,KAAK,CAAC,EAEhF,OAAW,KAAQ,GACjB,GAAI,GAAK,SAAS,OAAO,EACzB,GAAI,CACF,GAAM,GAAI,WAAK,KAAK,EAAK,CAAI,EACvB,EAAM,QAAQ,GAEpB,GAAI,MAAO,GAAI,OAAU,WAAY,SAErC,GAAM,GAAU,KAAM,GAAI,MAAK,EAE/B,EAAQ,KAAI,GAAK,KAAM,MAAK,gBAAgB,EAAS,CAAC,CAAC,OACvD,CACA,KAAK,OAAO,MAAM,kBAAkB,GAAM,EAI9C,MAAO,GAGT,KAAc,iBAAgB,EAA4B,EAAW,CACnE,GAAM,GAAoB,CAAA,EAC1B,GAAI,YAAmB,OACrB,OAAW,KAAU,GACnB,KAAM,MAAK,eAAe,CAAM,EAChC,QAAQ,eAAe,EAAgB,EAAG,CAAM,EAChD,EAAQ,KAAK,CAAM,MAGrB,MAAM,MAAK,eAAe,CAAO,EACjC,QAAQ,eAAe,EAAgB,EAAG,CAAO,EACjD,EAAQ,KAAK,CAAO,EAGtB,MAAO,GAGT,KAAM,gBAAgB,CACpB,GAAM,GAA6D,CAAA,EAC7D,EAAQ,GAAI,KAClB,OAAW,KAAU,MAAK,WAAY,CACpC,GAAM,GAAO,QAAQ,YAAY,EAAgB,CAAM,EACvD,AAAI,CAAC,GAEL,GAAM,IAAI,CAAI,EAEd,KAAM,MAAK,iBAAiB,CAAM,EAClC,MAAO,SAAQ,MAAsB,AAAhB,QAAQ,QAAQ,KAGvC,OAAW,KAAQ,GACjB,GAAI,CACF,GAAM,GAAM,QAAQ,GAEpB,GAAI,MAAO,GAAI,OAAU,WAAY,SAErC,GAAM,GAAU,KAAM,GAAI,MAAM,KAAK,MAAM,EAE3C,KAAM,MAAK,gBAAgB,EAAS,CAAI,EAExC,EAAO,KAAK,CACV,KAAM,EACN,OAAQ,GACT,QACM,EAAP,CACA,EAAO,KAAK,CACV,KAAM,EACN,OAAQ,GACR,MAAO,EACR,EAIL,MAAO,GAGT,KAAM,gBAAe,EAAa,CAChC,QAAQ,eAAe,EAAqB,KAAK,OAAQ,CAAG,EAE5D,KAAK,uBAAuB,CAAG,EAC/B,KAAM,MAAK,cAAc,EAAK,MAAM,EACpC,KAAK,WAAW,KAAK,CAAG,EACxB,KAAK,OAAO,KAAK,sBAAsB,WAAM,MAAM,EAAI,YAAY,IAAI,GAAG,EAG5E,KAAM,kBAAiB,EAAa,CAClC,KAAK,yBAAyB,CAAG,EACjC,KAAM,MAAK,cAAc,EAAK,QAAQ,EACtC,WAAE,OAAO,KAAK,WAAY,AAAC,GAAM,IAAM,CAAG,EAC1C,KAAK,OAAO,KAAK,wBAAwB,WAAM,MAAM,EAAI,YAAY,IAAI,GAAG,EAG9E,cAAc,EAAa,KAAqB,EAAiB,CAG/D,GAAM,GAAY,AAFJ,GAAmB,CAAG,EAEZ,IAAI,CAAQ,EAEpC,GAAI,EACF,OAAW,KAAM,GACf,EAAG,KAAK,EAAG,GAAK,CAAI,EAK1B,qBAAqB,EAAc,EAAuB,CACxD,KAAK,SAAS,IAAI,EAAM,CAAO,IAvKtB,kBCtBb,uCCAA,QAAA,sFCAA,UAuBG,EAvBH,0BAkBW,uBACR,gCAIA,AAAA,EAAA,KAAA,CAID,GAAc,gBAAS,CACrB,MAAK,GAAc,cAAe,IAAK,cAA+C,OAA0C,MAAA,cAAA,oBAA+B,CAC/J,MAAA,MAAO,SAAY,MAAA,QAAA,KAAA,cAAA,OAAA,eAAA,CACpB,OAAA,CAEe,WAAA,MACd,IAAA,KAAwC,YAExC,OACA,CAEA,EAEA,oBAAwB,WAEhB,+BAEgC,EAAW,EAAS,EAAA,EAAA,OAAE,GAAK,sBAAY,KAAA,MAAA,cAAA,SAAA,kBAC5E,KAAA,MAAA,cAAA,SAAA,sBAAA,EAAA,CAAA,EACF,AAAA,EAAA,QAAA,WAAA,GAEI,EAAO,IAAK,EAAU,QAAM,KAAA,CACzB,UAAY,EAEb,IAAA,CACH,CAAA,SAII,CAAA,EAAA,IAAgB,GAAM,CAE5B,GAAA,GAAiB,EAAM,IAAA,EAAS,IAAC,EAClC,GAAA,CAAA,EAAA,CACF,EAAA,GAAA,OACF,mFAtCE,mBCvBH,OAayI,EAbzI,0BAakG,yBAAuC,eAAqB,EAAK,aAAG,CAClK,MAAA,MAAO,SAAY,MAAA,QAAA,KAAA,cAAA,UAAA,eAAA,CACpB,OAAA,CACF,WAAA,MAAA,IAAA,KAAA,YAAA,OAAA,4CAHwI,sBCbzI,GAQA,GACA,EADA,IAyBa,EAjCb,uBAQA,EAAkB,oBAClB,EAWO,sBACP,KACA,KACA,IACA,IACA,KACA,KACA,KAnBA,AAAA,EAAA,SAAA,EAAA,EAAA,EAAA,EAAA,kaAyBa,EAAN,aAA0C,EAAY,CAC3D,YAAmB,EAA2C,CAC5D,MAAK,OADY,OAAA,EAInB,KACM,mBAAkB,EAAgB,CAvC1C,MAwCI,GAAI,EAAE,OAAS,kBAAgB,mBAAoB,OAEnD,GAAI,GAA0C,KAC1C,EAAqB,KAEnB,EAAa,KAAK,cAAc,SAAS,WAE/C,OAAW,KAAa,GAAY,CAClC,GAAM,GAAa,KAAK,cAAc,SAAS,sBAAsB,EAAW,CAA2B,EAE3G,OAAW,KAAW,GACpB,AAAI,EAAQ,QAAQ,OAAS,EAAE,aAC7B,GAAM,EACN,EAAM,GAKZ,GAAI,GAAO,EAAK,CACd,GAAM,GAAqB,CAAA,EAE3B,KAAM,MAAK,iBAAiB,EAA6B,EAAS,EAAI,SAAU,IAAM,CAAC,EAAE,EAEzF,OAAW,CAAC,EAAK,IAAQ,GAAI,SAAU,CACrC,GAAI,GAAiB,KAErB,OAAW,KAAa,GAAI,WAC1B,GAAI,YAAqB,GAA0B,CACjD,GAAI,CAAC,+BAA6B,WAAY,+BAA6B,iBAAiB,SAAS,EAAU,QAAQ,IAAI,GAAK,EAAE,mBAAkB,EAAI,CACtJ,GAAI,EAAU,QAAQ,OAAS,+BAA6B,WAAY,CACtE,EAAQ,EAAE,QAAQ,cAAa,IAAO,EAAU,QAAQ,KACxD,MAEF,GAAI,EAAU,QAAQ,OAAS,+BAA6B,gBAAiB,CAC3E,EAAQ,EAAE,QAAQ,mBAAkB,IAAO,EAAU,QAAQ,KAC7D,OAIJ,EAAQ,KAAE,QAAQ,IAAI,EAAU,QAAQ,KAAM,EAAK,IAA3C,cAA8C,MACtD,MAIJ,AAAI,GACF,GAAQ,GAAO,GAInB,GAAI,CACF,KAAM,GAAI,QAAQ,EAAK,EAAS,CAAC,EAAE,QAC5B,EAAP,CACA,KAAK,cAAc,KAAK,gCAAiC,EAAG,CAAC,IAKnE,KACM,OAAO,CAAA,CAEb,KAAM,OAAO,CACX,GAAM,GAAS,EAAc,cAAc,IAAI,EAE/C,KAAK,OAAO,KAAK,4BAA4B,EAE7C,GAAM,GAAqC,CAAA,EAErC,EAAgB,GAAI,cAE1B,OAAW,KAAW,GAAO,SAAS,4BAA4B,CAA2B,EAAG,CAC9F,GAAM,GAA8B,CAAE,GAAG,EAAQ,SAEjD,GAAI,EAAI,OAAS,yBAAuB,UAAW,CACjD,EAAI,QAAU,CAAA,EAEd,OAAW,CAAA,CAAG,IAAQ,GAAQ,SAAU,CACtC,GAAM,GAAS,EAAI,WAAW,KAAK,AAAC,GAAM,EAAE,cAAgB,CAAwB,EAEpF,AAAI,GACF,EAAI,QAAQ,KAAK,EAAO,OAAO,GAKrC,GAAI,EAAQ,QAAQ,OAAQ,CAC1B,OAAW,KAAS,GAAQ,QAAQ,OAAQ,CAC1C,GAAI,GAAW,EAAc,IAAI,CAAK,EACtC,AAAK,GACH,GAAW,CAAA,EACX,EAAc,IAAI,EAAO,CAAQ,GAEnC,EAAS,KAAK,CAAG,EAEnB,SAGF,GAAI,KAAK,OAAO,OAAQ,CACtB,OAAW,KAAS,MAAK,OAAO,OAAQ,CACtC,GAAI,GAAW,EAAc,IAAI,CAAK,EACtC,AAAK,GACH,GAAW,CAAA,EACX,EAAc,IAAI,EAAO,CAAQ,GAEnC,EAAS,KAAK,CAAG,EAEnB,SAEF,EAAS,KAAK,CAAG,EAGnB,GAAI,EAAc,KAChB,OAAW,CAAC,EAAO,IAAa,GAAe,CAC7C,KAAK,OAAO,KAAK,cAAc,UAAM,MAAM,EAAS,MAAM,cAAc,EAAS,IAAI,AAAC,GAAM,UAAM,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,EAC7H,GAAI,CACF,GAAM,GAAI,KAAM,MAAK,OAAO,OAAO,MAAM,CAAK,EAC9C,KAAM,GAAE,MAAK,EACb,KAAK,OAAO,KAAK,kCAAkC,UAAM,MAAM,EAAE,IAAI,KAAK,UAAM,KAAK,EAAE,EAAE,IAAI,EAE7F,KAAM,GAAE,SAAS,IAAI,CAAQ,EAE7B,KAAK,OAAO,KAAK,8CAA8C,UAAM,MAAM,EAAE,IAAI,KAAK,UAAM,KAAK,EAAE,EAAE,IAAI,QAClG,EAAP,CACA,KAAK,OAAO,MAAM,wCAAwC,UAAM,MAAM,CAAK,MAAO,EAAY,SAAS,GAI7G,GAAI,EAAS,OACX,GAAI,CACF,KAAK,OAAO,KAAK,kCAAkC,EAEnD,KAAM,MAAK,OAAO,YAAa,SAAS,IAAI,CAAQ,EAEpD,KAAK,OAAO,KAAK,mCAAmC,QAC7C,EAAP,CACA,KAAK,OAAO,MAAM,0CAA2C,EAAY,SAAS,GAKxF,KAKM,iBAAgB,EAAgC,CACpD,MAAO,GAGT,KAKM,oBAAmB,EAAyC,CAChE,MAAO,GAGT,KAKM,iBAAgB,EAAsC,CAC1D,MAAO,KA1KE,sCAKV,EAAS,CAAE,MAAO,oBAAqB,yDACb,eAAW,IAAA,OAAX,iBANhB,EAA2B,UAMhC,oBAAiB,IAAA,KA0DtB,GAAW,MAAM,uDAhEP,EAA2B,UAiEhC,OAAI,IAAA,KAiFT,EAAa,CACZ,UAAW,EACX,cAAe,GACf,KAAM,8BACP,yDACwB,+BAA2B,IAAA,OAA3B,iCAvJd,EAA2B,UAuJhC,kBAAe,IAAA,KAIpB,EAAa,CACZ,UAAW,EACX,cAAe,GACf,KAAM,uCACP,yDAC2B,wCAAoC,IAAA,OAApC,0CAhKjB,EAA2B,UAgKhC,qBAAkB,IAAA,KAIvB,EAAa,CACZ,UAAW,EACX,cAAe,GACf,KAAM,oCACP,yDACwB,qCAAiC,IAAA,OAAjC,uCAzKd,EAA2B,UAyKhC,kBAAe,IAAA,IC1MvB,GAiBa,GAEA,GAnBb,uBAQA,IACA,IAQO,AAAM,EAAN,aAAmC,EAAa,GAA1C,4BAEN,AAAM,GAAU,EAAyB,CAAoB,ICnBpE,SAAA,0FCAA,GASA,GADA,KAWa,EAnBb,uBAQA,IACA,EAAwB,sBACxB,KACA,KACA,KACA,IALA,AAAA,GAAA,SAAA,EAAA,EAAA,EAAA,EAAA,kaAWa,EAAN,aAAmC,EAAY,CACpD,YAAoB,EAA2B,CAC7C,MAAK,OADa,OAAA,EAIpB,KAAc,eAAc,EAAsC,CAChE,GAAM,GAAU,EAAI,QAChB,EAAS,KAAK,OAAO,OAMzB,GAJI,MAAO,IAAW,YACpB,GAAS,KAAM,GAAO,CAAG,GAGvB,MAAO,IAAW,SACpB,MAAI,GAAQ,WAAW,CAAM,EAAU,EAAO,OACvC,KAGT,GAAI,YAAkB,OAAO,CAC3B,GAAM,GAAI,EAAO,KAAK,AAAC,GAAM,EAAQ,WAAW,CAAC,CAAC,EAElD,MAAI,GAAU,EAAE,OACT,KAGT,MAAO,MAGT,KACc,eAAc,EAAc,CACxC,GAAM,GAAa,KAAM,MAAK,cAAc,CAAG,EAE/C,GAAI,CAAC,EAAY,OAEjB,GAAM,GAAU,EAAI,QAAQ,MAAM,CAAU,EAEtC,EAAmC,CAAA,EAEnC,EAAa,GAAI,KAEvB,OAAW,KAAO,MAAK,cAAc,SAAS,WAC5C,OAAW,KAAO,MAAK,cAAc,SAAS,sBAAsB,EAAK,CAAoB,EAC3F,EAAS,KAAK,CAAG,EACjB,EAAW,IAAI,EAAK,CAAG,EAI3B,GAAI,GAAoB,EAElB,EAAU,EAAS,KAAK,AAAC,GAAM,CACnC,GAAM,GAAQ,CAAC,EAAE,QAAQ,MAEzB,AAAI,EAAE,QAAQ,SACZ,EAAM,KAAI,GAAI,EAAE,QAAQ,OAAO,EAGjC,OAAW,KAAQ,GACjB,GAAI,EAAQ,WAAW,CAAI,EACzB,MAAI,GAAQ,SAAW,EAAK,OAC1B,GAAoB,EAAK,OAClB,IAET,GAAoB,EAAK,OAClB,EAAQ,WAAW,EAAO,GAAG,GAIxC,MAAO,GACR,EAED,GAAI,CAAC,EAAS,OAEd,GAAM,GAAM,EAAW,IAAI,CAAO,EAElC,GAAI,CAAC,EAAK,OAEV,GAAM,GAAkB,CAAA,EAEpB,EAAa,EAAQ,MAAM,EAAoB,CAAC,EAAE,MAAK,IAAA,EAE3D,KAAM,MAAK,iBAAiB,EAAsB,EAAM,EAAQ,SAAU,MAAO,EAAK,EAAG,IAAc,CACrG,GAAI,EAAU,QAAQ,cAAe,MAAO,CAAC,GAE7C,GAAI,EAAI,WAAW,KAAK,AAAC,IAAM,GAAE,cAAgB,CAAqB,EAAG,CACvE,GAAM,IAAO,EAAW,KAAK,GAAG,EAChC,SAAa,CAAA,EACN,CAAC,GAAM,GAEhB,MAAO,CAAC,EAAW,MAAK,EAAI,GAC7B,EAED,KAAM,GAAQ,QAAQ,EAAK,EAAM,CAAC,EAAI,EAGxC,KACM,QAAO,EAAc,CACzB,MAAO,GAGT,KACM,KAAI,EAAe,CACvB,MAAO,GAGT,KACM,KAAI,EAAe,CACvB,MAAO,QAAO,CAAK,IA1GV,gCA4BV,EAAS,CAAE,MAAO,gBAAiB,QAAS,UAAW,yDACvB,WAAO,IAAA,OAAP,aA7BtB,EAAoB,UA6BjB,gBAAa,IAAA,MAiE1B,EAAa,CAAE,UAAW,EAAsB,KAAM,UAAS,cAAe,GAAM,yDACnE,WAAO,IAAA,OAAP,aA/FP,EAAoB,UA+FzB,SAAM,IAAA,MAIX,EAAa,CAAE,UAAW,EAAsB,KAAM,OAAQ,6DAnGpD,EAAoB,UAoGzB,MAAG,IAAA,MAIR,EAAa,CAAE,UAAW,EAAsB,KAAM,OAAQ,6DAxGpD,EAAoB,UAyGzB,MAAG,IAAA,IC5HX,0CAeA,IACA,GACA,MAM6C,EAvB7C,uBAeA,GAAS,oBACT,GAAyB,sBACzB,GAAa,wBAMuB,oCAAS,eAAc,WAAA,aAFzD,EAAyB,EAAS,GAAA,WAAA,CAKhC,iBAAiB,KAAM,eAAe,EAAC,gBAAA,EAAA,yBAAsC,QAAA,OAAE,OAAA,OAA2B,OAAA,GAAA,UAA6B,UAAA,EAAA,eAAA,CAEnI,OAAC,CAEA,WAAS,KAAA,cAAA,CACV,EACL,gBAAA,SAEK,oBAAc,EAClB,CAAA,EAEA,KAAK,SAAU,GAAK,GAAA,KAAA,UAAqB,IAAA,EAEzC,KAAA,SAAW,qBAAoB,MAAO,IAAA,EAEtC,KAAA,SAAc,qBAAa,UAAiB,KAAA,OAAA,OAI5C,cAAyB,CAEzB,GAAI,CAAA,KAAK,QAAA,YAAkB,KAAA,IAAA,OAAA,8BAAA,OACzB,UAAW,KAAK,oBAAS,OACzB,MAAO,QAAK,YAAU,MAAA,KACvB,GAAU,KAAK,QAAA,YAAkB,SAChC,CAAA,EAAK,KAAS,IAAE,OAAO,+BAAmB,QACnC,CAAA,iBACO,cACb,OAAA,IAAA,EAAA,EAAA,EACF,EAAA,KAAA,EAAA,GAAA,UAEI,YAAgB,SACtB,OAAA,CAAA,EAAA,IAAA,GAAA,QAEK,KAAA,OAAA,IAAA,CAAA,EACE,EAAK,KAAS,EAAA,KAAA,GAAe,EAIrC,KAAM,UAAA,KAAA,WAA4B,WAAyB,MAAE,EAAA,MAAA,YAAA,EAAA,IAAA,AAAA,GAAA,WAAA,KAAA,CAAA,CAAA,EAAA,KAAA,IAAA,IAAA,OAE3D,oCAAoB,EAAA,CACrB,KAAA,MAAA,SAAA,eAAA,GAAA,GAAA,CAAA,CAAA,EAED,KAAA,UAAA,KAAA,wCAAkC,OAEjC,6BAAA,EAAA,CAED,KAAO,MAAA,SAAyB,eAAiB,GAAA,GAAA,CAAA,CAAA,EAC/C,KAAA,UAAe,KAAA,iCAAqC,EAEvD,iCAAA,sHAtD4C,uBCvB7C,OA0BS,EA1BT,yBAuBwB,2BAGf,OAAe,OAClB,GAAA,wBACA,GAAK,2BACN,EAAA,EAAA,EAAA,CACF,KAAA,QAAA,KAAA,eAAA,CAAA,EAED,KAAA,OAAe,EACb,OAAO,GAAA,EAA6B,EAAA,EAAA,OAAA,IAAA,CACrC,GAAA,GAAA,EAAA,GAEK,KAAA,SAAY,IAAgB,EAAA,GAAc,GAAiB,CAAA,CAAA,CAC/D,iBAIQ,EAAA,CAER,MAAK,QAEJ,aAAA,EAAA,EAAA,EAAA,CACF,GAAA,GAAA,KAAA,MAAA,IAAA,CAAA,EAED,GAAM,CAAA,EAAQ,OACZ,GAAM,CAAA,iBAAiB,KAAQ,uCAC/B,OAAU,KAAA,GACN,KAAA,GAAA,KAAA,KAAA,EAAA,cAAA,CAAA,EAAA,GAAA,CAAA,gBAGI,EAAK,EAAA,EAAoB,EAAA,YAAiB,YAAA,EAAA,aAAA,CAAA,WAChD,CACD,EAAA,KAAA,MAAA,OAAA,KAAA,EAAA,GAAA,CAAA,CACD,OAAM,EAAN,CAA6C,WAAM,MAAA,YAAA,EAAA,cAAA,CAAE,CAErD,CAAA,EACD,CACF,sDAnCQ,uBC1BT,OAAA,0ECAA,MAAA,yDCAA,OAsBI,GACD,GAvBH,0BAmBoC,+BAGhC,GAA4B,EAAC,GAAC,GAAU,aAAA,CAAA,EAAZ,wBAC7B,GAAA,GAAA,MAAA,EAAA,IAAA,CAED,GAAI,GAAU,MACd,AAAA,YAAA,wHC1BF,uCCAA,kCCAA,0BAcA,mCCdA","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pikokr/command.ts",
3
3
  "description": "Discord.js command framework for typescript.",
4
- "version": "5.0.6",
4
+ "version": "5.0.7-dev.51b0ed5",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
@@ -43,4 +43,4 @@
43
43
  "peerDependencies": {
44
44
  "discord.js": "^14.0.1"
45
45
  }
46
- }
46
+ }
@@ -84,6 +84,7 @@ export class Registry {
84
84
  const files = walkSync(dir).filter((x) => x.endsWith('.ts') || x.endsWith('.js'))
85
85
 
86
86
  for (const file of files) {
87
+ if (file.endsWith('.d.ts')) continue
87
88
  try {
88
89
  const p = path.join(dir, file)
89
90
  const mod = require(p)