@pikokr/command.ts 5.6.0-dev.3 → 5.6.0-dev.5

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -4,8 +4,9 @@
4
4
  <a href="https://cts.pikokr.dev"><img src="https://user-images.githubusercontent.com/47320945/213408015-daf06ba4-687d-4b1c-b255-d42e3a590d1e.png" width="546" alt="discord.js" /></a>
5
5
  </p>
6
6
 
7
- [![.github/workflows/publish.yml](https://github.com/pikokr/command.ts/actions/workflows/publish.yml/badge.svg)](https://github.com/pikokr/command.ts/actions/workflows/publish.yml) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
7
+ [![Release](https://github.com/pikokr/command.ts/actions/workflows/release.yml/badge.svg)](https://github.com/pikokr/command.ts/actions/workflows/release.yml) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
8
8
  [![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-)
9
+
9
10
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
10
11
 
11
12
  ## About
package/dist/index.d.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  import * as discord_js from 'discord.js';
2
- import { Collection, Snowflake, ApplicationCommandData, Interaction, ChatInputCommandInteraction, MessageContextMenuCommandInteraction, UserContextMenuCommandInteraction, Message, Client, User, APIApplicationCommandSubcommandOption, ChatInputApplicationCommandData, UserApplicationCommandData, MessageApplicationCommandData, ApplicationCommandType, APIApplicationCommandOption } from 'discord.js';
2
+ import { Collection, Snowflake, ApplicationCommandData, Interaction, ChatInputCommandInteraction, MessageContextMenuCommandInteraction, UserContextMenuCommandInteraction, Message, Client, User, ChatInputApplicationCommandData, ApplicationCommandSubGroupData, UserApplicationCommandData, MessageApplicationCommandData, ApplicationCommandType, ApplicationCommandOptionData } from 'discord.js';
3
3
  import EventEmitter from 'events';
4
4
  import * as tslog from 'tslog';
5
5
  import { Logger, ISettingsParam } from 'tslog';
6
6
 
7
- type AnyFunction = (...args: unknown[]) => unknown;
7
+ declare type AnyFunction = (...args: unknown[]) => unknown;
8
8
 
9
- type ComponentHookFn<T extends unknown[]> = (...args: T) => void | Promise<void>;
10
- type ComponentHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
9
+ declare type ComponentHookFn<T extends unknown[]> = (...args: T) => void | Promise<void>;
10
+ declare type ComponentHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
11
11
  declare const createComponentHook: <T extends unknown[]>(name: string, fn: ComponentHookFn<T>) => MethodDecorator;
12
12
 
13
- type ModuleHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
13
+ declare 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
- type ComponentStore = Collection<string | symbol, BaseComponent>;
40
- type ComponentArgumentStore = Collection<number, ComponentArgumentDecorator>;
39
+ declare type ComponentStore = Collection<string | symbol, BaseComponent>;
40
+ declare 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
- type Options$2<T> = {
49
+ declare type Options$2<T> = {
50
50
  component: unknown;
51
51
  type: T;
52
52
  parameterless: boolean;
53
53
  };
54
- type OptionsArg$1<T> = Omit<Options$2<T>, 'parameterless'> & {
54
+ declare 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
- type ApplicationCommandExtensionConfig = {
75
+ declare 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
- type TextCommandOptions = {
95
+ declare 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
- type TextCommandConfig = {
106
+ declare 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
- type Options$1 = {
169
+ declare type Options$1 = {
170
170
  emitter: string;
171
171
  event: string;
172
172
  };
173
- type OptionsArg = {
173
+ declare type OptionsArg = {
174
174
  emitter?: string;
175
175
  event: string;
176
176
  };
@@ -181,20 +181,20 @@ declare class ListenerComponent extends BaseComponent {
181
181
  declare const listener: (options: OptionsArg) => MethodDecorator;
182
182
 
183
183
  declare class SubCommandGroup {
184
- options: Omit<APIApplicationCommandSubcommandOption, 'type'>;
184
+ options: Omit<ChatInputApplicationCommandData, 'type'>;
185
185
  guilds?: string[] | undefined;
186
- constructor(options: Omit<APIApplicationCommandSubcommandOption, 'type'>, guilds?: string[] | undefined);
187
- command(options: Omit<ChatInputApplicationCommandData, 'options' | 'type'>): MethodDecorator;
188
- createChild(options: Omit<APIApplicationCommandSubcommandOption, 'type'>): SubCommandGroupChild;
186
+ constructor(options: Omit<ChatInputApplicationCommandData, 'type'>, guilds?: string[] | undefined);
187
+ command(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>): MethodDecorator;
188
+ createChild(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>): SubCommandGroupChild;
189
189
  }
190
190
  declare class SubCommandGroupChild {
191
- options: Omit<APIApplicationCommandSubcommandOption, 'type'>;
191
+ options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>;
192
192
  parent: SubCommandGroup;
193
- constructor(options: Omit<APIApplicationCommandSubcommandOption, 'type'>, parent: SubCommandGroup);
193
+ constructor(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>, parent: SubCommandGroup);
194
194
  command(options: Omit<ChatInputApplicationCommandData, 'options' | 'type'>): MethodDecorator;
195
195
  }
196
196
 
197
- type Options = (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & {
197
+ declare type Options = (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & {
198
198
  type: ApplicationCommandType;
199
199
  guilds?: Snowflake[];
200
200
  };
@@ -206,6 +206,6 @@ declare class ApplicationCommandComponent extends BaseComponent {
206
206
  }
207
207
  declare const applicationCommand: (options: Options) => MethodDecorator;
208
208
 
209
- declare const option: (options: APIApplicationCommandOption) => ParameterDecorator;
209
+ declare const option: (options: ApplicationCommandOptionData) => ParameterDecorator;
210
210
 
211
211
  export { ApplicationCommandComponent, Options as ApplicationCommandComponentOptions, ApplicationCommandExtension, ApplicationCommandExtensionConfig, Options$2 as ArgumentConvertOptions, OptionsArg$1 as ArgumentConvertOptionsArg, BaseComponent, CommandClient, ComponentArgument, ComponentArgumentDecorator, ComponentArgumentStore, ComponentHookFn, ComponentHookStore, ComponentStore, ConverterComponent, Extension, ListenerComponent, Options$1 as ListenerOptions, OptionsArg as ListenerOptionsArg, ModuleHookStore, OwnerOnlyError, Registry, SubCommandGroup, SubCommandGroupChild, TextCommandComponent, TextCommandConfig, TextCommandOptions, TextCommandRestOption, applicationCommand, argConverter, command, createArgumentDecorator, createCheckDecorator, createComponentDecorator, createComponentHook, getComponent, getComponentArgumentStore, getComponentStore, getModuleHookStore, listener, mergeMethodDecorators, moduleHook, option, ownerOnly, rest };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var no=Object.create;var B=Object.defineProperty;var ro=Object.getOwnPropertyDescriptor;var so=Object.getOwnPropertyNames;var io=Object.getPrototypeOf,ao=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 o in t)B(r,o,{get:t[o],enumerable:!0})},Lt=(r,t,o,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of so(t))!ao.call(r,s)&&s!==o&&B(r,s,{get:()=>t[s],enumerable:!(e=ro(t,s))||e.enumerable});return r};var C=(r,t,o)=>(o=r!=null?no(io(r)):{},Lt(t||!r||!r.__esModule?B(o,"default",{value:r,enumerable:!0}):o,r)),co=r=>Lt(B({},"__esModule",{value:!0}),r);var z,bo,ft,Y,ut,tt,F=f(()=>{"use strict";z=Symbol(),bo=Symbol(),ft=Symbol(),Y=Symbol(),ut=Symbol(),tt=Symbol()});var Et,dt,ot,gt=f(()=>{"use strict";Et=require("discord.js");F();dt=c((r,t)=>{let o=Reflect.getMetadata(ut,r,t);return o||(o=new Et.Collection,Reflect.defineMetadata(ut,o,r,t)),o},"getComponentHookStore"),ot=c((r,t)=>(o,e)=>{let s=dt(o,e),n=s.get(r);n||(n=[],s.set(r,n)),n.unshift(t)},"createComponentHook")});var ht,Z,mo,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"),mo=c((r,t)=>Z(r).get(t),"getComponent"),y=c(r=>(t,o)=>{r._init(Reflect.get(t,o),Reflect.getMetadata("design:paramtypes",t,o));let e=dt(t,o);r.hooks=e;let s=Z(t);yt(t,o).forEach((a,i)=>{var m;(m=r.argTypes.get(i))==null||m.decorators.push(a)}),s.set(o,r)},"createComponentDecorator"),yt=c((r,t)=>{let o=Reflect.getMetadata(z,r,t);return o||(o=new ht.Collection,Reflect.defineMetadata(z,o,r,t)),o},"getComponentArgumentStore"),J=c(r=>t=>(o,e,s)=>{let n=new r(t);yt(o,e).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,po,et=f(()=>{"use strict";$();W();h=class extends x{constructor(t){super(),this.options=t}};c(h,"ApplicationCommandComponent");po=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,lo,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"),lo=c(r=>(t,o)=>{let e=rt(t),s=e.get(r);s||(s=[],e.set(r,s)),s.push(Reflect.get(t,o))},"moduleHook")});var st=f(()=>{"use strict";Pt();gt()});var D,Nt,Ut,qt,Bt,P,Ct=f(()=>{"use strict";D=C(require("chalk")),Nt=require("discord.js"),Ut=C(require("lodash"));wt();st();Q();F();qt=C(require("walk-sync")),Bt=C(require("path")),P=class{constructor(t,o){this.client=o,this.extensions=[],this.emitters=new Nt.Collection,this.globalHooks={},this.logger=t.getSubLogger({name:D.default.green("Registry")})}addGlobalHook(t,o){let e=this.globalHooks[t];e||(e=[],this.globalHooks[t]=e),e.push(o)}getComponentsWithTypeGlobal(t){let o=[];for(let e of this.extensions)o.push(...this.getComponentsWithType(e,t));return o}getComponentsWithType(t,o){let e=Z(t);return Array.from(e.filter(s=>s.constructor===o).values())}registerEventListeners(t){let o=this.getComponentsWithType(t,I);for(let e of o){let s=this.emitters.get(e.options.emitter);if(s){let n=e.method.bind(t);Reflect.defineMetadata("bound",n,e),s.addListener(e.options.event,n)}}}unregisterEventListeners(t){let o=this.getComponentsWithType(t,I);for(let e of o){let s=this.emitters.get(e.options.emitter),n=Reflect.getMetadata("bound",e);s&&n&&s.removeListener(e.options.event,n)}}async loadAllModulesInDirectory(t,o){let e=[],s=(0,qt.default)(t).filter(n=>(n.endsWith(".ts")||n.endsWith(".js"))&&(!o||o.test(n)));for(let n of s){if(n.endsWith(".d.ts"))continue;let a=Bt.default.join(t,n);e.push(...await this.loadModulesAtPath(a))}return e}async loadModulesAtPath(t){this.logger.info(`Loading module at path ${D.default.green(t)}`);let o=require.resolve(t),e=await import(o);if(typeof e.setup!="function")throw new Error("Extension must have a setup function");let s=await e.setup(this.client);return this.registerModules(s,o)}async registerModules(t,o){let e=[];if(t instanceof Array)for(let s of t)await this.registerModule(s),Reflect.defineMetadata(tt,o,s),e.push(s);else await this.registerModule(t),Reflect.defineMetadata(tt,o,t),e.push(t);return e}async reloadModules(){let t=[],o=new Set,e=[...this.extensions];for(let s of e){let n=Reflect.getMetadata(tt,s);!n||(this.logger.info(`Unloading module: ${D.default.green(s.constructor.name)}`),o.add(n),await this.unregisterModule(s),delete require.cache[require.resolve(n)])}for(let s of o)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"),Ut.default.remove(this.extensions,o=>o===t),this.logger.info(`Module unregistered: ${D.default.green(t.constructor.name)}`)}runModuleHook(t,o,...e){let n=rt(t).get(o);if(n)for(let a of n)a.call(t,...e)}registerEventEmitter(t,o){this.emitters.set(t,o)}};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,o,e,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 e){let m=n.get(i.type);if(!m){o[a]=void 0;continue}let d=await s(i,a,m.component);o[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");et();bt();Q();nt();kt();V=function(r,t,o,e){var s=arguments.length,n=s<3?t:e===null?e=Object.getOwnPropertyDescriptor(t,o):e,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,o,e);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,o,n):a(t,o))||n);return s>3&&n&&Object.defineProperty(t,o,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 o;try{if(t.type!==p.InteractionType.ApplicationCommand)return;let e=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,e=l;break t}if(l.subcommandGroup&&!i&&l.subcommandGroup.options.name===t.commandName&&l.options.name===a){s=m,e=l;break t}}}else for(let l of d)if(l.options.name===t.commandName){s=m,e=l;break t}}if(e&&s){let m=[];await this.convertArguments(h,m,e.argTypes,()=>[t]);for(let[d,l]of e.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=(o=t.options.get(u.options.name,!1))==null?void 0:o.value;break}g&&(m[d]=g)}try{await e.executeGlobalHook(s,"beforeApplicationCommandCall",[t]),await e.execute(s,m,[t])}finally{await e.executeGlobalHook(s,"afterApplicationCommandCall",[t])}}}catch(e){this.commandClient.emit("applicationCommandInvokeError",e,t)}}async sync(){let t=this.commandClient;this.logger.info("Trying to sync commands...");let o=[],e=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=e.get(d);l||(l=[],e.set(d,l))}else o.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=e.get(g);u||(u=[],e.set(g,u))}else o.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={type:p.ApplicationCommandOptionType.SubcommandGroup,...n.subcommandGroupChild.options},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=e.get(i);m||(m=[],e.set(i,m)),m.push(a)}continue}o.push(a)}for(let{guilds:n,...a}of this.unmanagedCommands)if(n){for(let i of n){let m=e.get(i);m||(m=[],e.set(i,m)),m.push(a)}continue}else o.push(a);if(this.config.guilds){for(let n of this.config.guilds){let a=e.get(n);a||(a=[],e.set(n,a)),a.push(...o)}o=[]}if(e.size)for(let[n,a]of e)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(o.length)try{this.logger.info(`Processing ${M.default.green(o.length)} commands(${o.map(n=>M.default.blue(n.name)).join(", ")}) for application scope...`),this.client.application?(await this.client.application.commands.set(o),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,fo,Ht=f(()=>{"use strict";$();W();w=class extends x{constructor(t){super(),this.options=t}};c(w,"TextCommandComponent");fo=c(r=>y(new w(r)),"command")});var E,uo,Rt=f(()=>{"use strict";T();T();E=class extends G{};c(E,"TextCommandRestOption");uo=J(E)});var U,at,_,R,Kt=f(()=>{"use strict";Q();U=require("discord.js");kt();Ht();Rt();T();at=function(r,t,o,e){var s=arguments.length,n=s<3?t:e===null?e=Object.getOwnPropertyDescriptor(t,o):e,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,o,e);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,o,n):a(t,o))||n);return s>3&&n&&Object.defineProperty(t,o,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 o=t.content,e=this.config.prefix;if(typeof e=="function"&&(e=await e(t)),typeof e=="string")return o.startsWith(e)?e.length:null;if(e instanceof Array){let s=e.find(n=>o.startsWith(n));return s?s.length:null}return null}async messageCreate(t){try{let o=await this.processPrefix(t);if(o===null)return;let e=t.content.slice(o),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(e.startsWith(v))return e.length===v.length?(a=v.length,!0):(a=v.length,e.startsWith(v+" "));return!1});if(!i)return;let m=n.get(i);if(!m)return;t.command=i;let d=[],l=e.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(o){this.commandClient.emit("textCommandInvokeError",o,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 U.Message>"u"?Object:U.Message])],R.prototype,"messageCreate",null);at([S({component:w,type:U.Message,parameterless:!0}),_("design:type",Function),_("design:paramtypes",[typeof U.Message>"u"?Object:U.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,o=new Vt.Logger({prettyLogTimeZone:"local"}),e={}){super(),this.discord=t,this.logger=o,this.owners=new Set,this.ctsLogger=o.getSubLogger({...e,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 o=[];if(t instanceof ct.User)this.owners.add(t.id),o.push(t.tag);else if(t instanceof ct.Team)for(let[e,s]of t.members)this.owners.add(e),o.push(s.user.tag);this.ctsLogger.info(`Fetched ${Gt.default.green(o.length)} owners(${o.map(e=>Gt.default.blue(e)).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,o){this.method=t;for(let e=0;e<o.length;e++){let s=o[e];this.argTypes.set(e,new O(s))}}async executeGlobalHook(t,o,e){let{CommandClient:s}=await Promise.resolve().then(()=>(it(),It)),n=s.getFromModule(t),a=n.registry.globalHooks[o];if(a)for(let i of a)await i.call(null,n,...e)}async executeHook(t,o,e){let s=this.hooks.get(o);if(!s)return;let{CommandClient:n}=await Promise.resolve().then(()=>(it(),It)),a=n.getFromModule(t),i=a.registry.globalHooks[o];i&&s.unshift(...i);for(let m of s)await m.call(null,a,...e)}async execute(t,o,e=o){await this.executeHook(t,"beforeCall",e);let s;try{s=await this.method.call(t,...o),await this.executeHook(t,"afterCall",[...e,s])}catch(n){throw await this.executeHook(t,"invokeError",[n,...e]),n}return s}};c(x,"BaseComponent")});var Re,wt=f(()=>{"use strict";Re=require("reflect-metadata");$();xt();$t();W()});var q,Tt=f(()=>{"use strict";q=class{};c(q,"OwnerOnlyError")});var mt,Xt,go,Yt=f(()=>{"use strict";mt=require("discord.js");st();Tt();Xt=c(r=>ot("beforeCall",r),"createCheckDecorator"),go=Xt(async(r,t)=>{let o=!1;if(t instanceof mt.BaseInteraction?o=await r.isOwner(t.user):t instanceof mt.Message&&(o=await r.isOwner(t.author)),!o)throw new q})});var ho,to=f(()=>{"use strict";ho=c(r=>(t,o,e)=>{for(let s of r)s(t,o,e)},"mergeMethodDecorators")});var oo=f(()=>{"use strict";Yt();Tt();to()});var eo=f(()=>{"use strict";Mt()});var T=f(()=>{"use strict";wt();st();nt();oo();Q();St();eo()});var yo={};At(yo,{ApplicationCommandComponent:()=>h,ApplicationCommandExtension:()=>b,BaseComponent:()=>x,CommandClient:()=>A,ComponentArgument:()=>O,ComponentArgumentDecorator:()=>G,ConverterComponent:()=>j,Extension:()=>N,ListenerComponent:()=>I,OwnerOnlyError:()=>q,Registry:()=>P,SubCommandGroup:()=>pt,SubCommandGroupChild:()=>X,TextCommandComponent:()=>w,TextCommandRestOption:()=>E,applicationCommand:()=>po,argConverter:()=>S,command:()=>fo,createArgumentDecorator:()=>J,createCheckDecorator:()=>Xt,createComponentDecorator:()=>y,createComponentHook:()=>ot,getComponent:()=>mo,getComponentArgumentStore:()=>yt,getComponentStore:()=>Z,getModuleHookStore:()=>rt,listener:()=>K,mergeMethodDecorators:()=>ho,moduleHook:()=>lo,option:()=>Ot,ownerOnly:()=>go,rest:()=>uo});module.exports=co(yo);T();et();bt();var jt=require("discord.js");T();et();var pt=class{constructor(t,o){this.options=t,this.guilds=o}command(t){let o=new h({type:jt.ApplicationCommandType.ChatInput,...t});return o.subcommandGroup=this,y(o)}createChild(t){return new X(t,this)}};c(pt,"SubCommandGroup");var X=class{constructor(t,o){this.options=t,this.parent=o}command(t){let o=new h({type:jt.ApplicationCommandType.ChatInput,...t});return o.subcommandGroupChild=this,y(o)}};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 no=Object.create;var B=Object.defineProperty;var ro=Object.getOwnPropertyDescriptor;var so=Object.getOwnPropertyNames;var io=Object.getPrototypeOf,ao=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 o in t)B(r,o,{get:t[o],enumerable:!0})},Lt=(r,t,o,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of so(t))!ao.call(r,s)&&s!==o&&B(r,s,{get:()=>t[s],enumerable:!(e=ro(t,s))||e.enumerable});return r};var C=(r,t,o)=>(o=r!=null?no(io(r)):{},Lt(t||!r||!r.__esModule?B(o,"default",{value:r,enumerable:!0}):o,r)),co=r=>Lt(B({},"__esModule",{value:!0}),r);var z,bo,ft,Y,ut,tt,F=f(()=>{"use strict";z=Symbol(),bo=Symbol(),ft=Symbol(),Y=Symbol(),ut=Symbol(),tt=Symbol()});var Et,dt,ot,gt=f(()=>{"use strict";Et=require("discord.js");F();dt=c((r,t)=>{let o=Reflect.getMetadata(ut,r,t);return o||(o=new Et.Collection,Reflect.defineMetadata(ut,o,r,t)),o},"getComponentHookStore"),ot=c((r,t)=>(o,e)=>{let s=dt(o,e),n=s.get(r);n||(n=[],s.set(r,n)),n.unshift(t)},"createComponentHook")});var ht,Z,mo,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"),mo=c((r,t)=>Z(r).get(t),"getComponent"),y=c(r=>(t,o)=>{r._init(Reflect.get(t,o),Reflect.getMetadata("design:paramtypes",t,o));let e=dt(t,o);r.hooks=e;let s=Z(t);yt(t,o).forEach((a,i)=>{var m;(m=r.argTypes.get(i))==null||m.decorators.push(a)}),s.set(o,r)},"createComponentDecorator"),yt=c((r,t)=>{let o=Reflect.getMetadata(z,r,t);return o||(o=new ht.Collection,Reflect.defineMetadata(z,o,r,t)),o},"getComponentArgumentStore"),J=c(r=>t=>(o,e,s)=>{let n=new r(t);yt(o,e).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,po,et=f(()=>{"use strict";$();W();h=class extends x{constructor(t){super(),this.options=t}};c(h,"ApplicationCommandComponent");po=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,lo,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"),lo=c(r=>(t,o)=>{let e=rt(t),s=e.get(r);s||(s=[],e.set(r,s)),s.push(Reflect.get(t,o))},"moduleHook")});var st=f(()=>{"use strict";Pt();gt()});var D,Nt,Ut,qt,Bt,P,Ct=f(()=>{"use strict";D=C(require("chalk")),Nt=require("discord.js"),Ut=C(require("lodash"));wt();st();Q();F();qt=C(require("walk-sync")),Bt=C(require("path")),P=class{constructor(t,o){this.client=o,this.extensions=[],this.emitters=new Nt.Collection,this.globalHooks={},this.logger=t.getSubLogger({name:D.default.green("Registry")})}addGlobalHook(t,o){let e=this.globalHooks[t];e||(e=[],this.globalHooks[t]=e),e.push(o)}getComponentsWithTypeGlobal(t){let o=[];for(let e of this.extensions)o.push(...this.getComponentsWithType(e,t));return o}getComponentsWithType(t,o){let e=Z(t);return Array.from(e.filter(s=>s.constructor===o).values())}registerEventListeners(t){let o=this.getComponentsWithType(t,I);for(let e of o){let s=this.emitters.get(e.options.emitter);if(s){let n=e.method.bind(t);Reflect.defineMetadata("bound",n,e),s.addListener(e.options.event,n)}}}unregisterEventListeners(t){let o=this.getComponentsWithType(t,I);for(let e of o){let s=this.emitters.get(e.options.emitter),n=Reflect.getMetadata("bound",e);s&&n&&s.removeListener(e.options.event,n)}}async loadAllModulesInDirectory(t,o){let e=[],s=(0,qt.default)(t).filter(n=>(n.endsWith(".ts")||n.endsWith(".js"))&&(!o||o.test(n)));for(let n of s){if(n.endsWith(".d.ts"))continue;let a=Bt.default.join(t,n);e.push(...await this.loadModulesAtPath(a))}return e}async loadModulesAtPath(t){this.logger.info(`Loading module at path ${D.default.green(t)}`);let o=require.resolve(t),e=await import(o);if(typeof e.setup!="function")throw new Error("Extension must have a setup function");let s=await e.setup(this.client);return this.registerModules(s,o)}async registerModules(t,o){let e=[];if(t instanceof Array)for(let s of t)await this.registerModule(s),Reflect.defineMetadata(tt,o,s),e.push(s);else await this.registerModule(t),Reflect.defineMetadata(tt,o,t),e.push(t);return e}async reloadModules(){let t=[],o=new Set,e=[...this.extensions];for(let s of e){let n=Reflect.getMetadata(tt,s);!n||(this.logger.info(`Unloading module: ${D.default.green(s.constructor.name)}`),o.add(n),await this.unregisterModule(s),delete require.cache[require.resolve(n)])}for(let s of o)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"),Ut.default.remove(this.extensions,o=>o===t),this.logger.info(`Module unregistered: ${D.default.green(t.constructor.name)}`)}runModuleHook(t,o,...e){let n=rt(t).get(o);if(n)for(let a of n)a.call(t,...e)}registerEventEmitter(t,o){this.emitters.set(t,o)}};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,o,e,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 e){let m=n.get(i.type);if(!m){o[a]=void 0;continue}let d=await s(i,a,m.component);o[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");et();bt();Q();nt();kt();V=function(r,t,o,e){var s=arguments.length,n=s<3?t:e===null?e=Object.getOwnPropertyDescriptor(t,o):e,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,o,e);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,o,n):a(t,o))||n);return s>3&&n&&Object.defineProperty(t,o,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 o;try{if(t.type!==p.InteractionType.ApplicationCommand)return;let e=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,e=l;break t}if(l.subcommandGroup&&!i&&l.subcommandGroup.options.name===t.commandName&&l.options.name===a){s=m,e=l;break t}}}else for(let l of d)if(l.options.name===t.commandName){s=m,e=l;break t}}if(e&&s){let m=[];await this.convertArguments(h,m,e.argTypes,()=>[t]);for(let[d,l]of e.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=(o=t.options.get(u.options.name,!1))==null?void 0:o.value;break}g&&(m[d]=g)}try{await e.executeGlobalHook(s,"beforeApplicationCommandCall",[t]),await e.execute(s,m,[t])}finally{await e.executeGlobalHook(s,"afterApplicationCommandCall",[t])}}}catch(e){this.commandClient.emit("applicationCommandInvokeError",e,t)}}async sync(){let t=this.commandClient;this.logger.info("Trying to sync commands...");let o=[],e=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=e.get(d);l||(l=[],e.set(d,l))}else o.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=e.get(g);u||(u=[],e.set(g,u))}else o.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=e.get(i);m||(m=[],e.set(i,m)),m.push(a)}continue}o.push(a)}for(let{guilds:n,...a}of this.unmanagedCommands)if(n){for(let i of n){let m=e.get(i);m||(m=[],e.set(i,m)),m.push(a)}continue}else o.push(a);if(this.config.guilds){for(let n of this.config.guilds){let a=e.get(n);a||(a=[],e.set(n,a)),a.push(...o)}o=[]}if(e.size)for(let[n,a]of e)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(o.length)try{this.logger.info(`Processing ${M.default.green(o.length)} commands(${o.map(n=>M.default.blue(n.name)).join(", ")}) for application scope...`),this.client.application?(await this.client.application.commands.set(o),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,fo,Ht=f(()=>{"use strict";$();W();w=class extends x{constructor(t){super(),this.options=t}};c(w,"TextCommandComponent");fo=c(r=>y(new w(r)),"command")});var E,uo,Rt=f(()=>{"use strict";T();T();E=class extends G{};c(E,"TextCommandRestOption");uo=J(E)});var U,at,_,R,Kt=f(()=>{"use strict";Q();U=require("discord.js");kt();Ht();Rt();T();at=function(r,t,o,e){var s=arguments.length,n=s<3?t:e===null?e=Object.getOwnPropertyDescriptor(t,o):e,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,o,e);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,o,n):a(t,o))||n);return s>3&&n&&Object.defineProperty(t,o,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 o=t.content,e=this.config.prefix;if(typeof e=="function"&&(e=await e(t)),typeof e=="string")return o.startsWith(e)?e.length:null;if(e instanceof Array){let s=e.find(n=>o.startsWith(n));return s?s.length:null}return null}async messageCreate(t){try{let o=await this.processPrefix(t);if(o===null)return;let e=t.content.slice(o),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(e.startsWith(v))return e.length===v.length?(a=v.length,!0):(a=v.length,e.startsWith(v+" "));return!1});if(!i)return;let m=n.get(i);if(!m)return;t.command=i;let d=[],l=e.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(o){this.commandClient.emit("textCommandInvokeError",o,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 U.Message>"u"?Object:U.Message])],R.prototype,"messageCreate",null);at([S({component:w,type:U.Message,parameterless:!0}),_("design:type",Function),_("design:paramtypes",[typeof U.Message>"u"?Object:U.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,o=new Vt.Logger({prettyLogTimeZone:"local"}),e={}){super(),this.discord=t,this.logger=o,this.owners=new Set,this.ctsLogger=o.getSubLogger({...e,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 o=[];if(t instanceof ct.User)this.owners.add(t.id),o.push(t.tag);else if(t instanceof ct.Team)for(let[e,s]of t.members)this.owners.add(e),o.push(s.user.tag);this.ctsLogger.info(`Fetched ${Gt.default.green(o.length)} owners(${o.map(e=>Gt.default.blue(e)).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,o){this.method=t;for(let e=0;e<o.length;e++){let s=o[e];this.argTypes.set(e,new O(s))}}async executeGlobalHook(t,o,e){let{CommandClient:s}=await Promise.resolve().then(()=>(it(),It)),n=s.getFromModule(t),a=n.registry.globalHooks[o];if(a)for(let i of a)await i.call(null,n,...e)}async executeHook(t,o,e){let s=this.hooks.get(o);if(!s)return;let{CommandClient:n}=await Promise.resolve().then(()=>(it(),It)),a=n.getFromModule(t),i=a.registry.globalHooks[o];i&&s.unshift(...i);for(let m of s)await m.call(null,a,...e)}async execute(t,o,e=o){await this.executeHook(t,"beforeCall",e);let s;try{s=await this.method.call(t,...o),await this.executeHook(t,"afterCall",[...e,s])}catch(n){throw await this.executeHook(t,"invokeError",[n,...e]),n}return s}};c(x,"BaseComponent")});var Re,wt=f(()=>{"use strict";Re=require("reflect-metadata");$();xt();$t();W()});var q,Tt=f(()=>{"use strict";q=class{};c(q,"OwnerOnlyError")});var mt,Xt,go,Yt=f(()=>{"use strict";mt=require("discord.js");st();Tt();Xt=c(r=>ot("beforeCall",r),"createCheckDecorator"),go=Xt(async(r,t)=>{let o=!1;if(t instanceof mt.BaseInteraction?o=await r.isOwner(t.user):t instanceof mt.Message&&(o=await r.isOwner(t.author)),!o)throw new q})});var ho,to=f(()=>{"use strict";ho=c(r=>(t,o,e)=>{for(let s of r)s(t,o,e)},"mergeMethodDecorators")});var oo=f(()=>{"use strict";Yt();Tt();to()});var eo=f(()=>{"use strict";Mt()});var T=f(()=>{"use strict";wt();st();nt();oo();Q();St();eo()});var yo={};At(yo,{ApplicationCommandComponent:()=>h,ApplicationCommandExtension:()=>b,BaseComponent:()=>x,CommandClient:()=>A,ComponentArgument:()=>O,ComponentArgumentDecorator:()=>G,ConverterComponent:()=>j,Extension:()=>N,ListenerComponent:()=>I,OwnerOnlyError:()=>q,Registry:()=>P,SubCommandGroup:()=>pt,SubCommandGroupChild:()=>X,TextCommandComponent:()=>w,TextCommandRestOption:()=>E,applicationCommand:()=>po,argConverter:()=>S,command:()=>fo,createArgumentDecorator:()=>J,createCheckDecorator:()=>Xt,createComponentDecorator:()=>y,createComponentHook:()=>ot,getComponent:()=>mo,getComponentArgumentStore:()=>yt,getComponentStore:()=>Z,getModuleHookStore:()=>rt,listener:()=>K,mergeMethodDecorators:()=>ho,moduleHook:()=>lo,option:()=>Ot,ownerOnly:()=>go,rest:()=>uo});module.exports=co(yo);T();et();bt();var jt=require("discord.js");T();et();var pt=class{constructor(t,o){this.options=t,this.guilds=o}command(t){let o=new h({type:jt.ApplicationCommandType.ChatInput,...t});return o.subcommandGroup=this,y(o)}createChild(t){return new X(t,this)}};c(pt,"SubCommandGroup");var X=class{constructor(t,o){this.options=t,this.parent=o}command(t){let o=new h({type:jt.ApplicationCommandType.ChatInput,...t});return o.subcommandGroupChild=this,y(o)}};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});
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 { APIApplicationCommandOption } from 'discord.js'\nimport { createArgumentDecorator, ComponentArgumentDecorator } from '../core'\n\ntype Options = APIApplicationCommandOption\n\nexport class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}\n\nexport const option = createArgumentDecorator(ApplicationCommandOption)\n","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 const mod = await import(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 {\n APIApplicationCommandSubcommandGroupOption,\n APIApplicationCommandSubcommandOption,\n ApplicationCommandData,\n ApplicationCommandSubCommandData,\n ChatInputApplicationCommandData,\n Interaction,\n Snowflake,\n} 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 APIApplicationCommandSubcommandGroupOption | undefined\n\n if (!child) {\n child = { type: ApplicationCommandOptionType.SubcommandGroup, ...(command.subcommandGroupChild.options as Omit<APIApplicationCommandSubcommandGroupOption, 'type'>) }\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 APIApplicationCommandSubcommandOption)\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 { APIApplicationCommandSubcommandOption, 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<APIApplicationCommandSubcommandOption, 'type'>, public guilds?: string[]) {}\n\n command(options: Omit<ChatInputApplicationCommandData, '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<APIApplicationCommandSubcommandOption, 'type'>) {\n return new SubCommandGroupChild(options, this)\n }\n}\n\nexport class SubCommandGroupChild {\n constructor(public options: Omit<APIApplicationCommandSubcommandOption, '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/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 const mod = await import(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"]}
package/package.json CHANGED
@@ -1,31 +1,30 @@
1
1
  {
2
2
  "name": "@pikokr/command.ts",
3
3
  "description": "Discord.js command framework for typescript.",
4
- "version": "5.6.0-dev.3",
4
+ "version": "5.6.0-dev.5",
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
10
  "@swc/core": "1.2.223",
11
- "@types/chalk": "2.2.0",
12
11
  "@types/lodash": "4.14.184",
13
12
  "@typescript-eslint/eslint-plugin": "latest",
14
13
  "@typescript-eslint/parser": "latest",
15
14
  "all-contributors-cli": "6.20.0",
16
- "discord.js": "14.3.0",
15
+ "discord.js": "14.8.0",
17
16
  "dotenv": "16.0.1",
18
17
  "eslint": "latest",
19
18
  "eslint-config-prettier": "^8.8.0",
20
19
  "eslint-plugin-prettier": "^4.2.1",
21
20
  "prettier": "2.7.1",
22
21
  "rimraf": "3.0.2",
22
+ "semantic-release": "^21.0.0",
23
23
  "ts-node": "10.9.1",
24
24
  "tslog": "^4.7.1",
25
25
  "tsup": "6.2.1",
26
- "typedoc": "^0.23.13",
27
- "typescript": "^4.8.2",
28
- "semantic-release": "^21.0.0"
26
+ "typedoc": "^0.23.28",
27
+ "typescript": "^4.7.4"
29
28
  },
30
29
  "dependencies": {
31
30
  "@types/node": "^16.0.0",
@@ -49,7 +48,7 @@
49
48
  "semantic-release": "semantic-release"
50
49
  },
51
50
  "peerDependencies": {
52
- "discord.js": "*",
51
+ "discord.js": "14.8",
53
52
  "tslog": "*"
54
53
  },
55
54
  "release": {
@@ -1,13 +1,5 @@
1
1
  import chalk from 'chalk'
2
- import type {
3
- APIApplicationCommandSubcommandGroupOption,
4
- APIApplicationCommandSubcommandOption,
5
- ApplicationCommandData,
6
- ApplicationCommandSubCommandData,
7
- ChatInputApplicationCommandData,
8
- Interaction,
9
- Snowflake,
10
- } from 'discord.js'
2
+ import type { ApplicationCommandData, ApplicationCommandSubCommandData, ApplicationCommandSubGroupData, ChatInputApplicationCommandData, Interaction, Snowflake } from 'discord.js'
11
3
  import {
12
4
  ApplicationCommandOptionType,
13
5
  ApplicationCommandType,
@@ -212,10 +204,10 @@ export class ApplicationCommandExtension extends CTSExtension {
212
204
 
213
205
  if (!group.options) group.options = []
214
206
 
215
- let child = group.options.find((x) => x.name === command.subcommandGroupChild?.options.name) as APIApplicationCommandSubcommandGroupOption | undefined
207
+ let child = group.options.find((x) => x.name === command.subcommandGroupChild?.options.name) as ApplicationCommandSubGroupData
216
208
 
217
209
  if (!child) {
218
- child = { type: ApplicationCommandOptionType.SubcommandGroup, ...(command.subcommandGroupChild.options as Omit<APIApplicationCommandSubcommandGroupOption, 'type'>) }
210
+ child = { ...(command.subcommandGroupChild.options as Omit<ApplicationCommandSubGroupData, 'type'>), type: ApplicationCommandOptionType.SubcommandGroup }
219
211
  group.options.push(child)
220
212
  }
221
213
 
@@ -231,7 +223,7 @@ export class ApplicationCommandExtension extends CTSExtension {
231
223
  }
232
224
  }
233
225
 
234
- child.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as APIApplicationCommandSubcommandOption)
226
+ child.options.push({ ...command.options, type: ApplicationCommandOptionType.Subcommand, options } as ApplicationCommandSubCommandData)
235
227
 
236
228
  continue
237
229
  }
@@ -1,7 +1,7 @@
1
- import type { APIApplicationCommandOption } from 'discord.js'
1
+ import type { ApplicationCommandOptionData } from 'discord.js'
2
2
  import { createArgumentDecorator, ComponentArgumentDecorator } from '../core'
3
3
 
4
- type Options = APIApplicationCommandOption
4
+ type Options = ApplicationCommandOptionData
5
5
 
6
6
  export class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}
7
7
 
@@ -1,12 +1,12 @@
1
- import type { APIApplicationCommandSubcommandOption, ChatInputApplicationCommandData } from 'discord.js'
1
+ import type { ApplicationCommandSubGroupData, ChatInputApplicationCommandData } from 'discord.js'
2
2
  import { ApplicationCommandType } from 'discord.js'
3
3
  import { createComponentDecorator } from '../core'
4
4
  import { ApplicationCommandComponent } from './ApplicationCommand'
5
5
 
6
6
  export class SubCommandGroup {
7
- constructor(public options: Omit<APIApplicationCommandSubcommandOption, 'type'>, public guilds?: string[]) {}
7
+ constructor(public options: Omit<ChatInputApplicationCommandData, 'type'>, public guilds?: string[]) {}
8
8
 
9
- command(options: Omit<ChatInputApplicationCommandData, 'options' | 'type'>): MethodDecorator {
9
+ command(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>): MethodDecorator {
10
10
  const cmd = new ApplicationCommandComponent({
11
11
  type: ApplicationCommandType.ChatInput,
12
12
  ...options,
@@ -15,13 +15,13 @@ export class SubCommandGroup {
15
15
  return createComponentDecorator(cmd)
16
16
  }
17
17
 
18
- createChild(options: Omit<APIApplicationCommandSubcommandOption, 'type'>) {
18
+ createChild(options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>) {
19
19
  return new SubCommandGroupChild(options, this)
20
20
  }
21
21
  }
22
22
 
23
23
  export class SubCommandGroupChild {
24
- constructor(public options: Omit<APIApplicationCommandSubcommandOption, 'type'>, public parent: SubCommandGroup) {}
24
+ constructor(public options: Omit<ApplicationCommandSubGroupData, 'options' | 'type'>, public parent: SubCommandGroup) {}
25
25
 
26
26
  command(options: Omit<ChatInputApplicationCommandData, 'options' | 'type'>): MethodDecorator {
27
27
  const cmd = new ApplicationCommandComponent({