@pikokr/command.ts 5.6.1-dev.1 → 5.6.2-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -38,9 +38,9 @@ pnpm add @pikokr/command.ts
38
38
  If you want to start project with command.ts, you can use the [quickstart template](https://github.com/pikokr/command.ts-v5-template).
39
39
 
40
40
  ```shell
41
- npx degit pikokr/command.ts-v5-template my-app
41
+ pnpx degit pikokr/command.ts-v5-template my-app
42
42
  cd my-app
43
- npm dev
43
+ pnpm dev
44
44
  ```
45
45
 
46
46
  Please refer to [template repository](https://github.com/pikokr/command.ts-v5-template) for detailed usage.
package/dist/index.d.ts CHANGED
@@ -4,13 +4,13 @@ import EventEmitter from 'events';
4
4
  import * as tslog from 'tslog';
5
5
  import { Logger, ISettingsParam } from 'tslog';
6
6
 
7
- declare type AnyFunction = (...args: unknown[]) => unknown;
7
+ type AnyFunction = (...args: unknown[]) => unknown;
8
8
 
9
- declare type ComponentHookFn<T extends unknown[]> = (...args: T) => void | Promise<void>;
10
- declare type ComponentHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
9
+ type ComponentHookFn<T extends unknown[]> = (...args: T) => void | Promise<void>;
10
+ type ComponentHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
11
11
  declare const createComponentHook: <T extends unknown[]>(name: string, fn: ComponentHookFn<T>) => MethodDecorator;
12
12
 
13
- declare type ModuleHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
13
+ type ModuleHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
14
14
  declare const getModuleHookStore: (target: object) => ModuleHookStore;
15
15
  declare const moduleHook: (name: string) => MethodDecorator;
16
16
 
@@ -36,8 +36,8 @@ declare class BaseComponent {
36
36
  execute(target: object, args: unknown[], beforeCallArgs?: unknown[]): Promise<unknown>;
37
37
  }
38
38
 
39
- declare type ComponentStore = Collection<string | symbol, BaseComponent>;
40
- declare type ComponentArgumentStore = Collection<number, ComponentArgumentDecorator>;
39
+ type ComponentStore = Collection<string | symbol, BaseComponent>;
40
+ type ComponentArgumentStore = Collection<number, ComponentArgumentDecorator>;
41
41
  declare const getComponentStore: (target: object) => ComponentStore;
42
42
  declare const getComponent: (target: object, key: string | symbol) => BaseComponent | undefined;
43
43
  declare const createComponentDecorator: (component: BaseComponent) => MethodDecorator;
@@ -46,12 +46,12 @@ declare const createArgumentDecorator: <Options>(type: {
46
46
  new (options: Partial<Options>): ComponentArgumentDecorator<Options>;
47
47
  }) => (options: Options) => ParameterDecorator;
48
48
 
49
- declare type Options$2<T> = {
49
+ type Options$2<T> = {
50
50
  component: unknown;
51
51
  type: T;
52
52
  parameterless: boolean;
53
53
  };
54
- declare type OptionsArg$1<T> = Omit<Options$2<T>, 'parameterless'> & {
54
+ type OptionsArg$1<T> = Omit<Options$2<T>, 'parameterless'> & {
55
55
  parameterless?: boolean;
56
56
  };
57
57
  declare class ConverterComponent<T> extends BaseComponent {
@@ -72,7 +72,7 @@ declare class CTSExtension extends Extension {
72
72
  protected get logger(): tslog.Logger<unknown>;
73
73
  }
74
74
 
75
- declare type ApplicationCommandExtensionConfig = {
75
+ type ApplicationCommandExtensionConfig = {
76
76
  guilds?: Snowflake[];
77
77
  };
78
78
  declare class ApplicationCommandExtension extends CTSExtension {
@@ -92,7 +92,7 @@ declare class ApplicationCommandExtension extends CTSExtension {
92
92
  commandInteraction(i: UserContextMenuCommandInteraction): Promise<UserContextMenuCommandInteraction<discord_js.CacheType>>;
93
93
  }
94
94
 
95
- declare type TextCommandOptions = {
95
+ type TextCommandOptions = {
96
96
  name: string;
97
97
  aliases?: string[];
98
98
  description?: string;
@@ -103,7 +103,7 @@ declare class TextCommandComponent extends BaseComponent {
103
103
  }
104
104
  declare const command: (options: TextCommandOptions) => MethodDecorator;
105
105
 
106
- declare type TextCommandConfig = {
106
+ type TextCommandConfig = {
107
107
  prefix: string | string[] | ((msg: Message) => Promise<string | string[]> | string | string[]);
108
108
  };
109
109
  declare module 'discord.js' {
@@ -166,11 +166,11 @@ declare class OwnerOnlyError {
166
166
 
167
167
  declare const mergeMethodDecorators: (decorators: MethodDecorator[]) => MethodDecorator;
168
168
 
169
- declare type Options$1 = {
169
+ type Options$1 = {
170
170
  emitter: string;
171
171
  event: string;
172
172
  };
173
- declare type OptionsArg = {
173
+ type OptionsArg = {
174
174
  emitter?: string;
175
175
  event: string;
176
176
  };
@@ -194,7 +194,7 @@ declare class SubCommandGroupChild {
194
194
  command(options: Omit<ChatInputApplicationCommandData, 'options' | 'type'>): MethodDecorator;
195
195
  }
196
196
 
197
- declare type Options = (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & {
197
+ type Options = (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & {
198
198
  type: ApplicationCommandType;
199
199
  guilds?: Snowflake[];
200
200
  };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var ne=Object.create;var B=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ie=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var c=(r,t)=>B(r,"name",{value:t,configurable:!0});var f=(r,t)=>()=>(r&&(t=r(r=0)),t);var At=(r,t)=>{for(var e in t)B(r,e,{get:t[e],enumerable:!0})},Lt=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of se(t))!ae.call(r,s)&&s!==e&&B(r,s,{get:()=>t[s],enumerable:!(o=re(t,s))||o.enumerable});return r};var C=(r,t,e)=>(e=r!=null?ne(ie(r)):{},Lt(t||!r||!r.__esModule?B(e,"default",{value:r,enumerable:!0}):e,r)),ce=r=>Lt(B({},"__esModule",{value:!0}),r);var z,xe,ft,Y,ut,tt,F=f(()=>{"use strict";z=Symbol(),xe=Symbol(),ft=Symbol(),Y=Symbol(),ut=Symbol(),tt=Symbol()});var Et,dt,et,gt=f(()=>{"use strict";Et=require("discord.js");F();dt=c((r,t)=>{let e=Reflect.getMetadata(ut,r,t);return e||(e=new Et.Collection,Reflect.defineMetadata(ut,e,r,t)),e},"getComponentHookStore"),et=c((r,t)=>(e,o)=>{let s=dt(e,o),n=s.get(r);n||(n=[],s.set(r,n)),n.unshift(t)},"createComponentHook")});var ht,Z,me,y,yt,J,$=f(()=>{"use strict";ht=require("discord.js");gt();F();Z=c(r=>{let t=Reflect.getMetadata(z,r);return t||(t=new ht.Collection,Reflect.defineMetadata(z,t,r)),t},"getComponentStore"),me=c((r,t)=>Z(r).get(t),"getComponent"),y=c(r=>(t,e)=>{r._init(Reflect.get(t,e),Reflect.getMetadata("design:paramtypes",t,e));let o=dt(t,e);r.hooks=o;let s=Z(t);yt(t,e).forEach((a,i)=>{var m;(m=r.argTypes.get(i))==null||m.decorators.push(a)}),s.set(e,r)},"createComponentDecorator"),yt=c((r,t)=>{let e=Reflect.getMetadata(z,r,t);return e||(e=new ht.Collection,Reflect.defineMetadata(z,e,r,t)),e},"getComponentArgumentStore"),J=c(r=>t=>(e,o,s)=>{let n=new r(t);yt(e,o).set(s,n)},"createArgumentDecorator")});var O,xt=f(()=>{"use strict";O=class{constructor(t){this.type=t,this.decorators=[]}};c(O,"ComponentArgument")});var Ft,G,$t=f(()=>{"use strict";Ft=C(require("lodash")),G=class{constructor(t){typeof t=="object"?this.options=Ft.default.merge(this.defaultOptions(),t):this.options=t}defaultOptions(){return{}}};c(G,"ComponentArgumentDecorator")});var h,pe,ot=f(()=>{"use strict";$();W();h=class extends x{constructor(t){super(),this.options=t}};c(h,"ApplicationCommandComponent");pe=c(r=>y(new h(r)),"applicationCommand")});var H,Ot,bt=f(()=>{"use strict";T();H=class extends G{};c(H,"ApplicationCommandOption");Ot=J(H)});var Wt,I,K,Q=f(()=>{"use strict";Wt=C(require("lodash"));W();$();I=class extends x{constructor(t){super(),this.options=Wt.default.merge({emitter:"discord"},t)}};c(I,"ListenerComponent");K=c(r=>y(new I(r)),"listener")});var j,S,nt=f(()=>{"use strict";W();$();j=class extends x{constructor(t){super(),this.options=t}};c(j,"ConverterComponent");S=c(r=>y(new j(r)),"argConverter")});var Dt,rt,le,Pt=f(()=>{"use strict";Dt=require("discord.js");F();rt=c(r=>{let t=Reflect.getMetadata(ft,r);return t||(t=new Dt.Collection,Reflect.defineMetadata(ft,t,r)),t},"getModuleHookStore"),le=c(r=>(t,e)=>{let o=rt(t),s=o.get(r);s||(s=[],o.set(r,s)),s.push(Reflect.get(t,e))},"moduleHook")});var st=f(()=>{"use strict";Pt();gt()});var D,Nt,qt,Ut,Bt,P,Ct=f(()=>{"use strict";D=C(require("chalk")),Nt=require("discord.js"),qt=C(require("lodash"));wt();st();Q();F();Ut=C(require("walk-sync")),Bt=C(require("path")),P=class{constructor(t,e){this.client=e,this.extensions=[],this.emitters=new Nt.Collection,this.globalHooks={},this.logger=t.getSubLogger({name:D.default.green("Registry")})}addGlobalHook(t,e){let o=this.globalHooks[t];o||(o=[],this.globalHooks[t]=o),o.push(e)}getComponentsWithTypeGlobal(t){let e=[];for(let o of this.extensions)e.push(...this.getComponentsWithType(o,t));return e}getComponentsWithType(t,e){let o=Z(t);return Array.from(o.filter(s=>s.constructor===e).values())}registerEventListeners(t){let e=this.getComponentsWithType(t,I);for(let o of e){let s=this.emitters.get(o.options.emitter);if(s){let n=o.method.bind(t);Reflect.defineMetadata("bound",n,o),s.addListener(o.options.event,n)}}}unregisterEventListeners(t){let e=this.getComponentsWithType(t,I);for(let o of e){let s=this.emitters.get(o.options.emitter),n=Reflect.getMetadata("bound",o);s&&n&&s.removeListener(o.options.event,n)}}async loadAllModulesInDirectory(t,e){let o=[],s=(0,Ut.default)(t).filter(n=>(n.endsWith(".ts")||n.endsWith(".js"))&&(!e||e.test(n)));for(let n of s){if(n.endsWith(".d.ts"))continue;let a=Bt.default.join(t,n);o.push(...await this.loadModulesAtPath(a))}return o}async loadModulesAtPath(t){this.logger.info(`Loading module at path ${D.default.green(t)}`);let e=require.resolve(t),o=require(e);if(typeof o.setup!="function")throw new Error("Extension must have a setup function");let s=await o.setup(this.client);return this.registerModules(s,e)}async registerModules(t,e){let o=[];if(t instanceof Array)for(let s of t)await this.registerModule(s),Reflect.defineMetadata(tt,e,s),o.push(s);else await this.registerModule(t),Reflect.defineMetadata(tt,e,t),o.push(t);return o}async reloadModules(){let t=[],e=new Set,o=[...this.extensions];for(let s of o){let n=Reflect.getMetadata(tt,s);!n||(this.logger.info(`Unloading module: ${D.default.green(s.constructor.name)}`),e.add(n),await this.unregisterModule(s),delete require.cache[require.resolve(n)])}for(let s of e)try{let n=await this.loadModulesAtPath(s);t.push({file:s,result:!0,extensions:n})}catch(n){t.push({file:s,result:!1,error:n})}return t}async registerModule(t){Reflect.defineMetadata(Y,this.client,t),this.registerEventListeners(t),await this.runModuleHook(t,"load"),this.extensions.push(t),this.logger.info(`Module registered: ${D.default.green(t.constructor.name)}`)}async unregisterModule(t){this.unregisterEventListeners(t),await this.runModuleHook(t,"unload"),qt.default.remove(this.extensions,e=>e===t),this.logger.info(`Module unregistered: ${D.default.green(t.constructor.name)}`)}runModuleHook(t,e,...o){let n=rt(t).get(e);if(n)for(let a of n)a.call(t,...o)}registerEventEmitter(t,e){this.emitters.set(t,e)}};c(P,"Registry")});var St=f(()=>{"use strict";Ct();it()});var zt,Zt,N,Mt=f(()=>{"use strict";zt=C(require("chalk")),Zt=require("discord.js");nt();St();N=class{get commandClient(){return A.getFromModule(this)}get client(){return this.commandClient.discord}get logger(){return this._logger||(this._logger=this.commandClient.logger.getSubLogger({name:zt.default.green(`${this.constructor.name}`)})),this._logger}async convertArguments(t,e,o,s){let n=new Zt.Collection;for(let a of this.commandClient.registry.extensions)for(let i of this.commandClient.registry.getComponentsWithType(a,j))i.options.component==t&&n.set(i.options.type,{component:i,ext:a});for(let[a,i]of o){let m=n.get(i.type);if(!m){e[a]=void 0;continue}let d=await s(i,a,m.component);e[a]=await m.component.execute(m.ext,d)}}};c(N,"Extension")});var Jt,L,kt=f(()=>{"use strict";Jt=C(require("chalk"));Mt();L=class extends N{get logger(){return this._logger||(this._logger=this.commandClient.ctsLogger.getSubLogger({name:Jt.default.green(`${this.constructor.name}`)})),this._logger}};c(L,"CTSExtension")});var M,p,V,k,b,vt=f(()=>{"use strict";M=C(require("chalk")),p=require("discord.js");ot();bt();Q();nt();kt();V=function(r,t,e,o){var s=arguments.length,n=s<3?t:o===null?o=Object.getOwnPropertyDescriptor(t,e):o,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,e,o);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,e,n):a(t,e))||n);return s>3&&n&&Object.defineProperty(t,e,n),n},k=function(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)},b=class extends L{constructor(t){super(),this.config=t,this.unmanagedCommands=[]}registerUnmanagedCommand(t){this.unmanagedCommands.push(t)}async interactionCreate(t){var e;try{if(t.type!==p.InteractionType.ApplicationCommand)return;let o=null,s=null,n=this.commandClient.registry.extensions,a=null,i=null;t.commandType===p.ApplicationCommandType.ChatInput&&(a=t.options.getSubcommand(!1),i=t.options.getSubcommandGroup(!1));t:for(let m of n){let d=this.commandClient.registry.getComponentsWithType(m,h);if(a){for(let l of d)if(!(!l.subcommandGroup&&!l.subcommandGroupChild)){if(l.subcommandGroupChild&&l.subcommandGroupChild.parent.options.name===t.commandName&&l.subcommandGroupChild.options.name===i&&l.options.name===a){s=m,o=l;break t}if(l.subcommandGroup&&!i&&l.subcommandGroup.options.name===t.commandName&&l.options.name===a){s=m,o=l;break t}}}else for(let l of d)if(l.options.name===t.commandName){s=m,o=l;break t}}if(o&&s){let m=[];await this.convertArguments(h,m,o.argTypes,()=>[t]);for(let[d,l]of o.argTypes){let g=null;for(let u of l.decorators)if(u instanceof H){if([p.ApplicationCommandOptionType.Subcommand,p.ApplicationCommandOptionType.SubcommandGroup].includes(u.options.type)&&t.isChatInputCommand()){if(u.options.type===p.ApplicationCommandOptionType.Subcommand){g=t.options.getSubcommand()===u.options.name;break}if(u.options.type===p.ApplicationCommandOptionType.SubcommandGroup){g=t.options.getSubcommandGroup()===u.options.name;break}}g=(e=t.options.get(u.options.name,!1))==null?void 0:e.value;break}g&&(m[d]=g)}try{await o.executeGlobalHook(s,"beforeApplicationCommandCall",[t]),await o.execute(s,m,[t])}finally{await o.executeGlobalHook(s,"afterApplicationCommandCall",[t])}}}catch(o){this.commandClient.emit("applicationCommandInvokeError",o,t)}}async sync(){let t=this.commandClient;this.logger.info("Trying to sync commands...");let e=[],o=new p.Collection,s=new p.Collection;for(let n of t.registry.getComponentsWithTypeGlobal(h)){if(n.subcommandGroup){let i=s.get(n.subcommandGroup.options.name);if(!i){if(i={...n.subcommandGroup.options,type:p.ApplicationCommandType.ChatInput},n.subcommandGroup.guilds)for(let d of n.subcommandGroup.guilds){let l=o.get(d);l||(l=[],o.set(d,l))}else e.push(i);s.set(n.subcommandGroup.options.name,i)}i.options||(i.options=[]);let m=[];for(let[,d]of n.argTypes){let l=d.decorators.find(g=>g.constructor===H);l&&m.push(l.options)}i.options.push({...n.options,type:p.ApplicationCommandOptionType.Subcommand,options:m});continue}else if(n.subcommandGroupChild){let i=n.subcommandGroupChild.parent,m=s.get(i.options.name);if(!m){if(m={...i.options,type:p.ApplicationCommandType.ChatInput},i.guilds)for(let g of i.guilds){let u=o.get(g);u||(u=[],o.set(g,u))}else e.push(m);s.set(i.options.name,m)}m.options||(m.options=[]);let d=m.options.find(g=>{var u;return g.name===((u=n.subcommandGroupChild)==null?void 0:u.options.name)});d||(d={...n.subcommandGroupChild.options,type:p.ApplicationCommandOptionType.SubcommandGroup},m.options.push(d)),d.options||(d.options=[]);let l=[];for(let[,g]of n.argTypes){let u=g.decorators.find(v=>v.constructor===H);u&&l.push(u.options)}d.options.push({...n.options,type:p.ApplicationCommandOptionType.Subcommand,options:l});continue}let a={...n.options};if(a.type===p.ApplicationCommandType.ChatInput){a.options=[];for(let[,i]of n.argTypes){let m=i.decorators.find(d=>d.constructor===H);m&&a.options.push(m.options)}}if(await n.executeHook(this,"beforeSync",[a,n]),n.options.guilds){for(let i of n.options.guilds){let m=o.get(i);m||(m=[],o.set(i,m)),m.push(a)}continue}e.push(a)}for(let{guilds:n,...a}of this.unmanagedCommands)if(n){for(let i of n){let m=o.get(i);m||(m=[],o.set(i,m)),m.push(a)}continue}else e.push(a);if(this.config.guilds){for(let n of this.config.guilds){let a=o.get(n);a||(a=[],o.set(n,a)),a.push(...e)}e=[]}if(o.size)for(let[n,a]of o)try{let i=await this.client.guilds.fetch(n);await i.fetch(),this.logger.info(`Processing ${M.default.green(a.length)} commands(${a.map(m=>M.default.blue(m.name)).join(", ")}) for guild ${M.default.green(i.name)}(${M.default.blue(i.id)})`),await i.commands.set(a),this.logger.info(`Successfully registered commands for guild ${M.default.green(i.name)}(${M.default.blue(i.id)})`)}catch(i){this.logger.error(`Failed to register commands to guild ${M.default.green(n)}: ${i.message}`)}if(e.length)try{this.logger.info(`Processing ${M.default.green(e.length)} commands(${e.map(n=>M.default.blue(n.name)).join(", ")}) for application scope...`),this.client.application?(await this.client.application.commands.set(e),this.logger.info("Successfully registered commands.")):this.logger.error("Client#application is not yet initialized.")}catch(n){this.logger.error(`Failed to register commands to global: ${n.message}`)}}async chatInteraction(t){return t}async messageInteraction(t){return t}async userInteraction(t){return t}async commandInteraction(t){return t}};c(b,"ApplicationCommandExtension");V([K({event:"interactionCreate"}),k("design:type",Function),k("design:paramtypes",[typeof Interaction>"u"?Object:Interaction])],b.prototype,"interactionCreate",null);V([S({component:h,parameterless:!0,type:p.ChatInputCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.ChatInputCommandInteraction>"u"?Object:p.ChatInputCommandInteraction])],b.prototype,"chatInteraction",null);V([S({component:h,parameterless:!0,type:p.MessageContextMenuCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.MessageContextMenuCommandInteraction>"u"?Object:p.MessageContextMenuCommandInteraction])],b.prototype,"messageInteraction",null);V([S({component:h,parameterless:!0,type:p.UserContextMenuCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.UserContextMenuCommandInteraction>"u"?Object:p.UserContextMenuCommandInteraction])],b.prototype,"userInteraction",null);V([S({component:h,parameterless:!0,type:p.CommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.UserContextMenuCommandInteraction>"u"?Object:p.UserContextMenuCommandInteraction])],b.prototype,"commandInteraction",null)});var w,fe,Ht=f(()=>{"use strict";$();W();w=class extends x{constructor(t){super(),this.options=t}};c(w,"TextCommandComponent");fe=c(r=>y(new w(r)),"command")});var E,ue,Rt=f(()=>{"use strict";T();T();E=class extends G{};c(E,"TextCommandRestOption");ue=J(E)});var q,at,_,R,Kt=f(()=>{"use strict";Q();q=require("discord.js");kt();Ht();Rt();T();at=function(r,t,e,o){var s=arguments.length,n=s<3?t:o===null?o=Object.getOwnPropertyDescriptor(t,e):o,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,e,o);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,e,n):a(t,e))||n);return s>3&&n&&Object.defineProperty(t,e,n),n},_=function(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)},R=class extends L{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 s=o.find(n=>e.startsWith(n));return s?s.length:null}return null}async messageCreate(t){try{let e=await this.processPrefix(t);if(e===null)return;let o=t.content.slice(e),s=[],n=new Map;for(let g of this.commandClient.registry.extensions)for(let u of this.commandClient.registry.getComponentsWithType(g,w))s.push(u),n.set(u,g);let a=0,i=s.find(g=>{let u=[g.options.name];g.options.aliases&&u.push(...g.options.aliases);for(let v of u)if(o.startsWith(v))return o.length===v.length?(a=v.length,!0):(a=v.length,o.startsWith(v+" "));return!1});if(!i)return;let m=n.get(i);if(!m)return;t.command=i;let d=[],l=o.slice(a+1).split(/ /g);await this.convertArguments(w,d,i.argTypes,async(g,u,v)=>{if(v.options.parameterless)return[t];if(g.decorators.find(lt=>lt.constructor===E)){let lt=l.join(" ");return l=[],[lt,t]}return[l.shift(),t]}),await i.execute(m,d,[t])}catch(e){this.commandClient.emit("textCommandInvokeError",e,t)}}async mesage(t){return t}async str(t){return t}async num(t){return Number(t)}};c(R,"TextCommandExtension");at([K({event:"messageCreate",emitter:"discord"}),_("design:type",Function),_("design:paramtypes",[typeof q.Message>"u"?Object:q.Message])],R.prototype,"messageCreate",null);at([S({component:w,type:q.Message,parameterless:!0}),_("design:type",Function),_("design:paramtypes",[typeof q.Message>"u"?Object:q.Message])],R.prototype,"mesage",null);at([S({component:w,type:String}),_("design:type",Function),_("design:paramtypes",[String])],R.prototype,"str",null);at([S({component:w,type:Number}),_("design:type",Function),_("design:paramtypes",[String])],R.prototype,"num",null)});var It={};At(It,{CommandClient:()=>A});var Gt,ct,Qt,Vt,A,it=f(()=>{"use strict";Gt=C(require("chalk")),ct=require("discord.js"),Qt=C(require("events")),Vt=require("tslog");vt();Kt();F();Ct();A=class extends Qt.default{constructor(t,e=new Vt.Logger({prettyLogTimeZone:"local"}),o={}){super(),this.discord=t,this.logger=e,this.owners=new Set,this.ctsLogger=e.getSubLogger({...o,name:"command.ts"}),this.registry=new P(this.ctsLogger,this),this.registry.registerEventEmitter("cts",this),this.registry.registerEventEmitter("discord",this.discord)}async isOwner(t){return this.owners.has(t.id)}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,s]of t.members)this.owners.add(o),e.push(s.user.tag);this.ctsLogger.info(`Fetched ${Gt.default.green(e.length)} owners(${e.map(o=>Gt.default.blue(o)).join(", ")})`)}async enableApplicationCommandsExtension(t){await this.registry.registerModule(new b(t)),this.ctsLogger.info("Application command extension enabled.")}async enableTextCommandsExtension(t){await this.registry.registerModule(new R(t)),this.ctsLogger.info("Text command extension enabled.")}getApplicationCommandsExtension(){return this.registry.extensions.find(t=>t.constructor===b)}static getFromModule(t){return Reflect.getMetadata(Y,t)}};c(A,"CommandClient")});var _t,x,W=f(()=>{"use strict";_t=require("discord.js");xt();x=class{hooks=new _t.Collection;argTypes=new _t.Collection;_init(t,e){this.method=t;for(let o=0;o<e.length;o++){let s=e[o];this.argTypes.set(o,new O(s))}}async executeGlobalHook(t,e,o){let{CommandClient:s}=await Promise.resolve().then(()=>(it(),It)),n=s.getFromModule(t),a=n.registry.globalHooks[e];if(a)for(let i of a)await i.call(null,n,...o)}async executeHook(t,e,o){let s=this.hooks.get(e);if(!s)return;let{CommandClient:n}=await Promise.resolve().then(()=>(it(),It)),a=n.getFromModule(t),i=a.registry.globalHooks[e];i&&s.unshift(...i);for(let m of s)await m.call(null,a,...o)}async execute(t,e,o=e){await this.executeHook(t,"beforeCall",o);let s;try{s=await this.method.call(t,...e),await this.executeHook(t,"afterCall",[...o,s])}catch(n){throw await this.executeHook(t,"invokeError",[n,...o]),n}return s}};c(x,"BaseComponent")});var Ro,wt=f(()=>{"use strict";Ro=require("reflect-metadata");$();xt();$t();W()});var U,Tt=f(()=>{"use strict";U=class{};c(U,"OwnerOnlyError")});var mt,Xt,de,Yt=f(()=>{"use strict";mt=require("discord.js");st();Tt();Xt=c(r=>et("beforeCall",r),"createCheckDecorator"),de=Xt(async(r,t)=>{let e=!1;if(t instanceof mt.BaseInteraction?e=await r.isOwner(t.user):t instanceof mt.Message&&(e=await r.isOwner(t.author)),!e)throw new U})});var ge,te=f(()=>{"use strict";ge=c(r=>(t,e,o)=>{for(let s of r)s(t,e,o)},"mergeMethodDecorators")});var ee=f(()=>{"use strict";Yt();Tt();te()});var oe=f(()=>{"use strict";Mt()});var T=f(()=>{"use strict";wt();st();nt();ee();Q();St();oe()});var he={};At(he,{ApplicationCommandComponent:()=>h,ApplicationCommandExtension:()=>b,BaseComponent:()=>x,CommandClient:()=>A,ComponentArgument:()=>O,ComponentArgumentDecorator:()=>G,ConverterComponent:()=>j,Extension:()=>N,ListenerComponent:()=>I,OwnerOnlyError:()=>U,Registry:()=>P,SubCommandGroup:()=>pt,SubCommandGroupChild:()=>X,TextCommandComponent:()=>w,TextCommandRestOption:()=>E,applicationCommand:()=>pe,argConverter:()=>S,command:()=>fe,createArgumentDecorator:()=>J,createCheckDecorator:()=>Xt,createComponentDecorator:()=>y,createComponentHook:()=>et,getComponent:()=>me,getComponentArgumentStore:()=>yt,getComponentStore:()=>Z,getModuleHookStore:()=>rt,listener:()=>K,mergeMethodDecorators:()=>ge,moduleHook:()=>le,option:()=>Ot,ownerOnly:()=>de,rest:()=>ue});module.exports=ce(he);T();ot();bt();var jt=require("discord.js");T();ot();var pt=class{constructor(t,e){this.options=t,this.guilds=e}command(t){let e=new h({type:jt.ApplicationCommandType.ChatInput,...t});return e.subcommandGroup=this,y(e)}createChild(t){return new X(t,this)}};c(pt,"SubCommandGroup");var X=class{constructor(t,e){this.options=t,this.parent=e}command(t){let e=new h({type:jt.ApplicationCommandType.ChatInput,...t});return e.subcommandGroupChild=this,y(e)}};c(X,"SubCommandGroupChild");vt();Ht();Rt();0&&(module.exports={ApplicationCommandComponent,ApplicationCommandExtension,BaseComponent,CommandClient,ComponentArgument,ComponentArgumentDecorator,ConverterComponent,Extension,ListenerComponent,OwnerOnlyError,Registry,SubCommandGroup,SubCommandGroupChild,TextCommandComponent,TextCommandRestOption,applicationCommand,argConverter,command,createArgumentDecorator,createCheckDecorator,createComponentDecorator,createComponentHook,getComponent,getComponentArgumentStore,getComponentStore,getModuleHookStore,listener,mergeMethodDecorators,moduleHook,option,ownerOnly,rest});
1
+ "use strict";var Eo=Object.create;var D=Object.defineProperty,Fo=Object.defineProperties,$o=Object.getOwnPropertyDescriptor,Oo=Object.getOwnPropertyDescriptors,Wo=Object.getOwnPropertyNames,rt=Object.getOwnPropertySymbols,Do=Object.getPrototypeOf,xt=Object.prototype.hasOwnProperty,io=Object.prototype.propertyIsEnumerable;var yt=(r,o,t)=>o in r?D(r,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[o]=t,S=(r,o)=>{for(var t in o||(o={}))xt.call(o,t)&&yt(r,t,o[t]);if(rt)for(var t of rt(o))io.call(o,t)&&yt(r,t,o[t]);return r},A=(r,o)=>Fo(r,Oo(o)),a=(r,o)=>D(r,"name",{value:o,configurable:!0});var ao=(r,o)=>{var t={};for(var e in r)xt.call(r,e)&&o.indexOf(e)<0&&(t[e]=r[e]);if(r!=null&&rt)for(var e of rt(r))o.indexOf(e)<0&&io.call(r,e)&&(t[e]=r[e]);return t};var h=(r,o)=>()=>(r&&(o=r(r=0)),o);var co=(r,o)=>{for(var t in o)D(r,t,{get:o[t],enumerable:!0})},mo=(r,o,t,e)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of Wo(o))!xt.call(r,n)&&n!==t&&D(r,n,{get:()=>o[n],enumerable:!(e=$o(o,n))||e.enumerable});return r};var v=(r,o,t)=>(t=r!=null?Eo(Do(r)):{},mo(o||!r||!r.__esModule?D(t,"default",{value:r,enumerable:!0}):t,r)),Po=r=>mo(D({},"__esModule",{value:!0}),r);var p=(r,o,t)=>(yt(r,typeof o!="symbol"?o+"":o,t),t);var d=(r,o,t)=>new Promise((e,n)=>{var s=i=>{try{l(t.next(i))}catch(u){n(u)}},m=i=>{try{l(t.throw(i))}catch(u){n(u)}},l=i=>i.done?e(i.value):Promise.resolve(i.value).then(s,m);l((t=t.apply(r,o)).next())});var K,Qo,bt,st,Ct,it,P=h(()=>{"use strict";K=Symbol(),Qo=Symbol(),bt=Symbol(),st=Symbol(),Ct=Symbol(),it=Symbol()});var po,wt,at,St=h(()=>{"use strict";po=require("discord.js");P();wt=a((r,o)=>{let t=Reflect.getMetadata(Ct,r,o);return t||(t=new po.Collection,Reflect.defineMetadata(Ct,t,r,o)),t},"getComponentHookStore"),at=a((r,o)=>(t,e)=>{let n=wt(t,e),s=n.get(r);s||(s=[],n.set(r,s)),s.unshift(o)},"createComponentHook")});var Mt,Q,No,M,kt,V,N=h(()=>{"use strict";Mt=require("discord.js");St();P();Q=a(r=>{let o=Reflect.getMetadata(K,r);return o||(o=new Mt.Collection,Reflect.defineMetadata(K,o,r)),o},"getComponentStore"),No=a((r,o)=>Q(r).get(o),"getComponent"),M=a(r=>(o,t)=>{r._init(Reflect.get(o,t),Reflect.getMetadata("design:paramtypes",o,t));let e=wt(o,t);r.hooks=e;let n=Q(o);kt(o,t).forEach((m,l)=>{var i;(i=r.argTypes.get(l))==null||i.decorators.push(m)}),n.set(t,r)},"createComponentDecorator"),kt=a((r,o)=>{let t=Reflect.getMetadata(K,r,o);return t||(t=new Mt.Collection,Reflect.defineMetadata(K,t,r,o)),t},"getComponentArgumentStore"),V=a(r=>o=>(t,e,n)=>{if(!e)return;let s=new r(o);kt(t,e).set(n,s)},"createArgumentDecorator")});var vt,X,Ht=h(()=>{"use strict";vt=class vt{constructor(o){p(this,"type");p(this,"decorators");this.type=o,this.decorators=[]}};a(vt,"ComponentArgument");X=vt});var lo,Gt,O,fo=h(()=>{"use strict";lo=v(require("lodash")),Gt=class Gt{constructor(o){p(this,"options");typeof o=="object"?this.options=lo.default.merge(this.defaultOptions(),o):this.options=o}defaultOptions(){return{}}};a(Gt,"ComponentArgumentDecorator");O=Gt});var Rt,C,qo,ct=h(()=>{"use strict";N();q();Rt=class Rt extends H{constructor(t){super();p(this,"options");p(this,"subcommandGroup");p(this,"subcommandGroupChild");this.options=t}};a(Rt,"ApplicationCommandComponent");C=Rt,qo=a(r=>M(new C(r)),"applicationCommand")});var It,E,uo,Tt=h(()=>{"use strict";L();It=class It extends O{};a(It,"ApplicationCommandOption");E=It,uo=V(E)});var jt,U,R,Lt=h(()=>{"use strict";q();N();jt=class jt extends H{constructor(t){super();p(this,"options");this.options=t}};a(jt,"ConverterComponent");U=jt,R=a(r=>M(new U(r)),"argConverter")});var go,mt,Uo,ho=h(()=>{"use strict";go=require("discord.js");P();mt=a(r=>{let o=Reflect.getMetadata(bt,r);return o||(o=new go.Collection,Reflect.defineMetadata(bt,o,r)),o},"getModuleHookStore"),Uo=a(r=>(o,t)=>{let e=mt(o),n=e.get(r);n||(n=[],e.set(r,n)),n.push(Reflect.get(o,t))},"moduleHook")});var pt=h(()=>{"use strict";ho();St()});var yo,At,W,Y,lt=h(()=>{"use strict";yo=v(require("lodash"));q();N();At=class At extends H{constructor(t){super();p(this,"options");this.options=yo.default.merge({emitter:"discord"},t)}};a(At,"ListenerComponent");W=At,Y=a(r=>M(new W(r)),"listener")});var B,xo,bo,Co,wo,Et,tt,Ft=h(()=>{"use strict";B=v(require("chalk")),xo=require("discord.js"),bo=v(require("lodash"));$t();pt();lt();P();Co=v(require("walk-sync")),wo=v(require("path")),Et=class Et{constructor(o,t){p(this,"client");p(this,"extensions");p(this,"emitters");p(this,"logger");p(this,"globalHooks");this.client=t,this.extensions=[],this.emitters=new xo.Collection,this.globalHooks={},this.logger=o.getSubLogger({name:B.default.green("Registry")})}addGlobalHook(o,t){let e=this.globalHooks[o];e||(e=[],this.globalHooks[o]=e),e.push(t)}getComponentsWithTypeGlobal(o){let t=[];for(let e of this.extensions)t.push(...this.getComponentsWithType(e,o));return t}getComponentsWithType(o,t){let e=Q(o);return Array.from(e.filter(n=>n.constructor===t).values())}registerEventListeners(o){let t=this.getComponentsWithType(o,W);for(let e of t){let n=this.emitters.get(e.options.emitter);if(n){let s=e.method.bind(o);Reflect.defineMetadata("bound",s,e),n.addListener(e.options.event,s)}}}unregisterEventListeners(o){let t=this.getComponentsWithType(o,W);for(let e of t){let n=this.emitters.get(e.options.emitter),s=Reflect.getMetadata("bound",e);n&&s&&n.removeListener(e.options.event,s)}}loadAllModulesInDirectory(o,t){return d(this,null,function*(){let e=[],n=(0,Co.default)(o).filter(s=>(s.endsWith(".ts")||s.endsWith(".js"))&&(!t||t.test(s)));for(let s of n){if(s.endsWith(".d.ts"))continue;let m=wo.default.join(o,s);e.push(...yield this.loadModulesAtPath(m))}return e})}loadModulesAtPath(o){return d(this,null,function*(){this.logger.info(`Loading module at path ${B.default.green(o)}`);let t=require.resolve(o),e=require(t);if(typeof e.setup!="function")throw new Error("Extension must have a setup function");let n=yield e.setup(this.client);return this.registerModules(n,t)})}registerModules(o,t){return d(this,null,function*(){let e=[];if(o instanceof Array)for(let n of o)yield this.registerModule(n),Reflect.defineMetadata(it,t,n),e.push(n);else yield this.registerModule(o),Reflect.defineMetadata(it,t,o),e.push(o);return e})}reloadModules(){return d(this,null,function*(){let o=[],t=new Set,e=[...this.extensions];for(let n of e){let s=Reflect.getMetadata(it,n);s&&(this.logger.info(`Unloading module: ${B.default.green(n.constructor.name)}`),t.add(s),yield this.unregisterModule(n),delete require.cache[require.resolve(s)])}for(let n of t)try{let s=yield this.loadModulesAtPath(n);o.push({file:n,result:!0,extensions:s})}catch(s){o.push({file:n,result:!1,error:s})}return o})}registerModule(o){return d(this,null,function*(){Reflect.defineMetadata(st,this.client,o),this.registerEventListeners(o),yield this.runModuleHook(o,"load"),this.extensions.push(o),this.logger.info(`Module registered: ${B.default.green(o.constructor.name)}`)})}unregisterModule(o){return d(this,null,function*(){this.unregisterEventListeners(o),yield this.runModuleHook(o,"unload"),bo.default.remove(this.extensions,t=>t===o),this.logger.info(`Module unregistered: ${B.default.green(o.constructor.name)}`)})}runModuleHook(o,t,...e){let s=mt(o).get(t);if(s)for(let m of s)m.call(o,...e)}registerEventEmitter(o,t){this.emitters.set(o,t)}};a(Et,"Registry");tt=Et});var Ot=h(()=>{"use strict";Ft();ft()});var So,Mo,Wt,ot,Dt=h(()=>{"use strict";So=v(require("chalk")),Mo=require("discord.js");Lt();Ot();Wt=class Wt{constructor(){p(this,"_logger")}get commandClient(){return z.getFromModule(this)}get client(){return this.commandClient.discord}get logger(){return this._logger||(this._logger=this.commandClient.logger.getSubLogger({name:So.default.green(`${this.constructor.name}`)})),this._logger}convertArguments(o,t,e,n){return d(this,null,function*(){let s=new Mo.Collection;for(let m of this.commandClient.registry.extensions)for(let l of this.commandClient.registry.getComponentsWithType(m,U))l.options.component==o&&s.set(l.options.type,{component:l,ext:m});for(let[m,l]of e){let i=s.get(l.type);if(!i){t[m]=void 0;continue}let u=yield n(l,m,i.component);t[m]=yield i.component.execute(i.ext,u)}})}};a(Wt,"Extension");ot=Wt});var ko,Pt,_,Nt=h(()=>{"use strict";ko=v(require("chalk"));Dt();Pt=class Pt extends ot{get logger(){return this._logger||(this._logger=this.commandClient.ctsLogger.getSubLogger({name:ko.default.green(`${this.constructor.name}`)})),this._logger}};a(Pt,"CTSExtension");_=Pt});function et(r,o,t,e){var n=arguments.length,s=n<3?o:e===null?e=Object.getOwnPropertyDescriptor(o,t):e,m;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,o,t,e);else for(var l=r.length-1;l>=0;l--)(m=r[l])&&(s=(n<3?m(s):n>3?m(o,t,s):m(o,t))||s);return n>3&&s&&Object.defineProperty(o,t,s),s}function T(r,o){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,o)}var I,x,k,qt,G,Ut=h(()=>{"use strict";I=v(require("chalk")),x=require("discord.js"),k=require("discord-api-types/v10");ct();Tt();L();L();Nt();a(et,"_ts_decorate");a(T,"_ts_metadata");qt=class qt extends _{constructor(t){super();p(this,"config");p(this,"unmanagedCommands");this.config=t,this.unmanagedCommands=[]}registerUnmanagedCommand(t){this.unmanagedCommands.push(t)}interactionCreate(t){return d(this,null,function*(){var e;try{if(!t.isCommand())return;let n=null,s=null,m=this.commandClient.registry.extensions,l=null,i=null;t.isChatInputCommand()&&(l=t.options.getSubcommand(!1),i=t.options.getSubcommandGroup(!1));t:for(let u of m){let f=this.commandClient.registry.getComponentsWithType(u,C);if(l){for(let c of f)if(!(!c.subcommandGroup&&!c.subcommandGroupChild)){if(c.subcommandGroupChild&&c.subcommandGroupChild.parent.options.name===t.commandName&&c.subcommandGroupChild.options.name===i&&c.options.name===l){s=u,n=c;break t}if(c.subcommandGroup&&!i&&c.subcommandGroup.options.name===t.commandName&&c.options.name===l){s=u,n=c;break t}}}else for(let c of f)if(c.options.name===t.commandName){s=u,n=c;break t}}if(n&&s){let u=[];yield this.convertArguments(C,u,n.argTypes,()=>[t]);for(let[f,c]of n.argTypes){let g=null;for(let y of c.decorators)if(y instanceof E){if([k.ApplicationCommandOptionType.Subcommand,k.ApplicationCommandOptionType.SubcommandGroup].includes(y.options.type)&&t.isChatInputCommand()){if(y.options.type===k.ApplicationCommandOptionType.Subcommand){g=t.options.getSubcommand()===y.options.name;break}if(y.options.type===k.ApplicationCommandOptionType.SubcommandGroup){g=t.options.getSubcommandGroup()===y.options.name;break}}g=(e=t.options.get(y.options.name,!1))==null?void 0:e.value;break}g&&(u[f]=g)}try{yield n.executeGlobalHook(s,"beforeApplicationCommandCall",[t]),yield n.execute(s,u,[t])}finally{yield n.executeGlobalHook(s,"afterApplicationCommandCall",[t])}}}catch(n){this.commandClient.emit("applicationCommandInvokeError",n,t)}})}sync(){return d(this,null,function*(){let t=this.commandClient;this.logger.info("Trying to sync commands...");let e=[],n=new x.Collection,s=new x.Collection;for(let i of t.registry.getComponentsWithTypeGlobal(C)){if(i.subcommandGroup){let f=s.get(i.subcommandGroup.options.name);if(!f){if(f=A(S({},i.subcommandGroup.options),{type:k.ApplicationCommandType.ChatInput}),i.subcommandGroup.guilds)for(let g of i.subcommandGroup.guilds){let y=n.get(g);y||(y=[],n.set(g,y))}else e.push(f);s.set(i.subcommandGroup.options.name,f)}f.options||(f.options=[]);let c=[];for(let[,g]of i.argTypes){let y=g.decorators.find(b=>b.constructor===E);y&&c.push(y.options)}f.options.push(A(S({},i.options),{type:k.ApplicationCommandOptionType.Subcommand,options:c}));continue}else if(i.subcommandGroupChild){let f=i.subcommandGroupChild.parent,c=s.get(f.options.name);if(!c){if(c=A(S({},f.options),{type:k.ApplicationCommandType.ChatInput}),f.guilds)for(let b of f.guilds){let w=n.get(b);w||(w=[],n.set(b,w))}else e.push(c);s.set(f.options.name,c)}c.options||(c.options=[]);let g=c.options.find(b=>{var w;return b.name===((w=i.subcommandGroupChild)==null?void 0:w.options.name)});g||(g=A(S({},i.subcommandGroupChild.options),{type:k.ApplicationCommandOptionType.SubcommandGroup}),c.options.push(g)),g.options||(g.options=[]);let y=[];for(let[,b]of i.argTypes){let w=b.decorators.find(Ao=>Ao.constructor===E);w&&y.push(w.options)}g.options.push(A(S({},i.options),{type:k.ApplicationCommandOptionType.Subcommand,options:y}));continue}let u=S({},i.options);if(u.type===k.ApplicationCommandType.ChatInput){u.options=[];for(let[,f]of i.argTypes){let c=f.decorators.find(g=>g.constructor===E);c&&u.options.push(c.options)}}if(yield i.executeHook(this,"beforeSync",[u,i]),i.options.guilds){for(let f of i.options.guilds){let c=n.get(f);c||(c=[],n.set(f,c)),c.push(u)}continue}e.push(u)}for(let m of this.unmanagedCommands){let l=m,{guilds:i}=l,u=ao(l,["guilds"]);if(i)for(let f of i){let c=n.get(f);c||(c=[],n.set(f,c)),c.push(u)}else e.push(u)}if(this.config.guilds){for(let i of this.config.guilds){let u=n.get(i);u||(u=[],n.set(i,u)),u.push(...e)}e=[]}if(n.size)for(let[i,u]of n)try{let f=yield this.client.guilds.fetch(i);yield f.fetch(),this.logger.info(`Processing ${I.default.green(u.length)} commands(${u.map(c=>I.default.blue(c.name)).join(", ")}) for guild ${I.default.green(f.name)}(${I.default.blue(f.id)})`),yield f.commands.set(u),this.logger.info(`Successfully registered commands for guild ${I.default.green(f.name)}(${I.default.blue(f.id)})`)}catch(f){this.logger.error(`Failed to register commands to guild ${I.default.green(i)}: ${f.message}`)}if(e.length)try{this.logger.info(`Processing ${I.default.green(e.length)} commands(${e.map(i=>I.default.blue(i.name)).join(", ")}) for application scope...`),this.client.application?(yield this.client.application.commands.set(e),this.logger.info("Successfully registered commands.")):this.logger.error("Client#application is not yet initialized.")}catch(i){this.logger.error(`Failed to register commands to global: ${i.message}`)}})}chatInteraction(t){return d(this,null,function*(){return t})}messageInteraction(t){return d(this,null,function*(){return t})}userInteraction(t){return d(this,null,function*(){return t})}commandInteraction(t){return d(this,null,function*(){return t})}};a(qt,"ApplicationCommandExtension");G=qt;et([Y({event:"interactionCreate"}),T("design:type",Function),T("design:paramtypes",[typeof Interaction=="undefined"?Object:Interaction])],G.prototype,"interactionCreate",null);et([R({component:C,parameterless:!0,type:x.ChatInputCommandInteraction}),T("design:type",Function),T("design:paramtypes",[typeof x.ChatInputCommandInteraction=="undefined"?Object:x.ChatInputCommandInteraction])],G.prototype,"chatInteraction",null);et([R({component:C,parameterless:!0,type:x.MessageContextMenuCommandInteraction}),T("design:type",Function),T("design:paramtypes",[typeof x.MessageContextMenuCommandInteraction=="undefined"?Object:x.MessageContextMenuCommandInteraction])],G.prototype,"messageInteraction",null);et([R({component:C,parameterless:!0,type:x.UserContextMenuCommandInteraction}),T("design:type",Function),T("design:paramtypes",[typeof x.UserContextMenuCommandInteraction=="undefined"?Object:x.UserContextMenuCommandInteraction])],G.prototype,"userInteraction",null);et([R({component:C,parameterless:!0,type:x.CommandInteraction}),T("design:type",Function),T("design:paramtypes",[typeof x.UserContextMenuCommandInteraction=="undefined"?Object:x.UserContextMenuCommandInteraction])],G.prototype,"commandInteraction",null)});var Bt,j,Bo,zt=h(()=>{"use strict";N();q();Bt=class Bt extends H{constructor(t){super();p(this,"options");this.options=t}};a(Bt,"TextCommandComponent");j=Bt,Bo=a(r=>M(new j(r)),"command")});var _t,Z,zo,Zt=h(()=>{"use strict";L();L();_t=class _t extends O{};a(_t,"TextCommandRestOption");Z=_t,zo=V(Z)});function ut(r,o,t,e){var n=arguments.length,s=n<3?o:e===null?e=Object.getOwnPropertyDescriptor(o,t):e,m;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,o,t,e);else for(var l=r.length-1;l>=0;l--)(m=r[l])&&(s=(n<3?m(s):n>3?m(o,t,s):m(o,t))||s);return n>3&&s&&Object.defineProperty(o,t,s),s}function F(r,o){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,o)}var J,Jt,$,vo=h(()=>{"use strict";lt();J=require("discord.js");Nt();zt();Zt();L();a(ut,"_ts_decorate");a(F,"_ts_metadata");Jt=class Jt extends _{constructor(t){super();p(this,"config");this.config=t}processPrefix(t){return d(this,null,function*(){let e=t.content,n=this.config.prefix;if(typeof n=="function"&&(n=yield n(t)),typeof n=="string")return e.startsWith(n)?n.length:null;if(n instanceof Array){let s=n.find(m=>e.startsWith(m));return s?s.length:null}return null})}messageCreate(t){return d(this,null,function*(){try{let e=yield this.processPrefix(t);if(e===null)return;let n=t.content.slice(e),s=[],m=new Map;for(let g of this.commandClient.registry.extensions)for(let y of this.commandClient.registry.getComponentsWithType(g,j))s.push(y),m.set(y,g);let l=0,i=s.find(g=>{let y=[g.options.name];g.options.aliases&&y.push(...g.options.aliases);for(let b of y)if(n.startsWith(b))return n.length===b.length?(l=b.length,!0):(l=b.length,n.startsWith(b+" "));return!1});if(!i)return;let u=m.get(i);if(!u)return;t.command=i;let f=[],c=n.slice(l+1).split(/ /g);yield this.convertArguments(j,f,i.argTypes,(g,y,b)=>d(this,null,function*(){if(b.options.parameterless)return[t];if(g.decorators.find(w=>w.constructor===Z)){let w=c.join(" ");return c=[],[w,t]}return[c.shift(),t]})),yield i.execute(u,f,[t])}catch(e){this.commandClient.emit("textCommandInvokeError",e,t)}})}mesage(t){return d(this,null,function*(){return t})}str(t){return d(this,null,function*(){return t})}num(t){return d(this,null,function*(){return Number(t)})}};a(Jt,"TextCommandExtension");$=Jt;ut([Y({event:"messageCreate",emitter:"discord"}),F("design:type",Function),F("design:paramtypes",[typeof J.Message=="undefined"?Object:J.Message])],$.prototype,"messageCreate",null);ut([R({component:j,type:J.Message,parameterless:!0}),F("design:type",Function),F("design:paramtypes",[typeof J.Message=="undefined"?Object:J.Message])],$.prototype,"mesage",null);ut([R({component:j,type:String}),F("design:type",Function),F("design:paramtypes",[String])],$.prototype,"str",null);ut([R({component:j,type:Number}),F("design:type",Function),F("design:paramtypes",[String])],$.prototype,"num",null)});var Qt={};co(Qt,{CommandClient:()=>z});var Kt,dt,Ho,Go,Vt,z,ft=h(()=>{"use strict";Kt=v(require("chalk")),dt=require("discord.js"),Ho=v(require("events")),Go=require("tslog");Ut();vo();P();Ft();Vt=class Vt extends Ho.default{constructor(t,e=new Go.Logger({prettyLogTimeZone:"local"}),n={}){super();p(this,"discord");p(this,"logger");p(this,"ctsLogger");p(this,"registry");p(this,"owners");this.discord=t,this.logger=e,this.owners=new Set,this.ctsLogger=e.getSubLogger(A(S({},n),{name:"command.ts"})),this.registry=new tt(this.ctsLogger,this),this.registry.registerEventEmitter("cts",this),this.registry.registerEventEmitter("discord",this.discord)}isOwner(t){return d(this,null,function*(){return this.owners.has(t.id)})}fetchOwners(){return d(this,null,function*(){if(!this.discord.application)throw new Error("The client is not logged in.");this.ctsLogger.info("Fetching owners..."),yield this.discord.application.fetch();let t=this.discord.application.owner;if(!t)throw new Error("Cannot find application owner");let e=[];if(t instanceof dt.User)this.owners.add(t.id),e.push(t.tag);else if(t instanceof dt.Team)for(let[n,s]of t.members)this.owners.add(n),e.push(s.user.tag);this.ctsLogger.info(`Fetched ${Kt.default.green(e.length)} owners(${e.map(n=>Kt.default.blue(n)).join(", ")})`)})}enableApplicationCommandsExtension(t){return d(this,null,function*(){yield this.registry.registerModule(new G(t)),this.ctsLogger.info("Application command extension enabled.")})}enableTextCommandsExtension(t){return d(this,null,function*(){yield this.registry.registerModule(new $(t)),this.ctsLogger.info("Text command extension enabled.")})}getApplicationCommandsExtension(){return this.registry.extensions.find(t=>t.constructor===G)}static getFromModule(t){return Reflect.getMetadata(st,t)}};a(Vt,"CommandClient");z=Vt});var Xt,Yt,H,q=h(()=>{"use strict";Xt=require("discord.js");Ht();Yt=class Yt{constructor(){p(this,"method");p(this,"hooks",new Xt.Collection);p(this,"argTypes",new Xt.Collection)}_init(o,t){this.method=o;for(let e=0;e<t.length;e++){let n=t[e];this.argTypes.set(e,new X(n))}}executeGlobalHook(o,t,e){return d(this,null,function*(){let{CommandClient:n}=yield Promise.resolve().then(()=>(ft(),Qt)),s=n.getFromModule(o),m=s.registry.globalHooks[t];if(m)for(let l of m)yield l.call(null,s,...e)})}executeHook(o,t,e){return d(this,null,function*(){let n=this.hooks.get(t);if(!n)return;let{CommandClient:s}=yield Promise.resolve().then(()=>(ft(),Qt)),m=s.getFromModule(o),l=m.registry.globalHooks[t];l&&n.unshift(...l);for(let i of n)yield i.call(null,m,...e)})}execute(n,s){return d(this,arguments,function*(o,t,e=t){yield this.executeHook(o,"beforeCall",e);let m;try{m=yield this.method.call(o,...t),yield this.executeHook(o,"afterCall",[...e,m])}catch(l){throw yield this.executeHook(o,"invokeError",[l,...e]),l}return m})}};a(Yt,"BaseComponent");H=Yt});var Mn,$t=h(()=>{"use strict";Mn=require("reflect-metadata");N();Ht();fo();q()});var to,nt,oo=h(()=>{"use strict";to=class to{};a(to,"OwnerOnlyError");nt=to});var gt,Ro,_o,Io=h(()=>{"use strict";gt=require("discord.js");pt();oo();Ro=a(r=>at("beforeCall",r),"createCheckDecorator"),_o=Ro((r,o)=>d(void 0,null,function*(){let t=!1;if(o instanceof gt.BaseInteraction?t=yield r.isOwner(o.user):o instanceof gt.Message&&(t=yield r.isOwner(o.author)),!t)throw new nt}))});var Zo,To=h(()=>{"use strict";Zo=a(r=>(o,t,e)=>{for(let n of r)n(o,t,e)},"mergeMethodDecorators")});var jo=h(()=>{"use strict";Io();oo();To()});var Lo=h(()=>{"use strict";Dt()});var L=h(()=>{"use strict";$t();pt();Lt();jo();lt();Ot();Lo()});var Jo={};co(Jo,{ApplicationCommandComponent:()=>C,ApplicationCommandExtension:()=>G,BaseComponent:()=>H,CommandClient:()=>z,ComponentArgument:()=>X,ComponentArgumentDecorator:()=>O,ConverterComponent:()=>U,Extension:()=>ot,ListenerComponent:()=>W,OwnerOnlyError:()=>nt,Registry:()=>tt,SubCommandGroup:()=>eo,SubCommandGroupChild:()=>ht,TextCommandComponent:()=>j,TextCommandRestOption:()=>Z,applicationCommand:()=>qo,argConverter:()=>R,command:()=>Bo,createArgumentDecorator:()=>V,createCheckDecorator:()=>Ro,createComponentDecorator:()=>M,createComponentHook:()=>at,getComponent:()=>No,getComponentArgumentStore:()=>kt,getComponentStore:()=>Q,getModuleHookStore:()=>mt,listener:()=>Y,mergeMethodDecorators:()=>Zo,moduleHook:()=>Uo,option:()=>uo,ownerOnly:()=>_o,rest:()=>zo});module.exports=Po(Jo);L();ct();Tt();var no=require("discord.js");L();ct();var ro=class ro{constructor(o,t){p(this,"options");p(this,"guilds");this.options=o,this.guilds=t}command(o){let t=new C(S({type:no.ApplicationCommandType.ChatInput},o));return t.subcommandGroup=this,M(t)}createChild(o){return new ht(o,this)}};a(ro,"SubCommandGroup");var eo=ro,so=class so{constructor(o,t){p(this,"options");p(this,"parent");this.options=o,this.parent=t}command(o){let t=new C(S({type:no.ApplicationCommandType.ChatInput},o));return t.subcommandGroupChild=this,M(t)}};a(so,"SubCommandGroupChild");var ht=so;Ut();zt();Zt();0&&(module.exports={ApplicationCommandComponent,ApplicationCommandExtension,BaseComponent,CommandClient,ComponentArgument,ComponentArgumentDecorator,ConverterComponent,Extension,ListenerComponent,OwnerOnlyError,Registry,SubCommandGroup,SubCommandGroupChild,TextCommandComponent,TextCommandRestOption,applicationCommand,argConverter,command,createArgumentDecorator,createCheckDecorator,createComponentDecorator,createComponentHook,getComponent,getComponentArgumentStore,getComponentStore,getModuleHookStore,listener,mergeMethodDecorators,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/listener/index.ts","../src/core/converter/index.ts","../src/core/hooks/moduleHook.ts","../src/core/hooks/index.ts","../src/core/structures/Registry.ts","../src/core/structures/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/decorators.ts","../src/core/utils/index.ts","../src/core/extensions/index.ts","../src/core/index.ts","../src/index.ts","../src/applicationCommand/index.ts","../src/applicationCommand/group.ts","../src/textCommand/index.ts"],"sourcesContent":["export const ComponentStoreSymbol = Symbol()\nexport const ComponentArgStoreSymbol = Symbol()\nexport const ModuleHookStoreSymbol = Symbol()\nexport const CommandClientSymbol = Symbol()\nexport const ComponentHookSymbol = Symbol()\nexport const FilePathSymbol = Symbol()\n","import { Collection } from 'discord.js'\nimport { ComponentHookSymbol } from '../symbols'\n\nexport type ComponentHookFn<T extends unknown[]> = (...args: T) => void | Promise<void>\n\nexport type ComponentHookStore = Collection<string, ComponentHookFn<unknown[]>[]>\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 = <T extends unknown[]>(name: string, fn: ComponentHookFn<T>): 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 // @ts-expect-error unknown type\n hooks.unshift(fn)\n }\n}\n","import { Collection } from 'discord.js'\nimport type { ComponentHookStore } from '../hooks'\nimport { getComponentHookStore } from '../hooks/componentHook'\nimport { ComponentStoreSymbol } from '../symbols'\nimport type { BaseComponent } from './BaseComponent'\nimport type { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport type ComponentStore = Collection<string | symbol, BaseComponent>\nexport type 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 = (component: BaseComponent): MethodDecorator => {\n return (target, key) => {\n component._init(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\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 const arg: ComponentArgumentDecorator<Options> = new type(options)\n\n const store = getComponentArgumentStore(target, key)\n\n store.set(idx, arg)\n }\n }\n}\n","import type { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport class ComponentArgument {\n decorators: ComponentArgumentDecorator[] = []\n\n constructor(public type: unknown) {}\n}\n","import _ 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","import type { ApplicationCommandType, ChatInputApplicationCommandData, MessageApplicationCommandData, Snowflake, UserApplicationCommandData } from 'discord.js'\nimport { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\nimport type { SubCommandGroup, SubCommandGroupChild } from './group'\n\ntype Options = (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & {\n type: ApplicationCommandType\n guilds?: Snowflake[]\n}\n\nexport class ApplicationCommandComponent extends BaseComponent {\n options: Options\n\n subcommandGroup?: SubCommandGroup\n subcommandGroupChild?: SubCommandGroupChild\n\n constructor(options: UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) {\n super()\n\n this.options = options as Options\n }\n}\n\nexport const applicationCommand = (options: Options) => createComponentDecorator(new ApplicationCommandComponent(options))\n\nexport type { Options as ApplicationCommandComponentOptions }\n","import type { ApplicationCommandOptionData } from 'discord.js'\nimport { createArgumentDecorator, ComponentArgumentDecorator } from '../core'\n\ntype Options = ApplicationCommandOptionData\n\nexport class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}\n\nexport const option = createArgumentDecorator(ApplicationCommandOption)\n","import _ from 'lodash'\nimport { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\ntype Options = { emitter: string; event: string }\n\ntype OptionsArg = { emitter?: string; event: string }\n\nexport class ListenerComponent extends BaseComponent {\n options: Options\n\n constructor(options: OptionsArg) {\n super()\n\n this.options = _.merge({ emitter: 'discord' }, options)\n }\n}\n\nexport const listener = (options: OptionsArg) => createComponentDecorator(new ListenerComponent(options))\n\nexport { Options as ListenerOptions, OptionsArg as ListenerOptionsArg }\n","import { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\ntype Options<T> = { component: unknown; type: T; parameterless: boolean }\n\ntype OptionsArg<T> = Omit<Options<T>, 'parameterless'> & { parameterless?: boolean }\n\nexport class ConverterComponent<T> extends BaseComponent {\n options: Options<T>\n\n constructor(options: OptionsArg<T>) {\n super()\n this.options = options as Options<T>\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const argConverter = <T>(options: OptionsArg<T>) => createComponentDecorator(new ConverterComponent(options))\n\nexport { Options as ArgumentConvertOptions, OptionsArg as ArgumentConvertOptionsArg }\n","import { Collection } from 'discord.js'\nimport { ModuleHookStoreSymbol } from '../symbols'\nimport type { ComponentHookFn } from './componentHook'\n\nexport type ModuleHookStore = Collection<string, ComponentHookFn<unknown[]>[]>\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","export * from './moduleHook'\nexport { createComponentHook, type ComponentHookFn } from './componentHook'\nexport type { ComponentHookStore } from './componentHook'\n","import chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport type EventEmitter from 'events'\nimport _ from 'lodash'\nimport type { Logger } from 'tslog'\nimport { getComponentStore } from '../components'\nimport { getModuleHookStore } from '../hooks'\nimport { ListenerComponent } from '../listener'\nimport { CommandClientSymbol, FilePathSymbol } from '../symbols'\nimport type { CommandClient } from './CommandClient'\nimport walkSync from 'walk-sync'\nimport path from 'path'\nimport type { ComponentHookFn } from '../hooks/componentHook'\n\nexport class Registry {\n extensions: object[] = []\n\n emitters: Collection<string, EventEmitter> = new Collection()\n\n logger: Logger<unknown>\n\n globalHooks: Record<string, ComponentHookFn<unknown[]>[]> = {}\n\n constructor(logger: Logger<unknown>, public client: CommandClient) {\n this.logger = logger.getSubLogger({\n name: chalk.green('Registry'),\n })\n }\n\n addGlobalHook(name: string, fn: ComponentHookFn<unknown[]>) {\n let hooks = this.globalHooks[name]\n\n if (!hooks) {\n hooks = []\n this.globalHooks[name] = hooks\n }\n\n hooks.push(fn)\n }\n\n getComponentsWithTypeGlobal<T>(type: unknown): T[] {\n const result: T[] = []\n\n for (const ext of this.extensions) {\n result.push(...this.getComponentsWithType<T>(ext, type))\n }\n\n return result\n }\n\n getComponentsWithType<T>(ext: object, type: unknown): T[] {\n const componentStore = getComponentStore(ext)\n\n return Array.from(componentStore.filter((x) => (x.constructor as unknown) === type).values() as Iterable<T>)\n }\n\n registerEventListeners(ext: object) {\n const listeners = this.getComponentsWithType<ListenerComponent>(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<ListenerComponent>(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, pattern?: RegExp): Promise<object[]> {\n const results: object[] = []\n\n const files = walkSync(dir).filter((x) => (x.endsWith('.ts') || x.endsWith('.js')) && (!pattern || pattern.test(x)))\n\n for (const file of files) {\n if (file.endsWith('.d.ts')) continue\n const p = path.join(dir, file)\n results.push(...(await this.loadModulesAtPath(p)))\n }\n\n return results\n }\n\n async loadModulesAtPath(file: string) {\n this.logger.info(`Loading module at path ${chalk.green(file)}`)\n\n const p = require.resolve(file)\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require(p)\n\n if (typeof mod.setup !== 'function') throw new Error('Extension must have a setup function')\n\n const modules = await mod.setup(this.client)\n\n return this.registerModules(modules, p)\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; extensions?: object[] }[] = []\n const paths = new Set<string>()\n const extensions = [...this.extensions]\n for (const module of extensions) {\n const file = Reflect.getMetadata(FilePathSymbol, module)\n if (!file) continue\n\n this.logger.info(`Unloading module: ${chalk.green(module.constructor.name)}`)\n\n paths.add(file)\n\n await this.unregisterModule(module)\n\n delete require.cache[require.resolve(file)]\n }\n\n for (const path of paths) {\n try {\n const extensions = await this.loadModulesAtPath(path)\n\n result.push({\n file: path,\n result: true,\n extensions,\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","export * from './Registry'\nexport * from './CommandClient'\n","import chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport type { Logger } from 'tslog'\nimport type { 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<unknown>\n\n protected get logger() {\n if (!this._logger) this._logger = this.commandClient.logger.getSubLogger({ name: chalk.green(`${this.constructor.name}`) })\n return this._logger\n }\n\n protected async convertArguments(\n component: unknown,\n argList: unknown[],\n args: Collection<number, ComponentArgument>,\n getConverterArgs: (arg: ComponentArgument, index: number, converter: ConverterComponent<unknown>) => unknown[] | Promise<unknown[]>,\n ) {\n const items = new Collection<unknown, { ext: object; component: ConverterComponent<unknown> }>()\n\n for (const extension of this.commandClient.registry.extensions) {\n for (const converter of this.commandClient.registry.getComponentsWithType<ConverterComponent<unknown>>(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","import 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.getSubLogger({ name: chalk.green(`${this.constructor.name}`) })\n return this._logger\n }\n}\n","import chalk from 'chalk'\nimport type { ApplicationCommandData, ApplicationCommandSubCommandData, ApplicationCommandSubGroupData, ChatInputApplicationCommandData, Interaction, Snowflake } from 'discord.js'\nimport {\n ApplicationCommandOptionType,\n ApplicationCommandType,\n ChatInputCommandInteraction,\n Collection,\n CommandInteraction,\n InteractionType,\n MessageContextMenuCommandInteraction,\n UserContextMenuCommandInteraction,\n} from 'discord.js'\nimport { ApplicationCommandComponent } from './ApplicationCommand'\nimport { ApplicationCommandOption } from './ApplicationCommandOption'\nimport { listener } from '../core/listener'\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 unmanagedCommands: (ApplicationCommandData & { guilds?: Snowflake[] })[] = []\n\n registerUnmanagedCommand(command: ApplicationCommandData & { guilds?: Snowflake[] }) {\n this.unmanagedCommands.push(command)\n }\n\n @listener({ event: 'interactionCreate' })\n async interactionCreate(i: Interaction) {\n try {\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 let subcommand: string | null = null\n let subcommandGroup: string | null = null\n\n if (i.commandType === ApplicationCommandType.ChatInput) {\n subcommand = i.options.getSubcommand(false)\n subcommandGroup = i.options.getSubcommandGroup(false)\n }\n\n extLoop: for (const extension of extensions) {\n const components = this.commandClient.registry.getComponentsWithType<ApplicationCommandComponent>(extension, ApplicationCommandComponent)\n\n if (subcommand) {\n for (const command of components) {\n if (!command.subcommandGroup && !command.subcommandGroupChild) continue\n\n if (\n command.subcommandGroupChild &&\n command.subcommandGroupChild.parent.options.name === i.commandName &&\n command.subcommandGroupChild.options.name === subcommandGroup &&\n command.options.name === subcommand\n ) {\n ext = extension\n cmd = command\n break extLoop\n }\n if (command.subcommandGroup && !subcommandGroup && command.subcommandGroup.options.name === i.commandName && command.options.name === subcommand) {\n ext = extension\n cmd = command\n break extLoop\n }\n }\n } else {\n for (const command of components) {\n if (command.options.name === i.commandName) {\n ext = extension\n cmd = command\n break extLoop\n }\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.executeGlobalHook(ext, 'beforeApplicationCommandCall', [i])\n await cmd.execute(ext, argList, [i])\n } finally {\n await cmd.executeGlobalHook(ext, 'afterApplicationCommandCall', [i])\n }\n }\n } catch (e) {\n this.commandClient.emit('applicationCommandInvokeError', e, i)\n }\n }\n\n async sync() {\n const client = this.commandClient\n\n this.logger.info('Trying to sync commands...')\n\n let commands: ApplicationCommandData[] = []\n\n const guildCommands = new Collection<Snowflake, ApplicationCommandData[]>()\n\n const subcommandGroups = new Collection<string, ChatInputApplicationCommandData>()\n\n for (const command of client.registry.getComponentsWithTypeGlobal<ApplicationCommandComponent>(ApplicationCommandComponent)) {\n if (command.subcommandGroup) {\n let group = subcommandGroups.get(command.subcommandGroup.options.name)\n\n if (!group) {\n group = {\n ...command.subcommandGroup.options,\n type: ApplicationCommandType.ChatInput,\n }\n\n if (command.subcommandGroup.guilds) {\n for (const guild of command.subcommandGroup.guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n }\n } else {\n commands.push(group)\n }\n\n subcommandGroups.set(command.subcommandGroup.options.name, group)\n }\n\n if (!group.options) group.options = []\n\n const 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 options.push(option.options)\n }\n }\n\n group.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as ApplicationCommandSubCommandData)\n\n continue\n } else if (command.subcommandGroupChild) {\n const parent = command.subcommandGroupChild.parent\n let group = subcommandGroups.get(parent.options.name)\n\n if (!group) {\n group = {\n ...parent.options,\n type: ApplicationCommandType.ChatInput,\n }\n\n if (parent.guilds) {\n for (const guild of parent.guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n }\n } else {\n commands.push(group)\n }\n\n subcommandGroups.set(parent.options.name, group)\n }\n\n if (!group.options) group.options = []\n\n let child = group.options.find((x) => x.name === command.subcommandGroupChild?.options.name) as ApplicationCommandSubGroupData\n\n if (!child) {\n child = { ...(command.subcommandGroupChild.options as Omit<ApplicationCommandSubGroupData, 'type'>), type: ApplicationCommandOptionType.SubcommandGroup }\n group.options.push(child)\n }\n\n if (!child.options) child.options = []\n\n const 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 options.push(option.options)\n }\n }\n\n child.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as ApplicationCommandSubCommandData)\n\n continue\n }\n\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 await command.executeHook(this, 'beforeSync', [cmd, command])\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 commands.push(cmd)\n }\n\n for (const { guilds, ...rest } of this.unmanagedCommands) {\n if (guilds) {\n for (const guild of guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n commands.push(rest)\n }\n continue\n } else {\n commands.push(rest)\n }\n }\n\n if (this.config.guilds) {\n for (const guild of this.config.guilds) {\n let g = guildCommands.get(guild)\n if (!g) {\n g = []\n guildCommands.set(guild, g)\n }\n g.push(...commands)\n }\n\n commands = []\n }\n\n if (guildCommands.size) {\n for (const [guild, commands] of guildCommands) {\n try {\n const g = await this.client.guilds.fetch(guild)\n await g.fetch()\n this.logger.info(\n `Processing ${chalk.green(commands.length)} commands(${commands.map((x) => chalk.blue(x.name)).join(', ')}) for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`,\n )\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(`Processing ${chalk.green(commands.length)} commands(${commands.map((x) => chalk.blue(x.name)).join(', ')}) for application scope...`)\n\n if (this.client.application) {\n await this.client.application.commands.set(commands)\n\n this.logger.info('Successfully registered commands.')\n } else {\n this.logger.error('Client#application is not yet initialized.')\n }\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 @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: CommandInteraction,\n })\n async commandInteraction(i: UserContextMenuCommandInteraction) {\n return i\n }\n}\n","import { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\n\nexport type TextCommandOptions = {\n name: string\n aliases?: string[]\n description?: string\n}\n\nexport class TextCommandComponent extends BaseComponent {\n constructor(public options: TextCommandOptions) {\n super()\n }\n}\n\nexport const command = (options: TextCommandOptions) => createComponentDecorator(new TextCommandComponent(options))\n","import { ComponentArgumentDecorator } from '../core'\nimport { createArgumentDecorator } from '../core'\n\nexport class TextCommandRestOption extends ComponentArgumentDecorator<void> {}\n\nexport const rest = createArgumentDecorator(TextCommandRestOption)\n","import { 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\ndeclare module 'discord.js' {\n interface Message {\n command: TextCommandComponent\n }\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 try {\n const startIndex = await this.processPrefix(msg)\n\n if (startIndex === null) 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<TextCommandComponent>(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 msg.command = command\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 } catch (e) {\n this.commandClient.emit('textCommandInvokeError', e, msg)\n }\n }\n\n @argConverter({\n component: TextCommandComponent,\n type: Message,\n parameterless: true,\n })\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","import chalk from 'chalk'\nimport type { Client, Snowflake } from 'discord.js'\nimport { Team, User } from 'discord.js'\nimport EventEmitter from 'events'\nimport type { ISettingsParam } from 'tslog'\nimport { Logger } from 'tslog'\nimport type { ApplicationCommandExtensionConfig } from '../../applicationCommand/ApplicationCommandExtension'\nimport { ApplicationCommandExtension } from '../../applicationCommand/ApplicationCommandExtension'\nimport type { TextCommandConfig } from '../../textCommand'\nimport { TextCommandExtension } from '../../textCommand/TextCommandExtension'\nimport { CommandClientSymbol } from '../symbols'\nimport { Registry } from './Registry'\nexport class CommandClient extends EventEmitter {\n ctsLogger: Logger<unknown>\n registry: Registry\n\n owners: Set<Snowflake> = new Set()\n\n constructor(public discord: Client, public logger: Logger<unknown> = new Logger({ prettyLogTimeZone: 'local' }), loggerOptions: ISettingsParam<unknown> = {}) {\n super()\n\n this.ctsLogger = logger.getSubLogger({\n ...loggerOptions,\n name: 'command.ts',\n })\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 isOwner(user: User): Promise<boolean> {\n return this.owners.has(user.id)\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","import { Collection } from 'discord.js'\nimport type { AnyFunction } from '../../utils/types'\nimport type { ComponentHookStore } from '../hooks'\nimport { ComponentArgument } from './ComponentArgument'\n\nexport class BaseComponent {\n method!: AnyFunction\n\n hooks: ComponentHookStore = new Collection()\n\n argTypes: Collection<number, ComponentArgument> = new Collection()\n\n _init(method: AnyFunction, argTypes: unknown[]) {\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 async executeGlobalHook(target: object, name: string, args: unknown[]) {\n const { CommandClient } = await import('../structures/CommandClient')\n\n const client = CommandClient.getFromModule(target)\n\n const globalHooks = client.registry.globalHooks[name]\n\n if (globalHooks) {\n for (const fn of globalHooks) {\n await fn.call(null, client, ...args)\n }\n }\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 const client = CommandClient.getFromModule(target)\n\n const globalHooks = client.registry.globalHooks[name]\n\n if (globalHooks) {\n hook.unshift(...globalHooks)\n }\n\n for (const fn of hook) {\n await fn.call(null, client, ...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 await this.executeHook(target, 'afterCall', [...beforeCallArgs, result])\n } catch (e) {\n await this.executeHook(target, 'invokeError', [e, ...beforeCallArgs])\n throw e\n }\n\n return result\n }\n}\n","import 'reflect-metadata'\nexport * from './decoratorCreator'\nexport * from './ComponentArgument'\nexport * from './ComponentArgumentDecorator'\nexport * from './BaseComponent'\n","export class OwnerOnlyError {}\n","import type { Interaction } from 'discord.js'\nimport { BaseInteraction, Message } from 'discord.js'\nimport { createComponentHook } from '../hooks'\nimport type { ComponentHookFn } from '../hooks/componentHook'\nimport type { CommandClient } from '../structures'\nimport { OwnerOnlyError } from './errors'\n\nexport const createCheckDecorator = (fn: ComponentHookFn<[CommandClient, Interaction | Message]>) => 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 client\n isOwner = await client.isOwner(i.user)\n } else if (i instanceof Message) {\n isOwner = await client.isOwner(i.author)\n }\n\n if (!isOwner) throw new OwnerOnlyError()\n})\n","export const mergeMethodDecorators = (decorators: MethodDecorator[]): MethodDecorator => {\n return (target, key, descriptor) => {\n for (const decorator of decorators) {\n decorator(target, key, descriptor)\n }\n }\n}\n","export * from './checks'\nexport * from './errors'\nexport * from './decorators'\n","export * from './Extension'\n","export * from './components'\nexport * from './hooks'\nexport * from './converter'\nexport * from './utils'\nexport * from './listener'\nexport * from './structures'\nexport * from './extensions'\n","export * from './core'\nexport * from './applicationCommand'\nexport * from './textCommand'\n","export * from './ApplicationCommand'\nexport { option } from './ApplicationCommandOption'\nexport * from './group'\nexport * from './ApplicationCommandExtension'\n","import type { ApplicationCommandSubGroupData, ChatInputApplicationCommandData } from 'discord.js'\nimport { ApplicationCommandType } from 'discord.js'\nimport { createComponentDecorator } from '../core'\nimport { ApplicationCommandComponent } from './ApplicationCommand'\n\nexport class SubCommandGroup {\n constructor(public options: Omit<ChatInputApplicationCommandData, 'type'>, public guilds?: string[]) {}\n\n command(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>): MethodDecorator {\n const cmd = new ApplicationCommandComponent({\n type: ApplicationCommandType.ChatInput,\n ...options,\n })\n cmd.subcommandGroup = this\n return createComponentDecorator(cmd)\n }\n\n createChild(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>) {\n return new SubCommandGroupChild(options, this)\n }\n}\n\nexport class SubCommandGroupChild {\n constructor(public options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>, public parent: SubCommandGroup) {}\n\n command(options: Omit<ChatInputApplicationCommandData, 'options' | 'type'>): MethodDecorator {\n const cmd = new ApplicationCommandComponent({\n type: ApplicationCommandType.ChatInput,\n ...options,\n })\n cmd.subcommandGroupChild = this\n return createComponentDecorator(cmd)\n }\n}\n","export * from './TextCommand'\nexport type { TextCommandConfig } from './TextCommandExtension'\nexport * from './parameters'\n"],"mappings":"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","names":["ComponentStoreSymbol","ComponentArgStoreSymbol","ModuleHookStoreSymbol","CommandClientSymbol","ComponentHookSymbol","FilePathSymbol","init_symbols","__esmMin","Symbol","import_discord","getComponentHookStore","createComponentHook","init_componentHook","__esmMin","init_symbols","__name","target","property","data","Reflect","getMetadata","ComponentHookSymbol","Collection","defineMetadata","name","fn","key","store","hooks","get","set","unshift","import_discord","getComponentStore","getComponent","createComponentDecorator","getComponentArgumentStore","createArgumentDecorator","init_decoratorCreator","__esmMin","init_componentHook","init_symbols","__name","target","result","Reflect","getMetadata","ComponentStoreSymbol","Collection","defineMetadata","key","get","component","_init","componentHookStore","getComponentHookStore","hooks","store","forEach","x","i","_a","argTypes","decorators","push","set","type","options","idx","arg","ComponentArgument","init_ComponentArgument","__esmMin","constructor","type","decorators","import_lodash","ComponentArgumentDecorator","init_ComponentArgumentDecorator","__esmMin","constructor","options","_","merge","defaultOptions","ApplicationCommandComponent","applicationCommand","init_ApplicationCommand","__esmMin","init_decoratorCreator","init_BaseComponent","BaseComponent","constructor","options","__name","createComponentDecorator","ApplicationCommandOption","option","init_ApplicationCommandOption","__esmMin","init_core","ComponentArgumentDecorator","createArgumentDecorator","import_lodash","ListenerComponent","listener","init_listener","__esmMin","init_BaseComponent","init_decoratorCreator","BaseComponent","constructor","options","_","merge","emitter","__name","createComponentDecorator","ConverterComponent","argConverter","init_converter","__esmMin","init_BaseComponent","init_decoratorCreator","BaseComponent","constructor","options","__name","createComponentDecorator","import_discord","getModuleHookStore","moduleHook","init_moduleHook","__esmMin","init_symbols","__name","target","result","Reflect","getMetadata","ModuleHookStoreSymbol","Collection","defineMetadata","name","key","store","v","get","set","push","init_hooks","__esmMin","init_moduleHook","init_componentHook","import_chalk","import_discord","import_lodash","import_walk_sync","import_path","Registry","init_Registry","__esmMin","init_components","init_hooks","init_listener","init_symbols","constructor","logger","client","extensions","emitters","Collection","globalHooks","getSubLogger","name","chalk","green","addGlobalHook","fn","hooks","push","getComponentsWithTypeGlobal","type","result","ext","getComponentsWithType","componentStore","getComponentStore","Array","from","filter","x","values","registerEventListeners","listeners","ListenerComponent","listener","emitter","get","options","bound","method","bind","Reflect","defineMetadata","addListener","event","unregisterEventListeners","getMetadata","removeListener","loadAllModulesInDirectory","dir","pattern","results","files","walkSync","endsWith","test","file","p","path","join","loadModulesAtPath","info","require","resolve","mod","setup","Error","modules","registerModules","module","registerModule","FilePathSymbol","reloadModules","paths","Set","add","unregisterModule","cache","e","error","CommandClientSymbol","runModuleHook","_","remove","hookName","args","functions","getModuleHookStore","call","registerEventEmitter","set","init_structures","__esmMin","init_Registry","init_CommandClient","import_chalk","import_discord","Extension","init_Extension","__esmMin","init_converter","init_structures","commandClient","CommandClient","getFromModule","client","discord","logger","_logger","getSubLogger","name","chalk","green","constructor","convertArguments","component","argList","args","getConverterArgs","items","Collection","extension","registry","extensions","converter","getComponentsWithType","ConverterComponent","options","set","type","ext","index","arg","get","undefined","converterArgs","execute","import_chalk","CTSExtension","init_CTSExtension","__esmMin","init_Extension","Extension","logger","_logger","commandClient","ctsLogger","getSubLogger","name","chalk","green","constructor","import_chalk","import_discord","__decorate","ApplicationCommandExtension","init_ApplicationCommandExtension","__esmMin","init_ApplicationCommand","init_ApplicationCommandOption","init_listener","init_converter","init_CTSExtension","decorators","target","key","desc","CTSExtension","constructor","config","unmanagedCommands","registerUnmanagedCommand","command","push","interactionCreate","i","_a","type","InteractionType","ApplicationCommand","cmd","ext","extensions","commandClient","registry","subcommand","subcommandGroup","commandType","ApplicationCommandType","ChatInput","options","getSubcommand","getSubcommandGroup","extLoop","extension","components","getComponentsWithType","ApplicationCommandComponent","subcommandGroupChild","parent","name","commandName","argList","convertArguments","argTypes","idx","arg","value","decorator","ApplicationCommandOption","ApplicationCommandOptionType","Subcommand","SubcommandGroup","includes","isChatInputCommand","get","executeGlobalHook","execute","e","emit","sync","client","logger","info","commands","guildCommands","Collection","subcommandGroups","getComponentsWithTypeGlobal","group","guilds","guild","set","option","find","x","child","executeHook","rest","g","size","fetch","chalk","green","length","map","blue","join","id","error","message","application","chatInteraction","messageInteraction","userInteraction","commandInteraction","listener","event","argConverter","component","parameterless","ChatInputCommandInteraction","MessageContextMenuCommandInteraction","UserContextMenuCommandInteraction","CommandInteraction","TextCommandComponent","command","init_TextCommand","__esmMin","init_decoratorCreator","init_BaseComponent","BaseComponent","constructor","options","__name","createComponentDecorator","TextCommandRestOption","rest","init_parameters","__esmMin","init_core","ComponentArgumentDecorator","createArgumentDecorator","import_discord","__decorate","TextCommandExtension","init_TextCommandExtension","__esmMin","init_listener","init_CTSExtension","init_TextCommand","init_parameters","init_core","decorators","target","key","desc","CTSExtension","constructor","config","processPrefix","msg","content","prefix","startsWith","length","Array","p","find","x","messageCreate","startIndex","slice","commands","extensions","Map","ext","commandClient","registry","cmd","getComponentsWithType","TextCommandComponent","push","set","commandNameLength","command","names","options","name","aliases","get","args","argStrings","split","convertArguments","argTypes","arg","i","converter","parameterless","TextCommandRestOption","text","join","shift","execute","e","emit","mesage","str","value","num","Number","listener","event","emitter","argConverter","component","type","Message","String","CommandClient_exports","__export","CommandClient","import_chalk","import_discord","import_events","import_tslog","init_CommandClient","__esmMin","init_ApplicationCommandExtension","init_TextCommandExtension","init_symbols","init_Registry","EventEmitter","constructor","discord","logger","Logger","prettyLogTimeZone","loggerOptions","owners","Set","ctsLogger","getSubLogger","name","registry","Registry","registerEventEmitter","isOwner","user","has","id","fetchOwners","application","Error","info","fetch","owner","User","add","push","tag","Team","member","members","chalk","green","length","map","x","blue","join","enableApplicationCommandsExtension","config","registerModule","ApplicationCommandExtension","enableTextCommandsExtension","TextCommandExtension","getApplicationCommandsExtension","extensions","find","getFromModule","ext","Reflect","getMetadata","CommandClientSymbol","import_discord","BaseComponent","init_BaseComponent","__esmMin","init_ComponentArgument","hooks","Collection","argTypes","_init","method","i","length","element","set","ComponentArgument","executeGlobalHook","target","name","args","CommandClient","client","getFromModule","globalHooks","registry","fn","call","executeHook","hook","get","unshift","execute","beforeCallArgs","result","e","import_reflect_metadata","init_components","__esmMin","init_decoratorCreator","init_ComponentArgument","init_ComponentArgumentDecorator","init_BaseComponent","OwnerOnlyError","init_errors","__esmMin","import_discord","createCheckDecorator","ownerOnly","init_checks","__esmMin","init_hooks","init_errors","__name","fn","createComponentHook","client","i","isOwner","BaseInteraction","user","Message","author","OwnerOnlyError","mergeMethodDecorators","init_decorators","__esmMin","__name","decorators","target","key","descriptor","decorator","init_utils","__esmMin","init_checks","init_errors","init_decorators","init_extensions","__esmMin","init_Extension","init_core","__esmMin","init_components","init_hooks","init_converter","init_utils","init_listener","init_structures","init_extensions","src_exports","__export","ApplicationCommandComponent","ApplicationCommandExtension","BaseComponent","CommandClient","ComponentArgument","ComponentArgumentDecorator","ConverterComponent","Extension","ListenerComponent","OwnerOnlyError","Registry","SubCommandGroup","SubCommandGroupChild","TextCommandComponent","TextCommandRestOption","applicationCommand","argConverter","command","createArgumentDecorator","createCheckDecorator","createComponentDecorator","createComponentHook","getComponent","getComponentArgumentStore","getComponentStore","getModuleHookStore","listener","mergeMethodDecorators","moduleHook","option","ownerOnly","rest","__toCommonJS","init_core","init_ApplicationCommand","init_ApplicationCommandOption","import_discord","init_core","init_ApplicationCommand","SubCommandGroup","constructor","options","guilds","command","cmd","ApplicationCommandComponent","type","ApplicationCommandType","ChatInput","subcommandGroup","createComponentDecorator","createChild","SubCommandGroupChild","parent","subcommandGroupChild","init_ApplicationCommandExtension","init_TextCommand","init_parameters"]}
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/converter/index.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/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/decorators.ts","../src/core/utils/index.ts","../src/core/extensions/index.ts","../src/core/index.ts","../src/index.ts","../src/applicationCommand/index.ts","../src/applicationCommand/group.ts","../src/textCommand/index.ts"],"sourcesContent":["export const ComponentStoreSymbol = Symbol()\nexport const ComponentArgStoreSymbol = Symbol()\nexport const ModuleHookStoreSymbol = Symbol()\nexport const CommandClientSymbol = Symbol()\nexport const ComponentHookSymbol = Symbol()\nexport const FilePathSymbol = Symbol()\n","import { Collection } from 'discord.js'\nimport { ComponentHookSymbol } from '../symbols'\n\nexport type ComponentHookFn<T extends unknown[]> = (...args: T) => void | Promise<void>\n\nexport type ComponentHookStore = Collection<string, ComponentHookFn<unknown[]>[]>\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 = <T extends unknown[]>(name: string, fn: ComponentHookFn<T>): 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 // @ts-expect-error unknown type\n hooks.unshift(fn)\n }\n}\n","import { Collection } from 'discord.js'\nimport type { ComponentHookStore } from '../hooks'\nimport { getComponentHookStore } from '../hooks/componentHook'\nimport { ComponentStoreSymbol } from '../symbols'\nimport type { BaseComponent } from './BaseComponent'\nimport type { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport type ComponentStore = Collection<string | symbol, BaseComponent>\nexport type 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 = (component: BaseComponent): MethodDecorator => {\n return (target, key) => {\n component._init(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\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 if (!key) return\n\n const arg: ComponentArgumentDecorator<Options> = new type(options)\n\n const store = getComponentArgumentStore(target, key)\n\n store.set(idx, arg)\n }\n }\n}\n","import type { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport class ComponentArgument {\n decorators: ComponentArgumentDecorator[] = []\n\n constructor(public type: unknown) {}\n}\n","import _ 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","import type { ApplicationCommandType, ChatInputApplicationCommandData, MessageApplicationCommandData, Snowflake, UserApplicationCommandData } from 'discord.js'\nimport { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\nimport type { SubCommandGroup, SubCommandGroupChild } from './group'\n\ntype Options = (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & {\n type: ApplicationCommandType\n guilds?: Snowflake[]\n}\n\nexport class ApplicationCommandComponent extends BaseComponent {\n options: Options\n\n subcommandGroup?: SubCommandGroup\n subcommandGroupChild?: SubCommandGroupChild\n\n constructor(options: UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) {\n super()\n\n this.options = options as Options\n }\n}\n\nexport const applicationCommand = (options: Options) => createComponentDecorator(new ApplicationCommandComponent(options))\n\nexport type { Options as ApplicationCommandComponentOptions }\n","import type { ApplicationCommandOptionData } from 'discord.js'\nimport { createArgumentDecorator, ComponentArgumentDecorator } from '../core'\n\ntype Options = ApplicationCommandOptionData\n\nexport class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}\n\nexport const option = createArgumentDecorator(ApplicationCommandOption)\n","import { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\ntype Options<T> = { component: unknown; type: T; parameterless: boolean }\n\ntype OptionsArg<T> = Omit<Options<T>, 'parameterless'> & { parameterless?: boolean }\n\nexport class ConverterComponent<T> extends BaseComponent {\n options: Options<T>\n\n constructor(options: OptionsArg<T>) {\n super()\n this.options = options as Options<T>\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const argConverter = <T>(options: OptionsArg<T>) => createComponentDecorator(new ConverterComponent(options))\n\nexport { Options as ArgumentConvertOptions, OptionsArg as ArgumentConvertOptionsArg }\n","import { Collection } from 'discord.js'\nimport { ModuleHookStoreSymbol } from '../symbols'\nimport type { ComponentHookFn } from './componentHook'\n\nexport type ModuleHookStore = Collection<string, ComponentHookFn<unknown[]>[]>\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","export * from './moduleHook'\nexport { createComponentHook, type ComponentHookFn } from './componentHook'\nexport type { ComponentHookStore } from './componentHook'\n","import _ from 'lodash'\nimport { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\ntype Options = { emitter: string; event: string }\n\ntype OptionsArg = { emitter?: string; event: string }\n\nexport class ListenerComponent extends BaseComponent {\n options: Options\n\n constructor(options: OptionsArg) {\n super()\n\n this.options = _.merge({ emitter: 'discord' }, options)\n }\n}\n\nexport const listener = (options: OptionsArg) => createComponentDecorator(new ListenerComponent(options))\n\nexport { Options as ListenerOptions, OptionsArg as ListenerOptionsArg }\n","import chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport type EventEmitter from 'events'\nimport _ from 'lodash'\nimport type { Logger } from 'tslog'\nimport { getComponentStore } from '../components'\nimport { getModuleHookStore } from '../hooks'\nimport { ListenerComponent } from '../listener'\nimport { CommandClientSymbol, FilePathSymbol } from '../symbols'\nimport type { CommandClient } from './CommandClient'\nimport walkSync from 'walk-sync'\nimport path from 'path'\nimport type { ComponentHookFn } from '../hooks/componentHook'\n\nexport class Registry {\n extensions: object[] = []\n\n emitters: Collection<string, EventEmitter> = new Collection()\n\n logger: Logger<unknown>\n\n globalHooks: Record<string, ComponentHookFn<unknown[]>[]> = {}\n\n constructor(logger: Logger<unknown>, public client: CommandClient) {\n this.logger = logger.getSubLogger({\n name: chalk.green('Registry'),\n })\n }\n\n addGlobalHook(name: string, fn: ComponentHookFn<unknown[]>) {\n let hooks = this.globalHooks[name]\n\n if (!hooks) {\n hooks = []\n this.globalHooks[name] = hooks\n }\n\n hooks.push(fn)\n }\n\n getComponentsWithTypeGlobal<T>(type: unknown): T[] {\n const result: T[] = []\n\n for (const ext of this.extensions) {\n result.push(...this.getComponentsWithType<T>(ext, type))\n }\n\n return result\n }\n\n getComponentsWithType<T>(ext: object, type: unknown): T[] {\n const componentStore = getComponentStore(ext)\n\n return Array.from(componentStore.filter((x) => (x.constructor as unknown) === type).values() as Iterable<T>)\n }\n\n registerEventListeners(ext: object) {\n const listeners = this.getComponentsWithType<ListenerComponent>(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<ListenerComponent>(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, pattern?: RegExp): Promise<object[]> {\n const results: object[] = []\n\n const files = walkSync(dir).filter((x) => (x.endsWith('.ts') || x.endsWith('.js')) && (!pattern || pattern.test(x)))\n\n for (const file of files) {\n if (file.endsWith('.d.ts')) continue\n const p = path.join(dir, file)\n results.push(...(await this.loadModulesAtPath(p)))\n }\n\n return results\n }\n\n async loadModulesAtPath(file: string) {\n this.logger.info(`Loading module at path ${chalk.green(file)}`)\n\n const p = require.resolve(file)\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require(p)\n\n if (typeof mod.setup !== 'function') throw new Error('Extension must have a setup function')\n\n const modules = await mod.setup(this.client)\n\n return this.registerModules(modules, p)\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; extensions?: object[] }[] = []\n const paths = new Set<string>()\n const extensions = [...this.extensions]\n for (const module of extensions) {\n const file = Reflect.getMetadata(FilePathSymbol, module)\n if (!file) continue\n\n this.logger.info(`Unloading module: ${chalk.green(module.constructor.name)}`)\n\n paths.add(file)\n\n await this.unregisterModule(module)\n\n delete require.cache[require.resolve(file)]\n }\n\n for (const path of paths) {\n try {\n const extensions = await this.loadModulesAtPath(path)\n\n result.push({\n file: path,\n result: true,\n extensions,\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","export * from './Registry'\nexport * from './CommandClient'\n","import chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport type { Logger } from 'tslog'\nimport type { 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<unknown>\n\n protected get logger() {\n if (!this._logger) this._logger = this.commandClient.logger.getSubLogger({ name: chalk.green(`${this.constructor.name}`) })\n return this._logger\n }\n\n protected async convertArguments(\n component: unknown,\n argList: unknown[],\n args: Collection<number, ComponentArgument>,\n getConverterArgs: (arg: ComponentArgument, index: number, converter: ConverterComponent<unknown>) => unknown[] | Promise<unknown[]>,\n ) {\n const items = new Collection<unknown, { ext: object; component: ConverterComponent<unknown> }>()\n\n for (const extension of this.commandClient.registry.extensions) {\n for (const converter of this.commandClient.registry.getComponentsWithType<ConverterComponent<unknown>>(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","import 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.getSubLogger({ name: chalk.green(`${this.constructor.name}`) })\n return this._logger\n }\n}\n","import chalk from 'chalk'\nimport type { Mutable } from 'utility-types'\nimport type {\n ApplicationCommandData,\n ApplicationCommandSubCommandData,\n ApplicationCommandSubGroupData,\n ChatInputApplicationCommandData,\n Interaction,\n Snowflake,\n ApplicationCommandOptionData,\n} from 'discord.js'\nimport { ChatInputCommandInteraction, Collection, CommandInteraction, MessageContextMenuCommandInteraction, UserContextMenuCommandInteraction } from 'discord.js'\nimport { ApplicationCommandOptionType, ApplicationCommandType } from 'discord-api-types/v10'\nimport { ApplicationCommandComponent } from './ApplicationCommand'\nimport { ApplicationCommandOption } from './ApplicationCommandOption'\nimport { listener } from '../core'\nimport { argConverter } from '../core'\nimport { CTSExtension } from '../core/extensions/CTSExtension'\n\ntype MutableGroup = ChatInputApplicationCommandData & {\n options: Mutable<ChatInputApplicationCommandData['options']>\n}\n\ntype MutableSubGroup = ApplicationCommandSubGroupData & {\n options: Mutable<ApplicationCommandSubGroupData['options']>\n}\n\ntype MutableCommand = ChatInputApplicationCommandData & {\n options: ApplicationCommandOptionData[]\n}\n\nexport type ApplicationCommandExtensionConfig = {\n guilds?: Snowflake[]\n}\n\nexport class ApplicationCommandExtension extends CTSExtension {\n constructor(public config: ApplicationCommandExtensionConfig) {\n super()\n }\n\n unmanagedCommands: (ApplicationCommandData & { guilds?: Snowflake[] })[] = []\n\n // noinspection JSUnusedGlobalSymbols\n registerUnmanagedCommand(command: ApplicationCommandData & { guilds?: Snowflake[] }) {\n this.unmanagedCommands.push(command)\n }\n\n @listener({ event: 'interactionCreate' })\n async interactionCreate(i: Interaction) {\n try {\n if (!i.isCommand()) return\n\n let cmd: ApplicationCommandComponent | null = null\n let ext: object | null = null\n\n const extensions = this.commandClient.registry.extensions\n\n let subcommand: string | null = null\n let subcommandGroup: string | null = null\n\n if (i.isChatInputCommand()) {\n subcommand = i.options.getSubcommand(false)\n subcommandGroup = i.options.getSubcommandGroup(false)\n }\n\n extLoop: for (const extension of extensions) {\n const components = this.commandClient.registry.getComponentsWithType<ApplicationCommandComponent>(extension, ApplicationCommandComponent)\n\n if (subcommand) {\n for (const command of components) {\n if (!command.subcommandGroup && !command.subcommandGroupChild) continue\n\n if (\n command.subcommandGroupChild &&\n command.subcommandGroupChild.parent.options.name === i.commandName &&\n command.subcommandGroupChild.options.name === subcommandGroup &&\n command.options.name === subcommand\n ) {\n ext = extension\n cmd = command\n break extLoop\n }\n if (command.subcommandGroup && !subcommandGroup && command.subcommandGroup.options.name === i.commandName && command.options.name === subcommand) {\n ext = extension\n cmd = command\n break extLoop\n }\n }\n } else {\n for (const command of components) {\n if (command.options.name === i.commandName) {\n ext = extension\n cmd = command\n break extLoop\n }\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.executeGlobalHook(ext, 'beforeApplicationCommandCall', [i])\n await cmd.execute(ext, argList, [i])\n } finally {\n await cmd.executeGlobalHook(ext, 'afterApplicationCommandCall', [i])\n }\n }\n } catch (e) {\n this.commandClient.emit('applicationCommandInvokeError', e, i)\n }\n }\n\n async sync() {\n const client = this.commandClient\n\n this.logger.info('Trying to sync commands...')\n\n let commands: ApplicationCommandData[] = []\n\n const guildCommands = new Collection<Snowflake, ApplicationCommandData[]>()\n\n const subcommandGroups = new Collection<string, ChatInputApplicationCommandData>()\n\n for (const command of client.registry.getComponentsWithTypeGlobal<ApplicationCommandComponent>(ApplicationCommandComponent)) {\n if (command.subcommandGroup) {\n let group = subcommandGroups.get(command.subcommandGroup.options.name) as MutableGroup\n\n if (!group) {\n group = {\n ...command.subcommandGroup.options,\n type: ApplicationCommandType.ChatInput,\n } as MutableGroup\n\n if (command.subcommandGroup.guilds) {\n for (const guild of command.subcommandGroup.guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n }\n } else {\n commands.push(group)\n }\n\n subcommandGroups.set(command.subcommandGroup.options.name, group)\n }\n\n if (!group.options) group.options = []\n\n const 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 options.push(option.options)\n }\n }\n\n group.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as Mutable<ApplicationCommandSubCommandData>)\n\n continue\n } else if (command.subcommandGroupChild) {\n const parent = command.subcommandGroupChild.parent\n let group = subcommandGroups.get(parent.options.name) as MutableGroup\n\n if (!group) {\n group = {\n ...parent.options,\n type: ApplicationCommandType.ChatInput,\n } as MutableGroup\n\n if (parent.guilds) {\n for (const guild of parent.guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n }\n } else {\n commands.push(group)\n }\n\n subcommandGroups.set(parent.options.name, group)\n }\n\n if (!group.options) group.options = []\n\n let child = group.options.find((x) => x.name === command.subcommandGroupChild?.options.name) as MutableSubGroup\n\n if (!child) {\n child = {\n ...(command.subcommandGroupChild.options as Omit<ApplicationCommandSubGroupData, 'type'>),\n type: ApplicationCommandOptionType.SubcommandGroup,\n } as MutableSubGroup\n group.options.push(child)\n }\n\n if (!child.options) child.options = []\n\n const 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 options.push(option.options)\n }\n }\n\n child.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as Mutable<ApplicationCommandSubCommandData>)\n\n continue\n }\n\n const cmd = { ...command.options } as MutableCommand\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 await command.executeHook(this, 'beforeSync', [cmd, command])\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 commands.push(cmd)\n }\n\n for (const { guilds, ...rest } of this.unmanagedCommands) {\n if (guilds) {\n for (const guild of guilds) {\n let commands = guildCommands.get(guild)\n if (!commands) {\n commands = []\n guildCommands.set(guild, commands)\n }\n commands.push(rest)\n }\n } else {\n commands.push(rest)\n }\n }\n\n if (this.config.guilds) {\n for (const guild of this.config.guilds) {\n let g = guildCommands.get(guild)\n if (!g) {\n g = []\n guildCommands.set(guild, g)\n }\n g.push(...commands)\n }\n\n commands = []\n }\n\n if (guildCommands.size) {\n for (const [guild, commands] of guildCommands) {\n try {\n const g = await this.client.guilds.fetch(guild)\n await g.fetch()\n this.logger.info(\n `Processing ${chalk.green(commands.length)} commands(${commands.map((x) => chalk.blue(x.name)).join(', ')}) for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`,\n )\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(`Processing ${chalk.green(commands.length)} commands(${commands.map((x) => chalk.blue(x.name)).join(', ')}) for application scope...`)\n\n if (this.client.application) {\n await this.client.application.commands.set(commands)\n\n this.logger.info('Successfully registered commands.')\n } else {\n this.logger.error('Client#application is not yet initialized.')\n }\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 @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: CommandInteraction,\n })\n async commandInteraction(i: UserContextMenuCommandInteraction) {\n return i\n }\n}\n","import { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\n\nexport type TextCommandOptions = {\n name: string\n aliases?: string[]\n description?: string\n}\n\nexport class TextCommandComponent extends BaseComponent {\n constructor(public options: TextCommandOptions) {\n super()\n }\n}\n\nexport const command = (options: TextCommandOptions) => createComponentDecorator(new TextCommandComponent(options))\n","import { ComponentArgumentDecorator } from '../core'\nimport { createArgumentDecorator } from '../core'\n\nexport class TextCommandRestOption extends ComponentArgumentDecorator<void> {}\n\nexport const rest = createArgumentDecorator(TextCommandRestOption)\n","import { 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\ndeclare module 'discord.js' {\n interface Message {\n command: TextCommandComponent\n }\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 try {\n const startIndex = await this.processPrefix(msg)\n\n if (startIndex === null) 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<TextCommandComponent>(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 msg.command = command\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 } catch (e) {\n this.commandClient.emit('textCommandInvokeError', e, msg)\n }\n }\n\n @argConverter({\n component: TextCommandComponent,\n type: Message,\n parameterless: true,\n })\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","import chalk from 'chalk'\nimport type { Client, Snowflake } from 'discord.js'\nimport { Team, User } from 'discord.js'\nimport EventEmitter from 'events'\nimport type { ISettingsParam } from 'tslog'\nimport { Logger } from 'tslog'\nimport type { ApplicationCommandExtensionConfig } from '../../applicationCommand/ApplicationCommandExtension'\nimport { ApplicationCommandExtension } from '../../applicationCommand/ApplicationCommandExtension'\nimport type { TextCommandConfig } from '../../textCommand'\nimport { TextCommandExtension } from '../../textCommand/TextCommandExtension'\nimport { CommandClientSymbol } from '../symbols'\nimport { Registry } from './Registry'\nexport class CommandClient extends EventEmitter {\n ctsLogger: Logger<unknown>\n registry: Registry\n\n owners: Set<Snowflake> = new Set()\n\n constructor(public discord: Client, public logger: Logger<unknown> = new Logger({ prettyLogTimeZone: 'local' }), loggerOptions: ISettingsParam<unknown> = {}) {\n super()\n\n this.ctsLogger = logger.getSubLogger({\n ...loggerOptions,\n name: 'command.ts',\n })\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 isOwner(user: User): Promise<boolean> {\n return this.owners.has(user.id)\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","import { Collection } from 'discord.js'\nimport type { AnyFunction } from '../../utils/types'\nimport type { ComponentHookStore } from '../hooks'\nimport { ComponentArgument } from './ComponentArgument'\n\nexport class BaseComponent {\n method!: AnyFunction\n\n hooks: ComponentHookStore = new Collection()\n\n argTypes: Collection<number, ComponentArgument> = new Collection()\n\n _init(method: AnyFunction, argTypes: unknown[]) {\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 async executeGlobalHook(target: object, name: string, args: unknown[]) {\n const { CommandClient } = await import('../structures/CommandClient')\n\n const client = CommandClient.getFromModule(target)\n\n const globalHooks = client.registry.globalHooks[name]\n\n if (globalHooks) {\n for (const fn of globalHooks) {\n await fn.call(null, client, ...args)\n }\n }\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 const client = CommandClient.getFromModule(target)\n\n const globalHooks = client.registry.globalHooks[name]\n\n if (globalHooks) {\n hook.unshift(...globalHooks)\n }\n\n for (const fn of hook) {\n await fn.call(null, client, ...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 await this.executeHook(target, 'afterCall', [...beforeCallArgs, result])\n } catch (e) {\n await this.executeHook(target, 'invokeError', [e, ...beforeCallArgs])\n throw e\n }\n\n return result\n }\n}\n","import 'reflect-metadata'\nexport * from './decoratorCreator'\nexport * from './ComponentArgument'\nexport * from './ComponentArgumentDecorator'\nexport * from './BaseComponent'\n","export class OwnerOnlyError {}\n","import type { Interaction } from 'discord.js'\nimport { BaseInteraction, Message } from 'discord.js'\nimport { createComponentHook } from '../hooks'\nimport type { ComponentHookFn } from '../hooks/componentHook'\nimport type { CommandClient } from '../structures'\nimport { OwnerOnlyError } from './errors'\n\nexport const createCheckDecorator = (fn: ComponentHookFn<[CommandClient, Interaction | Message]>) => 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 client\n isOwner = await client.isOwner(i.user)\n } else if (i instanceof Message) {\n isOwner = await client.isOwner(i.author)\n }\n\n if (!isOwner) throw new OwnerOnlyError()\n})\n","export const mergeMethodDecorators = (decorators: MethodDecorator[]): MethodDecorator => {\n return (target, key, descriptor) => {\n for (const decorator of decorators) {\n decorator(target, key, descriptor)\n }\n }\n}\n","export * from './checks'\nexport * from './errors'\nexport * from './decorators'\n","export * from './Extension'\n","export * from './components'\nexport * from './hooks'\nexport * from './converter'\nexport * from './utils'\nexport * from './listener'\nexport * from './structures'\nexport * from './extensions'\n","export * from './core'\nexport * from './applicationCommand'\nexport * from './textCommand'\n","export * from './ApplicationCommand'\nexport { option } from './ApplicationCommandOption'\nexport * from './group'\nexport * from './ApplicationCommandExtension'\n","import type { ApplicationCommandSubGroupData, ChatInputApplicationCommandData } from 'discord.js'\nimport { ApplicationCommandType } from 'discord.js'\nimport { createComponentDecorator } from '../core'\nimport { ApplicationCommandComponent } from './ApplicationCommand'\n\nexport class SubCommandGroup {\n constructor(public options: Omit<ChatInputApplicationCommandData, 'type'>, public guilds?: string[]) {}\n\n command(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>): MethodDecorator {\n const cmd = new ApplicationCommandComponent({\n type: ApplicationCommandType.ChatInput,\n ...options,\n })\n cmd.subcommandGroup = this\n return createComponentDecorator(cmd)\n }\n\n createChild(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>) {\n return new SubCommandGroupChild(options, this)\n }\n}\n\nexport class SubCommandGroupChild {\n constructor(public options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>, public parent: SubCommandGroup) {}\n\n command(options: Omit<ChatInputApplicationCommandData, 'options' | 'type'>): MethodDecorator {\n const cmd = new ApplicationCommandComponent({\n type: ApplicationCommandType.ChatInput,\n ...options,\n })\n cmd.subcommandGroupChild = this\n return createComponentDecorator(cmd)\n }\n}\n","export * from './TextCommand'\nexport type { TextCommandConfig } from './TextCommandExtension'\nexport * from './parameters'\n"],"mappings":"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","names":["ComponentStoreSymbol","ComponentArgStoreSymbol","ModuleHookStoreSymbol","CommandClientSymbol","ComponentHookSymbol","FilePathSymbol","init_symbols","__esmMin","Symbol","import_discord","getComponentHookStore","createComponentHook","init_componentHook","__esmMin","init_symbols","__name","target","property","data","Reflect","getMetadata","ComponentHookSymbol","Collection","defineMetadata","name","fn","key","store","hooks","get","set","unshift","import_discord","getComponentStore","getComponent","createComponentDecorator","getComponentArgumentStore","createArgumentDecorator","init_decoratorCreator","__esmMin","init_componentHook","init_symbols","__name","target","result","Reflect","getMetadata","ComponentStoreSymbol","Collection","defineMetadata","key","get","component","_init","componentHookStore","getComponentHookStore","hooks","store","forEach","x","i","_a","argTypes","decorators","push","set","type","options","idx","arg","ComponentArgument","init_ComponentArgument","__esmMin","constructor","type","decorators","_ComponentArgument","import_lodash","ComponentArgumentDecorator","init_ComponentArgumentDecorator","__esmMin","constructor","options","_","merge","defaultOptions","_ComponentArgumentDecorator","ApplicationCommandComponent","applicationCommand","init_ApplicationCommand","__esmMin","init_decoratorCreator","init_BaseComponent","BaseComponent","constructor","options","subcommandGroup","subcommandGroupChild","_ApplicationCommandComponent","__name","createComponentDecorator","ApplicationCommandOption","option","init_ApplicationCommandOption","__esmMin","init_core","ComponentArgumentDecorator","_ApplicationCommandOption","createArgumentDecorator","ConverterComponent","argConverter","init_converter","__esmMin","init_BaseComponent","init_decoratorCreator","BaseComponent","constructor","options","_ConverterComponent","__name","createComponentDecorator","import_discord","getModuleHookStore","moduleHook","init_moduleHook","__esmMin","init_symbols","__name","target","result","Reflect","getMetadata","ModuleHookStoreSymbol","Collection","defineMetadata","name","key","store","v","get","set","push","init_hooks","__esmMin","init_moduleHook","init_componentHook","import_lodash","ListenerComponent","listener","init_listener","__esmMin","init_BaseComponent","init_decoratorCreator","BaseComponent","constructor","options","_","merge","emitter","_ListenerComponent","__name","createComponentDecorator","import_chalk","import_discord","import_lodash","import_walk_sync","import_path","Registry","init_Registry","__esmMin","init_components","init_hooks","init_listener","init_symbols","constructor","logger","client","extensions","emitters","globalHooks","Collection","getSubLogger","name","chalk","green","addGlobalHook","fn","hooks","push","getComponentsWithTypeGlobal","type","result","ext","getComponentsWithType","componentStore","getComponentStore","Array","from","filter","x","values","registerEventListeners","listeners","ListenerComponent","listener","emitter","get","options","bound","method","bind","Reflect","defineMetadata","addListener","event","unregisterEventListeners","getMetadata","removeListener","loadAllModulesInDirectory","dir","pattern","__async","results","files","walkSync","endsWith","test","file","p","path","join","loadModulesAtPath","info","require","resolve","mod","setup","Error","modules","registerModules","module","registerModule","FilePathSymbol","reloadModules","paths","Set","add","unregisterModule","cache","e","error","CommandClientSymbol","runModuleHook","_","remove","hookName","args","functions","getModuleHookStore","call","registerEventEmitter","set","_Registry","init_structures","__esmMin","init_Registry","init_CommandClient","import_chalk","import_discord","Extension","init_Extension","__esmMin","init_converter","init_structures","_logger","commandClient","CommandClient","getFromModule","client","discord","logger","getSubLogger","name","chalk","green","constructor","convertArguments","component","argList","args","getConverterArgs","__async","items","Collection","extension","registry","extensions","converter","getComponentsWithType","ConverterComponent","options","set","type","ext","index","arg","get","undefined","converterArgs","execute","_Extension","import_chalk","CTSExtension","init_CTSExtension","__esmMin","init_Extension","Extension","logger","_logger","commandClient","ctsLogger","getSubLogger","name","chalk","green","constructor","_CTSExtension","import_chalk","import_discord","import_v10","ApplicationCommandExtension","init_ApplicationCommand","init_ApplicationCommandOption","init_core","init_CTSExtension","CTSExtension","constructor","config","unmanagedCommands","registerUnmanagedCommand","command","push","interactionCreate","i","__async","isCommand","cmd","ext","extensions","commandClient","registry","subcommand","subcommandGroup","isChatInputCommand","options","getSubcommand","getSubcommandGroup","extLoop","extension","components","getComponentsWithType","ApplicationCommandComponent","subcommandGroupChild","parent","name","commandName","argList","convertArguments","argTypes","idx","arg","value","decorator","decorators","ApplicationCommandOption","ApplicationCommandOptionType","Subcommand","SubcommandGroup","includes","type","get","executeGlobalHook","execute","e","emit","sync","client","logger","info","commands","guildCommands","Collection","subcommandGroups","getComponentsWithTypeGlobal","group","__spreadProps","__spreadValues","ApplicationCommandType","ChatInput","guilds","guild","set","option","find","x","child","executeHook","_a","_b","rest","g","size","fetch","chalk","green","length","map","blue","join","id","error","message","application","chatInteraction","messageInteraction","userInteraction","commandInteraction","_ApplicationCommandExtension","listener","event","argConverter","component","parameterless","ChatInputCommandInteraction","MessageContextMenuCommandInteraction","UserContextMenuCommandInteraction","CommandInteraction","TextCommandComponent","command","init_TextCommand","__esmMin","init_decoratorCreator","init_BaseComponent","BaseComponent","constructor","options","_TextCommandComponent","__name","createComponentDecorator","TextCommandRestOption","rest","init_parameters","__esmMin","init_core","ComponentArgumentDecorator","_TextCommandRestOption","createArgumentDecorator","import_discord","TextCommandExtension","init_listener","init_CTSExtension","init_TextCommand","init_parameters","init_core","CTSExtension","constructor","config","processPrefix","msg","__async","content","prefix","startsWith","length","Array","p","find","x","messageCreate","startIndex","slice","commands","extensions","Map","ext","commandClient","registry","cmd","getComponentsWithType","TextCommandComponent","push","set","commandNameLength","command","names","options","name","aliases","get","args","argStrings","split","convertArguments","argTypes","arg","i","converter","parameterless","decorators","TextCommandRestOption","text","join","shift","execute","e","emit","mesage","str","value","num","Number","_TextCommandExtension","listener","event","emitter","argConverter","component","type","Message","String","CommandClient_exports","__export","CommandClient","import_chalk","import_discord","import_events","import_tslog","init_CommandClient","__esmMin","init_ApplicationCommandExtension","init_TextCommandExtension","init_symbols","init_Registry","EventEmitter","constructor","discord","logger","Logger","prettyLogTimeZone","loggerOptions","ctsLogger","registry","owners","Set","getSubLogger","__spreadProps","__spreadValues","name","Registry","registerEventEmitter","isOwner","user","__async","has","id","fetchOwners","application","Error","info","fetch","owner","User","add","push","tag","Team","member","members","chalk","green","length","map","x","blue","join","enableApplicationCommandsExtension","config","registerModule","ApplicationCommandExtension","enableTextCommandsExtension","TextCommandExtension","getApplicationCommandsExtension","extensions","find","getFromModule","ext","Reflect","getMetadata","CommandClientSymbol","_CommandClient","import_discord","BaseComponent","init_BaseComponent","__esmMin","init_ComponentArgument","method","hooks","Collection","argTypes","_init","i","length","element","set","ComponentArgument","executeGlobalHook","target","name","args","__async","CommandClient","client","getFromModule","globalHooks","registry","fn","call","executeHook","hook","get","unshift","execute","beforeCallArgs","result","e","_BaseComponent","import_reflect_metadata","init_components","__esmMin","init_decoratorCreator","init_ComponentArgument","init_ComponentArgumentDecorator","init_BaseComponent","OwnerOnlyError","init_errors","__esmMin","_OwnerOnlyError","import_discord","createCheckDecorator","ownerOnly","init_checks","__esmMin","init_hooks","init_errors","__name","fn","createComponentHook","client","i","isOwner","BaseInteraction","user","Message","author","OwnerOnlyError","mergeMethodDecorators","init_decorators","__esmMin","__name","decorators","target","key","descriptor","decorator","init_utils","__esmMin","init_checks","init_errors","init_decorators","init_extensions","__esmMin","init_Extension","init_core","__esmMin","init_components","init_hooks","init_converter","init_utils","init_listener","init_structures","init_extensions","src_exports","__export","ApplicationCommandComponent","ApplicationCommandExtension","BaseComponent","CommandClient","ComponentArgument","ComponentArgumentDecorator","ConverterComponent","Extension","ListenerComponent","OwnerOnlyError","Registry","SubCommandGroup","SubCommandGroupChild","TextCommandComponent","TextCommandRestOption","applicationCommand","argConverter","command","createArgumentDecorator","createCheckDecorator","createComponentDecorator","createComponentHook","getComponent","getComponentArgumentStore","getComponentStore","getModuleHookStore","listener","mergeMethodDecorators","moduleHook","option","ownerOnly","rest","__toCommonJS","init_core","init_ApplicationCommand","init_ApplicationCommandOption","import_discord","init_core","init_ApplicationCommand","SubCommandGroup","constructor","options","guilds","command","cmd","ApplicationCommandComponent","__spreadValues","type","ApplicationCommandType","ChatInput","subcommandGroup","createComponentDecorator","createChild","SubCommandGroupChild","_SubCommandGroup","parent","subcommandGroupChild","_SubCommandGroupChild","init_ApplicationCommandExtension","init_TextCommand","init_parameters"]}
package/package.json CHANGED
@@ -1,34 +1,36 @@
1
1
  {
2
2
  "name": "@pikokr/command.ts",
3
3
  "description": "Discord.js command framework for typescript.",
4
- "version": "5.6.1-dev.1",
4
+ "version": "5.6.2-dev.1",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
8
8
  "devDependencies": {
9
9
  "@discordjs/ts-docgen": "^0.4.1",
10
- "@swc/core": "1.2.223",
11
- "@types/lodash": "4.14.184",
12
- "@typescript-eslint/eslint-plugin": "latest",
13
- "@typescript-eslint/parser": "latest",
14
- "all-contributors-cli": "6.20.0",
15
- "discord.js": "14.8.0",
16
- "dotenv": "16.0.1",
17
- "eslint": "latest",
18
- "eslint-config-prettier": "^8.8.0",
19
- "eslint-plugin-prettier": "^4.2.1",
20
- "prettier": "2.7.1",
21
- "rimraf": "3.0.2",
22
- "semantic-release": "^21.0.0",
10
+ "@swc/core": "1.3.78",
11
+ "@types/lodash": "4.14.197",
12
+ "@typescript-eslint/eslint-plugin": "^6.4.1",
13
+ "@typescript-eslint/parser": "^6.4.1",
14
+ "all-contributors-cli": "6.26.1",
15
+ "discord-api-types": "^0.37.54",
16
+ "discord.js": "14.13.0",
17
+ "dotenv": "16.3.1",
18
+ "eslint": "^8.47.0",
19
+ "eslint-config-prettier": "^9.0.0",
20
+ "eslint-plugin-prettier": "^5.0.0",
21
+ "prettier": "3.0.2",
22
+ "rimraf": "5.0.1",
23
+ "semantic-release": "^21.0.9",
23
24
  "ts-node": "10.9.1",
24
- "tslog": "^4.7.1",
25
- "tsup": "6.2.1",
26
- "typedoc": "^0.23.28",
27
- "typescript": "^4.7.4"
25
+ "tslog": "^4.9.1",
26
+ "tsup": "7.2.0",
27
+ "typedoc": "^0.24.8",
28
+ "typescript": "^5.1.6",
29
+ "utility-types": "^3.10.0"
28
30
  },
29
31
  "dependencies": {
30
- "@types/node": "^16.0.0",
31
- "chalk": "4.1.2",
32
+ "@types/node": "^20.5.3",
33
+ "chalk": "5.3.0",
32
34
  "lodash": "^4.17.21",
33
35
  "reflect-metadata": "^0.1.13",
34
36
  "walk-sync": "^3.0.0"
@@ -1,21 +1,34 @@
1
1
  import chalk from 'chalk'
2
- import type { ApplicationCommandData, ApplicationCommandSubCommandData, ApplicationCommandSubGroupData, ChatInputApplicationCommandData, Interaction, Snowflake } from 'discord.js'
3
- import {
4
- ApplicationCommandOptionType,
5
- ApplicationCommandType,
6
- ChatInputCommandInteraction,
7
- Collection,
8
- CommandInteraction,
9
- InteractionType,
10
- MessageContextMenuCommandInteraction,
11
- UserContextMenuCommandInteraction,
2
+ import type { Mutable } from 'utility-types'
3
+ import type {
4
+ ApplicationCommandData,
5
+ ApplicationCommandSubCommandData,
6
+ ApplicationCommandSubGroupData,
7
+ ChatInputApplicationCommandData,
8
+ Interaction,
9
+ Snowflake,
10
+ ApplicationCommandOptionData,
12
11
  } from 'discord.js'
12
+ import { ChatInputCommandInteraction, Collection, CommandInteraction, MessageContextMenuCommandInteraction, UserContextMenuCommandInteraction } from 'discord.js'
13
+ import { ApplicationCommandOptionType, ApplicationCommandType } from 'discord-api-types/v10'
13
14
  import { ApplicationCommandComponent } from './ApplicationCommand'
14
15
  import { ApplicationCommandOption } from './ApplicationCommandOption'
15
- import { listener } from '../core/listener'
16
- import { argConverter } from '../core/converter'
16
+ import { listener } from '../core'
17
+ import { argConverter } from '../core'
17
18
  import { CTSExtension } from '../core/extensions/CTSExtension'
18
19
 
20
+ type MutableGroup = ChatInputApplicationCommandData & {
21
+ options: Mutable<ChatInputApplicationCommandData['options']>
22
+ }
23
+
24
+ type MutableSubGroup = ApplicationCommandSubGroupData & {
25
+ options: Mutable<ApplicationCommandSubGroupData['options']>
26
+ }
27
+
28
+ type MutableCommand = ChatInputApplicationCommandData & {
29
+ options: ApplicationCommandOptionData[]
30
+ }
31
+
19
32
  export type ApplicationCommandExtensionConfig = {
20
33
  guilds?: Snowflake[]
21
34
  }
@@ -27,6 +40,7 @@ export class ApplicationCommandExtension extends CTSExtension {
27
40
 
28
41
  unmanagedCommands: (ApplicationCommandData & { guilds?: Snowflake[] })[] = []
29
42
 
43
+ // noinspection JSUnusedGlobalSymbols
30
44
  registerUnmanagedCommand(command: ApplicationCommandData & { guilds?: Snowflake[] }) {
31
45
  this.unmanagedCommands.push(command)
32
46
  }
@@ -34,7 +48,7 @@ export class ApplicationCommandExtension extends CTSExtension {
34
48
  @listener({ event: 'interactionCreate' })
35
49
  async interactionCreate(i: Interaction) {
36
50
  try {
37
- if (i.type !== InteractionType.ApplicationCommand) return
51
+ if (!i.isCommand()) return
38
52
 
39
53
  let cmd: ApplicationCommandComponent | null = null
40
54
  let ext: object | null = null
@@ -44,7 +58,7 @@ export class ApplicationCommandExtension extends CTSExtension {
44
58
  let subcommand: string | null = null
45
59
  let subcommandGroup: string | null = null
46
60
 
47
- if (i.commandType === ApplicationCommandType.ChatInput) {
61
+ if (i.isChatInputCommand()) {
48
62
  subcommand = i.options.getSubcommand(false)
49
63
  subcommandGroup = i.options.getSubcommandGroup(false)
50
64
  }
@@ -139,13 +153,13 @@ export class ApplicationCommandExtension extends CTSExtension {
139
153
 
140
154
  for (const command of client.registry.getComponentsWithTypeGlobal<ApplicationCommandComponent>(ApplicationCommandComponent)) {
141
155
  if (command.subcommandGroup) {
142
- let group = subcommandGroups.get(command.subcommandGroup.options.name)
156
+ let group = subcommandGroups.get(command.subcommandGroup.options.name) as MutableGroup
143
157
 
144
158
  if (!group) {
145
159
  group = {
146
160
  ...command.subcommandGroup.options,
147
161
  type: ApplicationCommandType.ChatInput,
148
- }
162
+ } as MutableGroup
149
163
 
150
164
  if (command.subcommandGroup.guilds) {
151
165
  for (const guild of command.subcommandGroup.guilds) {
@@ -174,18 +188,18 @@ export class ApplicationCommandExtension extends CTSExtension {
174
188
  }
175
189
  }
176
190
 
177
- group.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as ApplicationCommandSubCommandData)
191
+ group.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as Mutable<ApplicationCommandSubCommandData>)
178
192
 
179
193
  continue
180
194
  } else if (command.subcommandGroupChild) {
181
195
  const parent = command.subcommandGroupChild.parent
182
- let group = subcommandGroups.get(parent.options.name)
196
+ let group = subcommandGroups.get(parent.options.name) as MutableGroup
183
197
 
184
198
  if (!group) {
185
199
  group = {
186
200
  ...parent.options,
187
201
  type: ApplicationCommandType.ChatInput,
188
- }
202
+ } as MutableGroup
189
203
 
190
204
  if (parent.guilds) {
191
205
  for (const guild of parent.guilds) {
@@ -204,10 +218,13 @@ export class ApplicationCommandExtension extends CTSExtension {
204
218
 
205
219
  if (!group.options) group.options = []
206
220
 
207
- let child = group.options.find((x) => x.name === command.subcommandGroupChild?.options.name) as ApplicationCommandSubGroupData
221
+ let child = group.options.find((x) => x.name === command.subcommandGroupChild?.options.name) as MutableSubGroup
208
222
 
209
223
  if (!child) {
210
- child = { ...(command.subcommandGroupChild.options as Omit<ApplicationCommandSubGroupData, 'type'>), type: ApplicationCommandOptionType.SubcommandGroup }
224
+ child = {
225
+ ...(command.subcommandGroupChild.options as Omit<ApplicationCommandSubGroupData, 'type'>),
226
+ type: ApplicationCommandOptionType.SubcommandGroup,
227
+ } as MutableSubGroup
211
228
  group.options.push(child)
212
229
  }
213
230
 
@@ -223,12 +240,12 @@ export class ApplicationCommandExtension extends CTSExtension {
223
240
  }
224
241
  }
225
242
 
226
- child.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as ApplicationCommandSubCommandData)
243
+ child.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as Mutable<ApplicationCommandSubCommandData>)
227
244
 
228
245
  continue
229
246
  }
230
247
 
231
- const cmd: ApplicationCommandData = { ...command.options }
248
+ const cmd = { ...command.options } as MutableCommand
232
249
 
233
250
  if (cmd.type === ApplicationCommandType.ChatInput) {
234
251
  cmd.options = []
@@ -269,7 +286,6 @@ export class ApplicationCommandExtension extends CTSExtension {
269
286
  }
270
287
  commands.push(rest)
271
288
  }
272
- continue
273
289
  } else {
274
290
  commands.push(rest)
275
291
  }
@@ -61,6 +61,8 @@ export const getComponentArgumentStore = (target: object, key: string | symbol):
61
61
  export const createArgumentDecorator = <Options>(type: typeof ComponentArgumentDecorator<Options>) => {
62
62
  return (options: Options): ParameterDecorator => {
63
63
  return (target, key, idx) => {
64
+ if (!key) return
65
+
64
66
  const arg: ComponentArgumentDecorator<Options> = new type(options)
65
67
 
66
68
  const store = getComponentArgumentStore(target, key)