@pikokr/command.ts 4.0.5 → 5.0.0-dev.144e990

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/.github/workflows/codeql-analysis.yml +70 -0
  2. package/.github/workflows/docs.yml +2 -2
  3. package/.github/workflows/publish.stable.yml +1 -1
  4. package/.github/workflows/publish.yml +1 -1
  5. package/.vscode/settings.json +10 -0
  6. package/.vscode/templates/ts.lict +5 -0
  7. package/README.md +2 -0
  8. package/dist/index.d.ts +140 -292
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/docs/index.yml +1 -1
  12. package/package.json +22 -16
  13. package/publish-version.js +20 -0
  14. package/renovate.json +5 -0
  15. package/scripts/docs.ts +8 -4
  16. package/src/applicationCommand/ApplicationCommand.ts +17 -0
  17. package/src/applicationCommand/ApplicationCommandExtension.ts +169 -0
  18. package/src/applicationCommand/ApplicationCommandOption.ts +16 -0
  19. package/src/applicationCommand/index.ts +10 -6
  20. package/src/core/components/BaseComponent.ts +62 -0
  21. package/src/core/components/ComponentArgument.ts +15 -0
  22. package/src/core/components/ComponentArgumentDecorator.ts +25 -0
  23. package/src/core/components/decoratorCreator.ts +81 -0
  24. package/src/core/components/index.ts +13 -0
  25. package/src/core/converter/index.ts +16 -0
  26. package/src/core/extensions/CTSExtension.ts +17 -0
  27. package/src/core/extensions/Extension.ts +62 -0
  28. package/src/core/extensions/index.ts +9 -0
  29. package/src/core/hooks/componentHook.ts +40 -0
  30. package/src/core/hooks/index.ts +11 -0
  31. package/src/core/hooks/moduleHook.ts +39 -0
  32. package/src/core/index.ts +15 -0
  33. package/src/core/listener/index.ts +29 -0
  34. package/src/core/structures/CommandClient.ts +78 -0
  35. package/src/core/structures/Registry.ts +110 -0
  36. package/src/core/structures/index.ts +10 -0
  37. package/src/core/symbols.ts +13 -0
  38. package/src/core/utils/checks.ts +27 -0
  39. package/src/core/utils/errors.ts +9 -0
  40. package/src/core/utils/index.ts +10 -0
  41. package/src/index.ts +11 -16
  42. package/src/textCommand/TextCommand.ts +20 -0
  43. package/src/textCommand/TextCommandExtension.ts +128 -0
  44. package/src/textCommand/index.ts +11 -0
  45. package/src/textCommand/parameters.ts +14 -0
  46. package/test/index.ts +84 -21
  47. package/tsconfig.json +3 -3
  48. package/tsconfig.prod.json +8 -0
  49. package/tsup.config.ts +9 -4
  50. package/src/applicationCommand/AppCommand.ts +0 -32
  51. package/src/applicationCommand/decorator.ts +0 -62
  52. package/src/builtinModules/BuiltInModule.ts +0 -13
  53. package/src/builtinModules/BuiltinApplicationCommandConverters.ts +0 -16
  54. package/src/builtinModules/BuiltinCommandConverters.ts +0 -87
  55. package/src/builtinModules/CommandHandler.ts +0 -363
  56. package/src/builtinModules/index.ts +0 -7
  57. package/src/command/ArgumentConverter.ts +0 -22
  58. package/src/command/Command.ts +0 -35
  59. package/src/command/cooldown/adapter.ts +0 -22
  60. package/src/command/cooldown/decorator.ts +0 -67
  61. package/src/command/cooldown/error.ts +0 -9
  62. package/src/command/cooldown/index.ts +0 -9
  63. package/src/command/cooldown/type.ts +0 -12
  64. package/src/command/decorator.ts +0 -185
  65. package/src/command/index.ts +0 -9
  66. package/src/command/utils.ts +0 -33
  67. package/src/constants.ts +0 -31
  68. package/src/error/ArgumentConverterNotFound.ts +0 -18
  69. package/src/error/ArgumentNotProvided.ts +0 -12
  70. package/src/error/CommandCheckFailed.ts +0 -19
  71. package/src/error/CommandNotFound.ts +0 -11
  72. package/src/error/InvalidTargetError.ts +0 -9
  73. package/src/error/ModuleError.ts +0 -11
  74. package/src/error/PermissionRequired.ts +0 -17
  75. package/src/error/checks/DMOnlyCommand.ts +0 -9
  76. package/src/error/checks/GuildOnlyCommand.ts +0 -9
  77. package/src/error/checks/OwnerOnlyCommand.ts +0 -9
  78. package/src/error/checks/SlashCommandGlobalCheckError.ts +0 -11
  79. package/src/error/checks/index.ts +0 -8
  80. package/src/error/index.ts +0 -12
  81. package/src/interface/index.ts +0 -7
  82. package/src/listener/Listener.ts +0 -7
  83. package/src/listener/decorator.ts +0 -29
  84. package/src/listener/index.ts +0 -6
  85. package/src/messageComponents/base.ts +0 -16
  86. package/src/messageComponents/button.ts +0 -30
  87. package/src/messageComponents/index.ts +0 -6
  88. package/src/messageComponents/selectMenu.ts +0 -30
  89. package/src/structures/CommandClient.ts +0 -103
  90. package/src/structures/Module.ts +0 -54
  91. package/src/structures/Registry.ts +0 -245
  92. package/src/structures/index.ts +0 -7
  93. package/src/typings.ts +0 -35
  94. package/src/utils.ts +0 -10
  95. package/test/config.example.json +0 -3
  96. package/test/modules/dev.ts +0 -45
  97. package/test/modules/test.ts +0 -148
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var dt=Object.create;var z=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames,Se=Object.getOwnPropertySymbols,pt=Object.getPrototypeOf,ve=Object.prototype.hasOwnProperty,ft=Object.prototype.propertyIsEnumerable;var Oe=n=>z(n,"__esModule",{value:!0}),i=(n,e)=>z(n,"name",{value:e,configurable:!0});var ke=(n,e)=>{var t={};for(var r in n)ve.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&Se)for(var r of Se(n))e.indexOf(r)<0&&ft.call(n,r)&&(t[r]=n[r]);return t};var ht=(n,e)=>{for(var t in e)z(n,t,{get:e[t],enumerable:!0})},Te=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ut(e))!ve.call(n,o)&&(t||o!=="default")&&z(n,o,{get:()=>e[o],enumerable:!(r=lt(e,o))||r.enumerable});return n},de=(n,e)=>Te(Oe(z(n!=null?dt(pt(n)):{},"default",!e&&n&&n.__esModule?{get:()=>n.default,enumerable:!0}:{value:n,enumerable:!0})),n),gt=(n=>(e,t)=>n&&n.get(e)||(t=Te(Oe({}),e,1),n&&n.set(e,t),t))(typeof WeakMap!="undefined"?new WeakMap:0);var _t={};ht(_t,{AppCommand:()=>me,ApplicationCommandArgumentConverter:()=>ae,ApplicationCommandArgumentConverterNotFound:()=>O,ApplicationCommandCheckFailed:()=>k,ArgumentConverter:()=>ie,ArgumentConverterNotFound:()=>I,ArgumentNotProvided:()=>j,BuiltInModule:()=>C,ButtonInteractionHandler:()=>fe,ClientPermissionRequired:()=>K,Command:()=>se,CommandCheckFailed:()=>Z,CommandClient:()=>be,CommandNotFound:()=>te,CoolDownError:()=>B,CoolDownType:()=>g,DMOnlyCommandError:()=>U,DefaultCoolDownAdapter:()=>ce,GuildOnlyCommandError:()=>P,InvalidModuleError:()=>_,InvalidTargetError:()=>v,Listener:()=>oe,Module:()=>x,ModuleLoadError:()=>X,OwnerOnlyCommandError:()=>D,Registry:()=>ne,SelectMenuInteractionHandler:()=>he,SlashCommandGlobalCheckError:()=>ee,UserPermissionRequired:()=>L,applicationCommand:()=>Ot,applicationCommandArgumentConverter:()=>wt,argumentConverter:()=>E,command:()=>yt,coolDown:()=>vt,createCheckDecorator:()=>M,dmOnly:()=>bt,guildOnly:()=>Mt,listener:()=>ue,messageButton:()=>Tt,messageSelectMenu:()=>At,option:()=>kt,optional:()=>xt,ownerOnly:()=>Rt,requireClientPermissions:()=>St,requireUserPermissions:()=>Et,rest:()=>Ct});var Jn=require("reflect-metadata");var F=Symbol("Command.TS Commands"),$=Symbol("Command.TS Slash Commands"),le=Symbol("Command.TS Slash Command Options"),W=Symbol("Command.TS Listeners"),A=Symbol("Command.TS Module Path"),xe=Symbol("Command.TS Module Identifier"),q=Symbol("Command.TS Built-In Module"),Ce=Symbol("Command.TS Optional Parameters"),Re=Symbol("Command.TS Rest Parameter"),Y=Symbol("Command.TS Argument Converter"),J=Symbol("Command.TS Slash Argument Converter"),Q=Symbol("Command.TS Command Checks"),V=Symbol("Command.TS Slash Command Checks"),b=Symbol("Command.TS Message Component Handlers");var x=class{get logger(){return this.commandClient.logger.getChildLogger({name:this.constructor.name})}get commands(){return Reflect.getMetadata(F,this)||[]}get listeners(){return Reflect.getMetadata(W,this)||[]}get argumentConverters(){return Reflect.getMetadata(Y,this)||[]}get applicationCommandArgumentConverters(){return Reflect.getMetadata(J,this)||[]}get applicationCommands(){return Reflect.getMetadata($,this)||[]}get messageComponentHandlers(){return Reflect.getMetadata(b,this)||[]}get path(){return Reflect.getMetadata(A,this)}load(){}unload(){}beforeReload(){}afterReload(){}};i(x,"Module");var at=de(require("lodash"));var re=de(require("path"));var v=class extends Error{constructor(){super('Class does not extend "Module" class.')}};i(v,"InvalidTargetError");var X=class extends Error{constructor(e,t){super("Failed to load module "+e);this.error=t}};i(X,"ModuleLoadError");var _=class extends Error{};i(_,"InvalidModuleError");var j=class extends Error{constructor(e,t,r){super(`Required argument #${e} not provided.`);this.index=e,this.command=t,this.msg=r}};i(j,"ArgumentNotProvided");var I=class extends Error{constructor(e,t){super(`Argument converter ${e.type.name} not found.`);this.type=e,this.msg=t}};i(I,"ArgumentConverterNotFound");var O=class extends Error{constructor(e,t){super(`Argument converter ${e.type.name} not found.`);this.type=e,this.interaction=t}};i(O,"ApplicationCommandArgumentConverterNotFound");var Z=class extends Error{constructor(e,t){super();this.msg=e,this.command=t}};i(Z,"CommandCheckFailed");var k=class extends Error{constructor(e,t){super();this.interaction=e,this.command=t}};i(k,"ApplicationCommandCheckFailed");var L=class extends Error{constructor(e,t){super();this.user=e,this.permissions=t}};i(L,"UserPermissionRequired");var K=class extends Error{constructor(e){super();this.permissions=e}};i(K,"ClientPermissionRequired");var D=class extends Error{constructor(){super()}};i(D,"OwnerOnlyCommandError");var P=class extends Error{constructor(){super()}};i(P,"GuildOnlyCommandError");var U=class extends Error{constructor(){super()}};i(U,"DMOnlyCommandError");var ee=class extends Error{constructor(e){super("Slash command before-run check failed.");this.i=e}};i(ee,"SlashCommandGlobalCheckError");var te=class extends Error{constructor(e,t,r){super(`Command ${e} not found.`);this.commandName=e,this.msg=t,this.args=r}};i(te,"CommandNotFound");var Ae=require("discord.js"),_e=de(require("walk-sync")),je=de(require("fs")),ne=class{constructor(e){this.client=e,this.modules=new Ae.Collection}get logger(){return this.client.logger.getChildLogger({name:"Registry"})}get commands(){let e=[];for(let[,t]of this.modules)e.push(...t.commands);return e}get argumentConverters(){let e=[];for(let[,t]of this.modules)e.push(...t.argumentConverters);return e}get applicationCommandArgumentConverters(){let e=[];for(let[,t]of this.modules)e.push(...t.applicationCommandArgumentConverters);return e}get applicationCommands(){let e=[];for(let[,t]of this.modules)e.push(...t.applicationCommands);return e}get messageComponentHandlers(){let e=[];for(let[,t]of this.modules)e.push(...t.messageComponentHandlers);return e}registerModule(e){e.commandClient=this.client,this.modules.set(Symbol(e.constructor.name),e);let t=[];for(let r of e.listeners){let o=r.execute.bind(e);t.push({event:r.name,execute:o}),this.client.client.on(r.name,o)}return Reflect.defineMetadata(xe,t,e),e}async loadModulesIn(e,t=!1){let r=t?e:re.default.join(require.main.path,e);for(let o of(0,_e.default)(r))if(je.lstatSync(re.default.join(r,o)).isFile()){if(o.endsWith(".map"))continue;await this.loadModule(re.default.join(r,o),!0)}}async loadModule(e,t=!1){let r=t?e:re.default.join(require.main.path,e),o;try{o=require(r)}catch(c){throw new X(r,c)}if(o.loaded)throw new Error("MODULE_ALREADY_LOADED");if(!o.install)throw new _("Install function not found.");let s=o.install(this.client);if(!(s instanceof x))throw new v;return Reflect.defineMetadata(A,require.resolve(r),s),this.registerModule(s),await s.load(),o.loaded=!0,s}async syncCommands(){var c;this.logger.debug("Syncing commands...");let e=this.applicationCommands.filter(a=>!a.guild),t=this.client.options.applicationCommands.guild,r=i(async(a,m)=>{this.logger.debug(`Syncing for guild ${a.name}(${a.id})`);let l=m.map(u=>u.command);this.logger.debug(`Command List: ${l.map(u=>u.name).join(", ")}`),await a.commands.set(l)},"syncForGuild");if(t)if(typeof t=="string")await r(await this.client.client.guilds.fetch(t),e);else for(let a of t)await r(await this.client.client.guilds.fetch(a),e);else this.logger.debug("Syncing global..."),await((c=this.client.client.application)==null?void 0:c.commands.set(e.map(a=>a.command)));let o=this.applicationCommands.filter(a=>!!a.guild),s=new Set;for(let a of o)if(!!a.guild)if(typeof a.guild=="string")s.add(a.guild);else for(let m of a.guild)s.add(m);for(let a of s)await r(await this.client.client.guilds.fetch(a),o.filter(m=>m.guild&&(typeof m.guild=="string"?a===m.guild:m.guild.includes(a))));this.logger.debug("Syncing ended.")}async unregisterModule(e){if(Reflect.getMetadata(q,e))throw new Error("Built-in modules cannot be unloaded");let t=this.modules.findKey(o=>o===e);if(!t)return e;await e.unload();let r=Reflect.getMetadata(xe,e);for(let o of r)this.client.client.removeListener(o.event,o.execute);return this.modules.delete(t),e}async unloadModule(e){let t=Reflect.getMetadata(A,e);if(!t)throw new _("This module is not loaded by loadModule.");await this.unregisterModule(e),delete require.cache[t]}async reloadModule(e){await e.beforeReload();let t=Reflect.getMetadata(A,e);return await this.unloadModule(e),await(await this.loadModule(t,!0)).afterReload(),!0}async reloadAll(){let e=[];for(let[,t]of this.modules.filter(r=>!!r.path&&!Reflect.getMetadata(q,r)))try{await this.reloadModule(t),e.push({path:t.path,success:!0})}catch(r){e.push({error:r,path:t.path,success:!1})}return e}};i(ne,"Registry");var ct=require("discord.js");var C=class extends x{constructor(){super();Reflect.defineMetadata(q,!0,this)}};i(C,"BuiltInModule");var oe=class{constructor(e,t){this.name=e,this.execute=t}};i(oe,"Listener");var w=i(n=>{if(!(n instanceof x))throw new v},"checkTarget");var ue=i(n=>(e,t)=>{w(e);let r=Reflect.getMetadata(W,e),o=new oe(n,Reflect.get(e,t));r?r.push(o):(r=[o],Reflect.defineMetadata(W,r,e))},"listener");var f=require("discord.js");function Ie(n,e,t,r,o){var s={};Object.keys(r).forEach(function(a){s[a]=r[a]}),s.enumerable=!!s.enumerable,s.configurable=!!s.configurable,("value"in s||s.initializer)&&(s.writable=!0),s=t.slice().reverse().reduce(function(a,m){return m&&m(n,e,a)||a},s),o&&s.initializer!==void 0&&(s.value=s.initializer?s.initializer.call(o):void 0,s.initializer=void 0);var c=Object.getOwnPropertyDescriptor(n,e);return c&&(c.get||c.set)&&(delete s.writable,delete s.initializer),s.initializer===void 0&&(Object.defineProperty(n,e,s),s=null),s}i(Ie,"_applyDecoratedDescriptor");var R,Le,Ke,De,Pe,Ue,Be,Ne=(R=i(class extends C{constructor(e){super();this.registry=e,this.client=e.client}async message(e){let t=i(r=>this.client.client.emit("commandError",r,e),"error1");try{let r=typeof this.client.options.command.prefix=="string"?this.client.options.command.prefix:typeof this.client.options.command.prefix=="function"?await this.client.options.command.prefix(e):this.client.options.command.prefix,o;if(typeof r=="object"){let u=r.find(y=>e.content.includes(y));if(!u)return;o=u}else{if(!e.content.includes(r))return;o=r}if(!e.content.startsWith(o))return;let s=e.content.slice(o.length).split(" "),c=s.shift();if(!c)return;let a=null;for(let u of this.registry.commands)if([...typeof u.aliases=="function"?await u.aliases(e):u.aliases,u.name].some(S=>S===c)){a=u;break}if(e.data={cts:this.client,command:a,prefix:o},!await this.client.options.command.check(e))return;if(!a)return t(new te(c,e,s));let m=this.registry.modules.find(u=>u.commands.includes(a));if(!m)return;let l=[];for(let u of a.checks)if(!await u(e))return t(new Z(e,a));for(let u=0;u<a.argTypes.length;u++){let y=a.argTypes[u],S=this.registry.argumentConverters.find(G=>G.type===y.type);if(y.rest){let G=s.join(" ");l.push(G);break}if(!S)return t(new I(y,e));let ge=this.registry.modules.find(G=>G.argumentConverters.includes(S));if(!ge)return t(new I(y,e));if(S.withoutParameter){l.push(await S.execute(ge,e));continue}let ye=s.shift();if(y.optional&&!ye)break;if(!ye)return t(new j(u,a,e));let we=await S.execute(ge,e,ye);if(we==null&&!y.optional)return t(new j(u,a,e));l.push(we)}try{await a.execute(m,l)}catch(u){return t(u)}}catch(r){return t(r)}}async command(e){var r,o;let t=i(s=>this.client.client.emit("applicationCommandError",s,e),"error2");try{let s=this.registry.applicationCommands.find(m=>m.command.type==="CHAT_INPUT"&&m.command.name===e.commandName);if(!s)return;let c=this.registry.modules.find(m=>m.applicationCommands.includes(s));if(!c)return;let a=[];if(e.data={cts:this.client,command:s},!await this.client.options.slashCommands.check(e))return t(new ee(e));for(let m of s.checks)if(!await m(e))return t(new k(e,s));for(let m=0;m<s.params.length;m++){let l=s.params[m],u=this.registry.applicationCommandArgumentConverters.find(y=>y.type===l.type);if(l.type===f.CommandInteraction){a.push(e);continue}if(l.type===f.CommandInteractionOptionResolver){a.push(e.options);continue}if(l.name){switch(l.type){case String:a.push(e.options.getString(l.name,!1)||void 0);break;case f.Role:a.push(e.options.getRole(l.name,!1)||void 0);break;case f.User:a.push(e.options.getUser(l.name,!1)||void 0);break;case f.GuildMember:a.push(e.options.getMember(l.name,!1)||void 0);break;case Boolean:a.push(e.options.getBoolean(l.name,!1)||void 0);break;case Number:let y=e.options.get(l.name,!1);if(!y){a.push(void 0);break}if(y.type=="NUMBER"){a.push((r=e.options.getNumber(l.name,!1))!=null?r:void 0);break}if(y.type=="INTEGER"){a.push((o=e.options.getInteger(l.name,!1))!=null?o:void 0);break}}continue}if(!u)return t(new O(l,e));a.push(await u.execute(c,e))}await s.execute(c,a)}catch(s){return t(s)}}async messageComponent(e){let t=i(r=>this.client.client.emit("messageComponentError",r),"error");try{let r=[];for(let o of this.registry.messageComponentHandlers)o.componentId===o.componentId&&o.componentType===e.componentType&&r.push(o);for(let o of r){let s=this.registry.modules.find(c=>c.messageComponentHandlers.includes(o));!s||await o.run(s,e)}}catch(r){t(r)}}async userContextMenu(e){let t=i(r=>this.client.client.emit("applicationCommandError",r,e),"error3");try{let r=this.registry.applicationCommands.find(c=>c.command.type==="USER"&&c.command.name===e.commandName);if(!r)return;let o=this.registry.modules.find(c=>c.applicationCommands.includes(r));if(!o)return;e.data={cts:this.client,command:r};for(let c of r.checks)if(!await c(e))return t(new k(e,r));let s=[];for(let c=0;c<r.params.length;c++){let a=r.params[c],m=this.registry.applicationCommandArgumentConverters.find(l=>l.type===a.type);if(a.type===f.UserContextMenuInteraction){s.push(e);continue}if(!m)return t(new O(a,e));s.push(await m.execute(o,e))}await r.execute(o,s)}catch(r){return t(r)}}async messageContextMenu(e){let t=i(r=>this.client.client.emit("applicationCommandError",r,e),"error4");try{let r=this.registry.applicationCommands.find(c=>c.command.type==="MESSAGE"&&c.command.name===e.commandName);if(!r)return;let o=this.registry.modules.find(c=>c.applicationCommands.includes(r));if(!o)return;e.data={cts:this.client,command:r};for(let c of r.checks)if(!await c(e))return t(new k(e,r));let s=[];for(let c=0;c<r.params.length;c++){let a=r.params[c],m=this.registry.applicationCommandArgumentConverters.find(l=>l.type===a.type);if(a.type===f.MessageContextMenuInteraction){s.push(e);continue}if(!m)return t(new O(a,e));s.push(await m.execute(o,e))}await r.execute(o,s)}catch(r){return t(r)}}async interaction(e){let t=i(r=>this.client.client.emit("interactionError",r,e),"error");try{if(await this.client.options.applicationCommands.beforeRunCheck(e),e.isCommand()){await this.command(e);return}if(e.isMessageComponent()){await this.messageComponent(e);return}if(e.isMessageContextMenu()){await this.messageContextMenu(e);return}if(e.isUserContextMenu()){await this.userContextMenu(e);return}}catch(r){return t(r)}}},"CommandHandler"),Le=ue("messageCreate"),Ke=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:type",Function),De=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:paramtypes",[typeof f.Message=="undefined"?Object:f.Message]),Ie(R.prototype,"message",[Le,Ke,De],Object.getOwnPropertyDescriptor(R.prototype,"message"),R.prototype),Pe=ue("interactionCreate"),Ue=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:type",Function),Be=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:paramtypes",[typeof f.Interaction=="undefined"?Object:f.Interaction]),Ie(R.prototype,"interaction",[Pe,Ue,Be],Object.getOwnPropertyDescriptor(R.prototype,"interaction"),R.prototype),R);var se=class{execute(e,t){return this.run.apply(e,t)}get checks(){return Reflect.getMetadata(Q,this.module,this.key)||[]}constructor(e,t,r,o,s,c){this.run=e,this.argTypes=t,this.name=r,this.aliases=o,this.module=s,this.key=c}};i(se,"Command");var ie=class{execute(e,t,r){return this.run.apply(e,[t,r])}constructor(e,t,r){this.type=e,this.run=t,this.withoutParameter=r}};i(ie,"ArgumentConverter");var ae=class{execute(e,t){return this.run.apply(e,[t])}constructor(e,t){this.type=e,this.run=t}};i(ae,"ApplicationCommandArgumentConverter");var M=i((n,e)=>(t,r)=>{if(n){let o=Reflect.getMetadata(Q,t,r);o?o.push(n):(o=[n],Reflect.defineMetadata(Q,o,t,r))}if(e){let o=Reflect.getMetadata(V,t,r);o?o.push(e):(o=[e],Reflect.defineMetadata(V,o,t,r))}},"createCheckDecorator");var T=require("discord.js");var yt=i((n={})=>(e,t)=>{var m;w(e);let r=Reflect.getMetadata(F,e),o=(m=n.optionTypes)!=null?m:Reflect.getMetadata("design:paramtypes",e,t),s=Reflect.getMetadata(Ce,e,t)||-1,c=Reflect.getMetadata(Re,e,t)||-1,a=new se(Reflect.get(e,t),o.map((l,u)=>({type:l,optional:s===-1?!1:s<=u,rest:c===-1?!1:c===u})),n.name||t,n.aliases||[],e,t);r?r.push(a):(r=[a],Reflect.defineMetadata(F,r,e))},"command"),E=i((n,e=!0)=>(t,r)=>{w(t);let o=Reflect.getMetadata(Y,t),s=new ie(n,Reflect.get(t,r),!e);o?o.push(s):(o=[s],Reflect.defineMetadata(Y,o,t))},"argumentConverter"),wt=i(n=>(e,t)=>{w(e);let r=Reflect.getMetadata(J,e),o=new ae(n,Reflect.get(e,t));r?r.push(o):(r=[o],Reflect.defineMetadata(J,r,e))},"applicationCommandArgumentConverter"),xt=i((n,e,t)=>{w(n),Reflect.defineMetadata(Ce,t,n,e)},"optional"),Ct=i((n,e,t)=>{w(n);let r=Reflect.getMetadata("design:paramtypes",n,e);if(r.length-1!==t)throw new Error("Rest decorator must be used at last argument.");if(r[t]!==String)throw new Error('Rest argument type must be "String"');Reflect.defineMetadata(Re,t,n,e)},"rest"),Rt=M(n=>{if(n.data.cts.owners.includes(n.author.id))return!0;throw new D},n=>{if(n.data.cts.owners.includes(n.user.id))return!0;throw new D}),Mt=M(n=>{if(n.guild)return!0;throw new P},n=>{if(n.guildId)return!0;throw new P}),bt=M(n=>{if(!n.guild)return!0;throw new U},n=>{if(!n.guildId)return!0;throw new U}),Et=i(n=>M(e=>{if(!e.guild||!e.member)throw new Error("This command must be used in guild.");if(e.member.permissionsIn(e.channel).has(n))return!0;throw new L(e.member,new T.Permissions(n))},e=>{if(!e.guild||!e.member)throw new Error("This command must be used in guild.");if(!(e.member instanceof T.GuildMember)||e.member.permissionsIn(e.channel).has(n))return!0;throw new L(e.member,new T.Permissions(n))}),"requireUserPermissions"),St=i(n=>M(e=>{if(!e.guild)throw new Error("This command must be used in guild.");if(e.guild.me.permissionsIn(e.channel).has(n))return!0;throw new K(new T.Permissions(n))},e=>{if(!e.guild)throw new Error("This command must be used in guild.");if(e.guild.me.permissionsIn(e.channel).has(n))return!0;throw new K(new T.Permissions(n))}),"requireClientPermissions");var g;(function(n){n[n.USER=0]="USER",n[n.CHANNEL=1]="CHANNEL",n[n.GUILD=2]="GUILD",n[n.ROLE=3]="ROLE",n[n.CATEGORY=4]="CATEGORY",n[n.MEMBER=5]="MEMBER"})(g||(g={}));var Me=require("discord.js");var B=class extends Error{constructor(e){super();this.endsAt=e}};i(B,"CoolDownError");var vt=i((n,e)=>M(async t=>{var m;let r=t.data.cts.coolDownAdapter,s=i(()=>{var l;switch(n){case g.USER:return t.author.id;case g.GUILD:return(t.guild||t.author).id;case g.CHANNEL:return t.channel.id;case g.MEMBER:return`${(l=t.guild)==null?void 0:l.id}.${t.author.id}`;case g.ROLE:return(t.channel instanceof Me.DMChannel?t.channel:t.member.roles.highest).id;case g.CATEGORY:return(t.channel.parent||t.channel).id}},"getKey")()+"-command-"+((m=t.data.command)==null?void 0:m.name),c=await r.get(s),a=Date.now();if(!c||!(a-c<e*1e3))return await r.set(s,a),!0;throw new B(new Date(c+e*1e3))},async t=>{if(t.isMessageComponent())return!0;let r=t.data.cts.coolDownAdapter,s=i(()=>{var m;switch(n){case g.USER:return t.user.id+".user";case g.GUILD:return(t.guild||t.user).id+".guild";case g.CHANNEL:return t.channel.id+".channel";case g.MEMBER:return`${(m=t.guild)==null?void 0:m.id}.${t.user.id}`;case g.ROLE:return(t.channel instanceof Me.DMChannel?t.channel:t.member.roles.highest).id+".role";case g.CATEGORY:return(t.channel.parent||t.channel).id+".category"}},"getKey")()+"-appCommand-"+t.commandName,c=await r.get(s),a=Date.now();if(!c||!(a-c<e*1e3))return await r.set(s,a),!0;throw new B(new Date(c+e*1e3))}),"coolDown");var He=require("discord.js"),ce=class{async get(e){return this.map.get(e)}async set(e,t){this.map.set(e,t)}constructor(){this.map=new He.Collection}};i(ce,"DefaultCoolDownAdapter");var h=require("discord.js");function N(n,e,t,r,o){var s={};Object.keys(r).forEach(function(a){s[a]=r[a]}),s.enumerable=!!s.enumerable,s.configurable=!!s.configurable,("value"in s||s.initializer)&&(s.writable=!0),s=t.slice().reverse().reduce(function(a,m){return m&&m(n,e,a)||a},s),o&&s.initializer!==void 0&&(s.value=s.initializer?s.initializer.call(o):void 0,s.initializer=void 0);var c=Object.getOwnPropertyDescriptor(n,e);return c&&(c.get||c.set)&&(delete s.writable,delete s.initializer),s.initializer===void 0&&(Object.defineProperty(n,e,s),s=null),s}i(N,"_applyDecoratedDescriptor");var p,Ge,ze,Fe,$e,We,qe,Ye,Je,Qe,Ve,Xe,Ze,et,tt,rt,nt,ot,st,it=(p=i(class extends C{constructor(e){super();this.cts=e,this.client=e.client}message(e){return e}string(e,t){return t}getUserIDByMention(e){if(!!e&&e.startsWith("<@")&&e.endsWith(">"))return e=e.slice(2,-1),e.startsWith("!")&&(e=e.slice(1)),e}user(e,t){let r=this.client.users.cache.get(t);if(r||(r=this.client.users.cache.find(s=>s.tag===t||s.username===t),r))return r;let o=this.getUserIDByMention(t);return o?(r=this.client.users.cache.get(o),r||null):null}member(e,t){var s,c,a;let r=(s=e.guild)==null?void 0:s.members.cache.get(t);if(!r||(r=(c=e.guild)==null?void 0:c.members.cache.find(m=>m.user.tag===t),r))return r;let o=this.getUserIDByMention(t);if(!!o)return r=(a=e.guild)==null?void 0:a.members.cache.get(o),r||void 0}number(e,t){let r=Number(t);return isNaN(r)?void 0:r}getRoleIDByMention(e){if(!!e&&e.startsWith("<@")&&e.endsWith(">"))return e=e.slice(2,-1),e.startsWith("&")&&(e=e.slice(1)),e}role(e,t){var s;let r=this.getRoleIDByMention(t);return r&&((s=e.guild)==null?void 0:s.roles.cache.get(r))||void 0}},"BuiltinCommandConverters"),Ge=E(h.Message,!1),ze=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:type",Function),Fe=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:paramtypes",[typeof h.Message=="undefined"?Object:h.Message]),N(p.prototype,"message",[Ge,ze,Fe],Object.getOwnPropertyDescriptor(p.prototype,"message"),p.prototype),$e=E(String),We=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:type",Function),qe=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:paramtypes",[typeof h.Message=="undefined"?Object:h.Message,String]),N(p.prototype,"string",[$e,We,qe],Object.getOwnPropertyDescriptor(p.prototype,"string"),p.prototype),Ye=E(h.User),Je=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:type",Function),Qe=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:paramtypes",[typeof h.Message=="undefined"?Object:h.Message,String]),N(p.prototype,"user",[Ye,Je,Qe],Object.getOwnPropertyDescriptor(p.prototype,"user"),p.prototype),Ve=E(h.GuildMember),Xe=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:type",Function),Ze=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:paramtypes",[typeof h.Message=="undefined"?Object:h.Message,String]),N(p.prototype,"member",[Ve,Xe,Ze],Object.getOwnPropertyDescriptor(p.prototype,"member"),p.prototype),et=E(Number),tt=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:type",Function),rt=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:paramtypes",[typeof h.Message=="undefined"?Object:h.Message,String]),N(p.prototype,"number",[et,tt,rt],Object.getOwnPropertyDescriptor(p.prototype,"number"),p.prototype),nt=E(h.Role),ot=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:type",Function),st=typeof Reflect!="undefined"&&typeof Reflect.metadata=="function"&&Reflect.metadata("design:paramtypes",[typeof h.Message=="undefined"?Object:h.Message,String]),N(p.prototype,"role",[nt,ot,st],Object.getOwnPropertyDescriptor(p.prototype,"role"),p.prototype),p);var pe=class extends C{constructor(e){super();this.cts=e,this.client=e.client}};i(pe,"BuiltinApplicationCommandConverters");var mt=require("tslog"),be=class{async fetchOwners(){var t,r;await((t=this.client.application)==null?void 0:t.fetch());let e=(r=this.client.application)==null?void 0:r.owner;return e?e instanceof ct.User?[e.id]:e.members.map(o=>o.id):[]}async ready(){if(!this._isReady){if(this._isReady=!0,this.options.owners==="auto"){let e=await this.fetchOwners();this.owners.push(...e)}this.options.applicationCommands.autoSync&&await this.registry.syncCommands()}}constructor(s){var c=s,{client:e,coolDownAdapter:t,logger:r}=c,o=ke(c,["client","coolDownAdapter","logger"]);this.owners=[],this.registry=new ne(this),this._isReady=!1,this.client=e,this.coolDownAdapter=t||new ce,this.options=at.default.merge({command:{prefix:"!",check:()=>!0},owners:"auto",slashCommands:{check:()=>!0},applicationCommands:{autoSync:!1,beforeRunCheck:()=>{}}},o),this.logger=r!=null?r:new mt.Logger({name:"Command.TS"}),this.options.owners!=="auto"&&(this.owners=this.options.owners),this.client.once("ready",()=>this.ready()),this.registry.registerModule(new Ne(this.registry)),this.registry.registerModule(new it(this)),this.registry.registerModule(new pe(this))}};i(be,"CommandClient");var Ee=require("discord.js");var me=class{get checks(){return Reflect.getMetadata(V,this.module,this.key)||[]}execute(e,t){return this.run.apply(e,t)}constructor(e,t,r,o,s,c){this.command=e,this.run=t,this.module=r,this.params=o,this.guild=s,this.key=c}};i(me,"AppCommand");var Ot=i(n=>(e,t)=>{var a;w(e);let r=Reflect.getMetadata($,e),o=(a=n.optionTypes)!=null?a:Reflect.getMetadata("design:paramtypes",e,t),s=Reflect.getMetadata(le,e,t)||new Ee.Collection,c=new me(n.command,Reflect.get(e,t),e,o.map((m,l)=>({type:m,name:s.get(l)})),n.guild,t);r?r.push(c):(r=[c],Reflect.defineMetadata($,r,e))},"applicationCommand"),kt=i(n=>(e,t,r)=>{w(e);let o=Reflect.getMetadata(le,e,t);o||(o=new Ee.Collection,Reflect.defineMetadata(le,o,e,t)),o.set(r,n)},"option");var H=class{constructor(e,t,r){this.componentId=e,this.componentType=t,this.execute=r}run(e,t){return this.execute.apply(e,[t])}};i(H,"MessageComponentHandler");var fe=class extends H{constructor(e,t){super(e,"BUTTON",t)}};i(fe,"ButtonInteractionHandler");var Tt=i(n=>(e,t)=>{w(e);let r=new fe(n,Reflect.get(e,t)),o=Reflect.getMetadata(b,e);o?o.push(r):(o=[r],Reflect.defineMetadata(b,o,e))},"messageButton");var he=class extends H{constructor(e,t){super(e,"SELECT_MENU",t)}};i(he,"SelectMenuInteractionHandler");var At=i(n=>(e,t)=>{w(e);let r=new he(n,Reflect.get(e,t)),o=Reflect.getMetadata(b,e);o?o.push(r):(o=[r],Reflect.defineMetadata(b,o,e))},"messageSelectMenu");module.exports=gt(_t);0&&(module.exports={AppCommand,ApplicationCommandArgumentConverter,ApplicationCommandArgumentConverterNotFound,ApplicationCommandCheckFailed,ArgumentConverter,ArgumentConverterNotFound,ArgumentNotProvided,BuiltInModule,ButtonInteractionHandler,ClientPermissionRequired,Command,CommandCheckFailed,CommandClient,CommandNotFound,CoolDownError,CoolDownType,DMOnlyCommandError,DefaultCoolDownAdapter,GuildOnlyCommandError,InvalidModuleError,InvalidTargetError,Listener,Module,ModuleLoadError,OwnerOnlyCommandError,Registry,SelectMenuInteractionHandler,SlashCommandGlobalCheckError,UserPermissionRequired,applicationCommand,applicationCommandArgumentConverter,argumentConverter,command,coolDown,createCheckDecorator,dmOnly,guildOnly,listener,messageButton,messageSelectMenu,option,optional,ownerOnly,requireClientPermissions,requireUserPermissions,rest});
1
+ var re=Object.create;var O=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames,Et=Object.getOwnPropertySymbols,ie=Object.getPrototypeOf,Ht=Object.prototype.hasOwnProperty,ce=Object.prototype.propertyIsEnumerable;var Lt=(o,t,e)=>t in o?O(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,Ot=(o,t)=>{for(var e in t||(t={}))Ht.call(t,e)&&Lt(o,e,t[e]);if(Et)for(var e of Et(t))ce.call(t,e)&&Lt(o,e,t[e]);return o};var jt=o=>O(o,"__esModule",{value:!0}),c=(o,t)=>O(o,"name",{value:t,configurable:!0});var l=(o,t)=>()=>(o&&(t=o(o=0)),t);var It=(o,t)=>{for(var e in t)O(o,e,{get:t[e],enumerable:!0})},At=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of se(t))!Ht.call(o,n)&&(e||n!=="default")&&O(o,n,{get:()=>t[n],enumerable:!(r=ne(t,n))||r.enumerable});return o},M=(o,t)=>At(jt(O(o!=null?re(ie(o)):{},"default",!t&&o&&o.__esModule?{get:()=>o.default,enumerable:!0}:{value:o,enumerable:!0})),o),ae=(o=>(t,e)=>o&&o.get(t)||(e=At(jt({}),t,1),o&&o.set(t,e),e))(typeof WeakMap!="undefined"?new WeakMap:0);var s=l(()=>{});var B,ye,lt,tt,ft,j=l(()=>{s();B=Symbol(),ye=Symbol(),lt=Symbol(),tt=Symbol(),ft=Symbol()});var $t,dt,et,gt=l(()=>{s();$t=require("discord.js");j();dt=c((o,t)=>{let e=Reflect.getMetadata(ft,o,t);return e||(e=new $t.Collection,Reflect.defineMetadata(ft,e,o,t)),e},"getComponentHookStore"),et=c((o,t)=>(e,r)=>{let n=dt(e,r),i=n.get(o);i||(i=[],n.set(o,i)),i.push(t)},"createComponentHook")});var ut,G,me,b,ht,z,I=l(()=>{s();ut=require("discord.js");gt();j();G=c(o=>{let t=Reflect.getMetadata(B,o);return t||(t=new ut.Collection,Reflect.defineMetadata(B,t,o)),t},"getComponentStore"),me=c((o,t)=>G(o).get(t),"getComponent"),b=c(o=>t=>(e,r)=>{var n=new o(t,Reflect.get(e,r),Reflect.getMetadata("design:paramtypes",e,r));let i=dt(e,r);n.hooks=i;let a=G(e);ht(e,r).forEach((d,h)=>{var w;(w=n.argTypes.get(h))==null||w.decorators.push(d)}),a.set(r,n)},"createComponentDecorator"),ht=c((o,t)=>{let e=Reflect.getMetadata(B,o,t);return e||(e=new ut.Collection,Reflect.defineMetadata(B,e,o,t)),e},"getComponentArgumentStore"),z=c(o=>t=>(e,r,n)=>{var i=new o(t);ht(e,r).set(n,i)},"createArgumentDecorator")});var Z,yt=l(()=>{s();Z=class{constructor(t){this.type=t,this.decorators=[]}};c(Z,"ComponentArgument")});var Dt,E,Wt=l(()=>{s();Dt=M(require("lodash")),E=class{constructor(t){typeof t=="object"?this.options=Dt.default.merge(this.defaultOptions(),t):this.options=t}defaultOptions(){return{}}};c(E,"ComponentArgumentDecorator")});var g,pe,xt=l(()=>{s();I();A();g=class extends u{};c(g,"ApplicationCommandComponent");pe=b(g)});var $,Pt,Ct=l(()=>{s();D();$=class extends E{};c($,"ApplicationCommandOption");Pt=z($)});var Nt,ot,wt,Ut=l(()=>{s();Nt=require("discord.js");j();ot=c(o=>{let t=Reflect.getMetadata(lt,o);return t||(t=new Nt.Collection,Reflect.defineMetadata(lt,t,o)),t},"getModuleHookStore"),wt=c(o=>(t,e)=>{let r=ot(t),n=r.get(o);n||(n=[],r.set(o,n)),n.push(Reflect.get(t,e))},"moduleHook")});var q=l(()=>{s();Ut();gt()});var H,J,K=l(()=>{s();A();I();H=class extends u{defaultOptions(){return{emitter:"discord"}}constructor(t,e,r){super({event:t.event,emitter:(n=t.emitter)!=null?n:"discord"},e,r);var n}};c(H,"ListenerComponent");J=b(H)});var rt,Bt,Gt,Q,bt=l(()=>{s();rt=M(require("chalk")),Bt=require("discord.js"),Gt=M(require("lodash"));vt();q();K();j();Q=class{constructor(t,e){this.client=e,this.extensions=[],this.emitters=new Bt.Collection,this.logger=t.getChildLogger({prefix:[rt.default.green("[Registry]")]})}getComponentsWithTypeGlobal(t){let e=[];for(let r of this.extensions)e.push(...this.getComponentsWithType(r,t));return e}getComponentsWithType(t,e){let r=G(t);return Array.from(r.filter(n=>n.constructor===e).values())}registerEventListeners(t){let e=this.getComponentsWithType(t,H);for(let r of e){let n=this.emitters.get(r.options.emitter);if(n){let i=r.method.bind(t);Reflect.defineMetadata("bound",i,r),n.addListener(r.options.event,i)}}}unregisterEventListeners(t){let e=this.getComponentsWithType(t,H);for(let r of e){let n=this.emitters.get(r.options.emitter),i=Reflect.getMetadata("bound",r);n&&i&&n.removeListener(r.options.event,i)}}async registerModule(t){Reflect.defineMetadata(tt,this.client,t),this.registerEventListeners(t),await this.runModuleHook(t,"load"),this.extensions.push(t),this.logger.info(`Module registered: ${rt.default.green(t.constructor.name)}`)}async unregisterModule(t){this.unregisterEventListeners(t),await this.runModuleHook(t,"unload"),Gt.default.remove(this.extensions,e=>e===t),this.logger.info(`Module unregistered: ${rt.default.green(t.constructor.name)}`)}runModuleHook(t,e,...r){let i=ot(t).get(e);if(i)for(let a of i)a.call(t,...r)}registerEventEmitter(t,e){this.emitters.set(t,e)}};c(Q,"Registry")});var nt=l(()=>{s();bt();St()});var W,v,st=l(()=>{s();A();I();W=class extends u{};c(W,"ConverterComponent");v=b(W)});var zt,Zt,V,Mt=l(()=>{s();zt=M(require("chalk")),Zt=require("discord.js");st();nt();V=class{get commandClient(){return R.getFromModule(this)}get client(){return this.commandClient.discord}get logger(){return this._logger||(this._logger=this.commandClient.logger.getChildLogger({prefix:[zt.default.green(`[${this.constructor.name}]`)],displayFunctionName:!1})),this._logger}async convertArguments(t,e,r,n){let i=new Zt.Collection;for(let a of this.commandClient.registry.extensions)for(let m of this.commandClient.registry.getComponentsWithType(a,W))m.options.component==t&&i.set(m.options.type,{component:m,ext:a});for(let[a,m]of r){let d=i.get(m.type);if(!d){e[a]=void 0;continue}let h=await n(m,a,d.component);e[a]=await d.component.execute(d.ext,h)}}};c(V,"Extension")});var qt,P,Rt=l(()=>{s();qt=M(require("chalk"));Mt();P=class extends V{get logger(){return this._logger||(this._logger=this.commandClient.ctsLogger.getChildLogger({prefix:[qt.default.green(`[${this.constructor.name}]`)],displayFunctionName:!1})),this._logger}};c(P,"CTSExtension")});var T,f,X,y,x,Jt=l(()=>{s();T=M(require("chalk")),f=require("discord.js");xt();Ct();q();K();nt();st();Rt();X=function(o,t,e,r){var n=arguments.length,i=n<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,e):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(o,t,e,r);else for(var m=o.length-1;m>=0;m--)(a=o[m])&&(i=(n<3?a(i):n>3?a(t,e,i):a(t,e))||i);return n>3&&i&&Object.defineProperty(t,e,i),i},y=function(o,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,t)},x=class extends P{constructor(t){super();this.config=t}async interactionCreate(t){var i;if(t.type!==f.InteractionType.ApplicationCommand)return;let e=null,r=null,n=this.commandClient.registry.extensions;for(let a of n){let m=this.commandClient.registry.getComponentsWithType(a,g);for(let d of m)d.options.name===t.commandName&&(r=a,e=d)}if(e&&r){let a=[];await this.convertArguments(g,a,e.argTypes,()=>[t]);for(let[m,d]of e.argTypes){let h=null;for(let w of d.decorators)if(w instanceof $){h=(i=t.options.get(w.options.name,!1))==null?void 0:i.value;break}h&&(a[m]=h)}try{await e.execute(r,a,[t])}catch(m){this.logger.error(m),this.commandClient.emit("applicationCommandInvokeError",m,t)}}}async load(){}async sync(){let t=R.getFromModule(this);this.logger.info("Trying to sync commands...");let e=[];for(let r of t.registry.getComponentsWithTypeGlobal(g)){let n=Ot({},r.options);if(n.type===f.ApplicationCommandType.ChatInput){n.options=[];for(let[,i]of r.argTypes){let a=i.decorators.find(m=>m.constructor===$);a&&n.options.push(a.options)}}e.push(n)}if(this.logger.info(`Processing ${T.default.green(e.length)} commands(${e.map(r=>T.default.blue(r.name)).join(", ")})`),this.config.guilds)for(let r of this.config.guilds)try{let n=await this.client.guilds.fetch(r);await n.fetch(),this.logger.info(`Registering commands for guild ${T.default.green(n.name)}(${T.default.blue(n.id)})`),await n.commands.set(e),this.logger.info(`Successfully registered commands for guild ${T.default.green(n.name)}(${T.default.blue(n.id)})`)}catch(n){this.logger.error(`Failed to register commands to guild ${T.default.green(r)}: ${n.message}`)}else try{this.logger.info("Registering commands globally..."),await this.client.application.commands.set(e),this.logger.info("Successfully registered commands.")}catch(r){this.logger.error(`Failed to register commands to global: ${r.message}`)}}async chatInteraction(t){return t}async messageInteraction(t){return t}async userInteraction(t){return t}};c(x,"ApplicationCommandExtension");X([J({event:"interactionCreate"}),y("design:type",Function),y("design:paramtypes",[typeof f.Interaction=="undefined"?Object:f.Interaction])],x.prototype,"interactionCreate",null);X([wt("load"),y("design:type",Function),y("design:paramtypes",[])],x.prototype,"load",null);X([v({component:g,parameterless:!0,type:f.ChatInputCommandInteraction}),y("design:type",Function),y("design:paramtypes",[typeof f.ChatInputCommandInteraction=="undefined"?Object:f.ChatInputCommandInteraction])],x.prototype,"chatInteraction",null);X([v({component:g,parameterless:!0,type:f.MessageContextMenuCommandInteraction}),y("design:type",Function),y("design:paramtypes",[typeof f.MessageContextMenuCommandInteraction=="undefined"?Object:f.MessageContextMenuCommandInteraction])],x.prototype,"messageInteraction",null);X([v({component:g,parameterless:!0,type:f.UserContextMenuCommandInteraction}),y("design:type",Function),y("design:paramtypes",[typeof f.UserContextMenuCommandInteraction=="undefined"?Object:f.UserContextMenuCommandInteraction])],x.prototype,"userInteraction",null)});var C,le,Tt=l(()=>{s();I();A();C=class extends u{};c(C,"TextCommandComponent");le=b(C)});var N,fe,_t=l(()=>{s();D();D();N=class extends E{};c(N,"TextCommandRestOption");fe=z(N)});var U,it,_,k,Kt=l(()=>{s();K();U=require("discord.js");Rt();Tt();_t();D();it=function(o,t,e,r){var n=arguments.length,i=n<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,e):r,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(o,t,e,r);else for(var m=o.length-1;m>=0;m--)(a=o[m])&&(i=(n<3?a(i):n>3?a(t,e,i):a(t,e))||i);return n>3&&i&&Object.defineProperty(t,e,i),i},_=function(o,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,t)},k=class extends P{constructor(t){super();this.config=t}async processPrefix(t){let e=t.content,r=this.config.prefix;if(typeof r=="function"&&(r=await r(t)),typeof r=="string")return e.startsWith(r)?r.length:null;if(r instanceof Array){let n=r.find(i=>e.startsWith(i));return n?n.length:null}return null}async messageCreate(t){let e=await this.processPrefix(t);if(!e)return;let r=t.content.slice(e),n=[],i=new Map;for(let S of this.commandClient.registry.extensions)for(let L of this.commandClient.registry.getComponentsWithType(S,C))n.push(L),i.set(L,S);let a=0,m=n.find(S=>{let L=[S.options.name];S.options.aliases&&L.push(...S.options.aliases);for(let F of L)if(r.startsWith(F))return r.length===F.length?(a=F.length,!0):(a=F.length,r.startsWith(F+" "));return!1});if(!m)return;let d=i.get(m);if(!d)return;let h=[],w=r.slice(a+1).split(/ /g);await this.convertArguments(C,h,m.argTypes,async(S,L,F)=>{if(F.options.parameterless)return[t];if(S.decorators.find(pt=>pt.constructor===N)){let pt=w.join(" ");return w=[],[pt,t]}return[w.shift(),t]}),await m.execute(d,h,[t])}async mesage(t){return t}async str(t){return t}async num(t){return Number(t)}};c(k,"TextCommandExtension");it([J({event:"messageCreate",emitter:"discord"}),_("design:type",Function),_("design:paramtypes",[typeof U.Message=="undefined"?Object:U.Message])],k.prototype,"messageCreate",null);it([v({component:C,type:U.Message,parameterless:!0}),_("design:type",Function),_("design:paramtypes",[typeof U.Message=="undefined"?Object:U.Message])],k.prototype,"mesage",null);it([v({component:C,type:String}),_("design:type",Function),_("design:paramtypes",[String])],k.prototype,"str",null);it([v({component:C,type:Number}),_("design:type",Function),_("design:paramtypes",[String])],k.prototype,"num",null)});var Xt={};It(Xt,{CommandClient:()=>R});var ct,at,Qt,Vt,R,St=l(()=>{s();ct=M(require("chalk")),at=require("discord.js"),Qt=M(require("events")),Vt=require("tslog");Jt();Kt();j();bt();R=class extends Qt.default{constructor(t,e=new Vt.Logger({dateTimeTimezone:Intl.DateTimeFormat().resolvedOptions().timeZone})){super();this.discord=t,this.logger=e,this.owners=new Set,this.ctsLogger=e.getChildLogger({prefix:[ct.default.blue("[command.ts]")],displayFilePath:"hidden",displayFunctionName:!1}),this.registry=new Q(this.ctsLogger,this),this.registry.registerEventEmitter("cts",this),this.registry.registerEventEmitter("discord",this.discord)}async fetchOwners(){if(!this.discord.application)throw new Error("The client is not logged in.");this.ctsLogger.info("Fetching owners..."),await this.discord.application.fetch();let t=this.discord.application.owner;if(!t)throw new Error("Cannot find application owner");let e=[];if(t instanceof at.User)this.owners.add(t.id),e.push(t.tag);else if(t instanceof at.Team)for(let[r,n]of t.members)this.owners.add(r),e.push(n.user.tag);this.ctsLogger.info(`Fetched ${ct.default.green(e.length)} owners(${e.map(r=>ct.default.blue(r)).join(", ")})`)}async enableApplicationCommandsExtension(t){await this.registry.registerModule(new x(t)),this.ctsLogger.info("Application command extension enabled.")}async enableTextCommandsExtension(t){await this.registry.registerModule(new k(t)),this.ctsLogger.info("Text command extension enabled.")}getApplicationCommandsExtension(){return this.registry.extensions.find(t=>t.constructor===x)}static getFromModule(t){return Reflect.getMetadata(tt,t)}};c(R,"CommandClient")});var kt,u,A=l(()=>{s();kt=require("discord.js");yt();u=class{hooks=new kt.Collection;argTypes=new kt.Collection;constructor(t,e,r){this.options=this.convertOptions(t),this.method=e;for(let n=0;n<r.length;n++){let i=r[n];this.argTypes.set(n,new Z(i))}}convertOptions(t){return t}async executeHook(t,e,r){let n=this.hooks.get(e);if(!n)return;let{CommandClient:i}=await Promise.resolve().then(()=>(St(),Xt));for(let a of n)await a.call(null,i.getFromModule(t),...r)}async execute(t,e,r=e){await this.executeHook(t,"beforeCall",r);let n;try{n=await this.method.call(t,...e)}catch(i){throw await this.executeHook(t,"invokeError",[i]),i}return await this.executeHook(t,"afterCall",[n]),n}};c(u,"BaseComponent")});var ko,vt=l(()=>{s();ko=require("reflect-metadata");I();yt();Wt();A()});var Y,Ft=l(()=>{s();Y=class{};c(Y,"OwnerOnlyError")});var mt,Yt,de,te=l(()=>{s();mt=require("discord.js");q();Ft();Yt=c(o=>et("beforeCall",o),"createCheckDecorator"),de=Yt(async(o,t)=>{let e=!1;if(t instanceof mt.BaseInteraction?e=o.owners.has(t.user.id):t instanceof mt.Message&&(e=o.owners.has(t.author.id)),!e)throw new Y})});var ee=l(()=>{s();te();Ft()});var oe=l(()=>{s();Mt()});var D=l(()=>{s();vt();q();st();ee();K();nt();oe()});var ge={};It(ge,{ApplicationCommandComponent:()=>g,BaseComponent:()=>u,CommandClient:()=>R,ComponentArgument:()=>Z,ComponentArgumentDecorator:()=>E,ConverterComponent:()=>W,Extension:()=>V,ListenerComponent:()=>H,OwnerOnlyError:()=>Y,Registry:()=>Q,TextCommandComponent:()=>C,TextCommandRestOption:()=>N,applicationCommand:()=>pe,argConverter:()=>v,command:()=>le,createArgumentDecorator:()=>z,createCheckDecorator:()=>Yt,createComponentDecorator:()=>b,createComponentHook:()=>et,getComponent:()=>me,getComponentArgumentStore:()=>ht,getComponentStore:()=>G,getModuleHookStore:()=>ot,listener:()=>J,moduleHook:()=>wt,option:()=>Pt,ownerOnly:()=>de,rest:()=>fe});s();D();s();xt();Ct();s();Tt();_t();module.exports=ae(ge);0&&(module.exports={ApplicationCommandComponent,BaseComponent,CommandClient,ComponentArgument,ComponentArgumentDecorator,ConverterComponent,Extension,ListenerComponent,OwnerOnlyError,Registry,TextCommandComponent,TextCommandRestOption,applicationCommand,argConverter,command,createArgumentDecorator,createCheckDecorator,createComponentDecorator,createComponentHook,getComponent,getComponentArgumentStore,getComponentStore,getModuleHookStore,listener,moduleHook,option,ownerOnly,rest});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/home/runner/work/command.ts/command.ts/src/index.ts","../src/home/runner/work/command.ts/command.ts/src/constants.ts","../src/structures/home/runner/work/command.ts/command.ts/src/structures/Module.ts","../src/structures/home/runner/work/command.ts/command.ts/src/structures/CommandClient.ts","../src/structures/home/runner/work/command.ts/command.ts/src/structures/Registry.ts","../src/error/home/runner/work/command.ts/command.ts/src/error/InvalidTargetError.ts","../src/error/home/runner/work/command.ts/command.ts/src/error/ModuleError.ts","../src/error/home/runner/work/command.ts/command.ts/src/error/ArgumentNotProvided.ts","../src/error/home/runner/work/command.ts/command.ts/src/error/ArgumentConverterNotFound.ts","../src/error/home/runner/work/command.ts/command.ts/src/error/CommandCheckFailed.ts","../src/error/home/runner/work/command.ts/command.ts/src/error/PermissionRequired.ts","../src/error/checks/home/runner/work/command.ts/command.ts/src/error/checks/OwnerOnlyCommand.ts","../src/error/checks/home/runner/work/command.ts/command.ts/src/error/checks/GuildOnlyCommand.ts","../src/error/checks/home/runner/work/command.ts/command.ts/src/error/checks/DMOnlyCommand.ts","../src/error/checks/home/runner/work/command.ts/command.ts/src/error/checks/SlashCommandGlobalCheckError.ts","../src/error/home/runner/work/command.ts/command.ts/src/error/CommandNotFound.ts","../src/builtinModules/home/runner/work/command.ts/command.ts/src/builtinModules/BuiltInModule.ts","../src/listener/home/runner/work/command.ts/command.ts/src/listener/Listener.ts","../src/home/runner/work/command.ts/command.ts/src/utils.ts","../src/listener/home/runner/work/command.ts/command.ts/src/listener/decorator.ts","../src/builtinModules/home/runner/work/command.ts/command.ts/src/builtinModules/CommandHandler.ts","../src/command/home/runner/work/command.ts/command.ts/src/command/Command.ts","../src/command/home/runner/work/command.ts/command.ts/src/command/ArgumentConverter.ts","../src/command/home/runner/work/command.ts/command.ts/src/command/utils.ts","../src/command/home/runner/work/command.ts/command.ts/src/command/decorator.ts","../src/command/cooldown/home/runner/work/command.ts/command.ts/src/command/cooldown/type.ts","../src/command/cooldown/home/runner/work/command.ts/command.ts/src/command/cooldown/decorator.ts","../src/command/cooldown/home/runner/work/command.ts/command.ts/src/command/cooldown/error.ts","../src/command/cooldown/home/runner/work/command.ts/command.ts/src/command/cooldown/adapter.ts","../src/builtinModules/home/runner/work/command.ts/command.ts/src/builtinModules/BuiltinCommandConverters.ts","../src/builtinModules/home/runner/work/command.ts/command.ts/src/builtinModules/BuiltinApplicationCommandConverters.ts","../src/applicationCommand/home/runner/work/command.ts/command.ts/src/applicationCommand/decorator.ts","../src/applicationCommand/home/runner/work/command.ts/command.ts/src/applicationCommand/AppCommand.ts","../src/messageComponents/home/runner/work/command.ts/command.ts/src/messageComponents/base.ts","../src/messageComponents/home/runner/work/command.ts/command.ts/src/messageComponents/button.ts","../src/messageComponents/home/runner/work/command.ts/command.ts/src/messageComponents/selectMenu.ts"],"sourcesContent":["/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport 'reflect-metadata'\nimport './typings'\n\nexport * from './interface'\nexport * from './structures'\nexport * from './error'\nexport * from './command'\nexport * from './listener'\nexport * from './builtinModules/BuiltInModule'\nexport * from './applicationCommand'\nexport * from './messageComponents'\nexport * from './error'\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport const KCommands = Symbol('Command.TS Commands')\n\nexport const KApplicationCommands = Symbol('Command.TS Slash Commands')\n\nexport const KSlashCommandOptions = Symbol('Command.TS Slash Command Options')\n\nexport const KListeners = Symbol('Command.TS Listeners')\n\nexport const KModulePath = Symbol('Command.TS Module Path')\n\nexport const KListenerExecuteCache = Symbol('Command.TS Module Identifier')\n\nexport const KBuiltInModule = Symbol('Command.TS Built-In Module')\n\nexport const KOptionals = Symbol('Command.TS Optional Parameters')\n\nexport const KRest = Symbol('Command.TS Rest Parameter')\n\nexport const KArgumentConverters = Symbol('Command.TS Argument Converter')\n\nexport const KSlashArgumentConverters = Symbol('Command.TS Slash Argument Converter')\n\nexport const KCommandChecks = Symbol('Command.TS Command Checks')\n\nexport const KApplicationCommandChecks = Symbol('Command.TS Slash Command Checks')\n\nexport const KMessageComponentHandlers = Symbol('Command.TS Message Component Handlers')\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { KArgumentConverters, KCommands, KListeners, KMessageComponentHandlers, KModulePath, KSlashArgumentConverters, KApplicationCommands } from '../constants'\nimport type { Command } from '../command'\nimport { Listener } from '../listener'\nimport { ArgumentConverter, ApplicationCommandArgumentConverter } from '../command'\nimport { AppCommand } from '../applicationCommand'\nimport { CommandClient } from './CommandClient'\nimport { MessageComponentHandler } from '../messageComponents/base'\n\nexport abstract class Module {\n commandClient!: CommandClient\n\n get logger() {\n return this.commandClient.logger.getChildLogger({\n name: this.constructor.name,\n })\n }\n\n get commands(): Command[] {\n return Reflect.getMetadata(KCommands, this) || []\n }\n\n get listeners(): Listener[] {\n return Reflect.getMetadata(KListeners, this) || []\n }\n\n get argumentConverters(): ArgumentConverter[] {\n return Reflect.getMetadata(KArgumentConverters, this) || []\n }\n\n get applicationCommandArgumentConverters(): ApplicationCommandArgumentConverter[] {\n return Reflect.getMetadata(KSlashArgumentConverters, this) || []\n }\n\n get applicationCommands(): AppCommand[] {\n return Reflect.getMetadata(KApplicationCommands, this) || []\n }\n\n get messageComponentHandlers(): MessageComponentHandler[] {\n return Reflect.getMetadata(KMessageComponentHandlers, this) || []\n }\n\n get path(): string | undefined {\n return Reflect.getMetadata(KModulePath, this)\n }\n\n load() {}\n unload() {}\n beforeReload() {}\n afterReload() {}\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport _ from 'lodash'\nimport { Registry } from './Registry'\nimport { Client, CommandInteraction, Interaction, Message, Snowflake, User } from 'discord.js'\nimport { BuiltinCommandConverters, BuiltinApplicationCommandConverters, CommandHandler } from '../builtinModules'\nimport { CoolDownAdapter, DefaultCoolDownAdapter } from '../command'\nimport { Logger } from 'tslog'\n\nexport interface CommandOptions {\n prefix: string | ((msg: any) => string | Promise<string | string[]> | string[]) | string[]\n check: (msg: Message) => boolean | Promise<boolean>\n}\n\nexport interface SlashCommandOptions {\n check: (i: CommandInteraction) => boolean | Promise<boolean>\n}\n\nexport interface ApplicationCommandOptions {\n guild?: Snowflake | Snowflake[]\n autoSync: boolean\n beforeRunCheck: (i: Interaction) => void | Promise<void>\n}\n\nexport interface CommandClientOptions {\n command: CommandOptions\n owners: 'auto' | Snowflake[]\n slashCommands: SlashCommandOptions\n applicationCommands: ApplicationCommandOptions\n}\n\nexport interface CommandClientOptionsParam {\n command: Partial<CommandOptions>\n owners: 'auto' | string[]\n slashCommands: Partial<SlashCommandOptions>\n applicationCommands: Partial<ApplicationCommandOptions>\n}\n\nexport class CommandClient {\n options: CommandClientOptions\n owners: string[] = []\n registry = new Registry(this)\n client: Client\n coolDownAdapter: CoolDownAdapter\n logger: Logger\n\n private _isReady = false\n\n private async fetchOwners(): Promise<string[]> {\n await this.client.application?.fetch()\n const o = this.client.application?.owner\n if (!o) return []\n if (o instanceof User) return [o.id]\n else return o.members.map((x) => x.id)\n }\n\n async ready() {\n if (this._isReady) return\n this._isReady = true\n if (this.options.owners === 'auto') {\n const owners = await this.fetchOwners()\n this.owners.push(...owners)\n }\n if (this.options.applicationCommands.autoSync) {\n await this.registry.syncCommands()\n }\n }\n\n constructor({ client, coolDownAdapter, logger, ...options }: Partial<CommandClientOptionsParam> & { client: Client; coolDownAdapter?: CoolDownAdapter; logger?: Logger }) {\n this.client = client\n this.coolDownAdapter = coolDownAdapter || new DefaultCoolDownAdapter()\n this.options = _.merge<CommandClientOptions, Partial<CommandClientOptionsParam>>(\n {\n command: {\n prefix: '!',\n check: () => true,\n },\n owners: 'auto',\n slashCommands: {\n check: () => true,\n },\n applicationCommands: {\n autoSync: false,\n beforeRunCheck: () => {},\n },\n },\n options,\n )\n\n this.logger = logger ?? new Logger({ name: 'Command.TS' })\n\n if (this.options.owners !== 'auto') {\n this.owners = this.options.owners\n }\n\n this.client.once('ready', () => this.ready())\n this.registry.registerModule(new CommandHandler(this.registry))\n this.registry.registerModule(new BuiltinCommandConverters(this))\n this.registry.registerModule(new BuiltinApplicationCommandConverters(this))\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { CommandClient } from './CommandClient'\nimport { Module } from './Module'\nimport { Command, ApplicationCommandArgumentConverter } from '../command'\nimport { KBuiltInModule, KListenerExecuteCache, KModulePath } from '../constants'\nimport path from 'path'\nimport { InvalidModuleError, InvalidTargetError, ModuleLoadError } from '../error'\nimport { Collection, Guild } from 'discord.js'\nimport walkSync from 'walk-sync'\nimport { ArgumentConverter } from '../command'\nimport { AppCommand } from '../applicationCommand'\nimport * as fs from 'fs'\nimport { MessageComponentHandler } from '../messageComponents/base'\n\ntype ListenerExecutor = {\n event: string\n execute: any\n}\n\nexport class Registry {\n constructor(public client: CommandClient) {}\n\n modules: Collection<symbol, Module> = new Collection()\n\n private get logger() {\n return this.client.logger.getChildLogger({\n name: 'Registry',\n })\n }\n\n get commands(): Command[] {\n const result: Command[] = []\n\n for (const [, module] of this.modules) {\n result.push(...module.commands)\n }\n\n return result\n }\n\n get argumentConverters(): ArgumentConverter[] {\n const result: ArgumentConverter[] = []\n\n for (const [, module] of this.modules) {\n result.push(...module.argumentConverters)\n }\n\n return result\n }\n\n get applicationCommandArgumentConverters(): ApplicationCommandArgumentConverter[] {\n const result: ApplicationCommandArgumentConverter[] = []\n\n for (const [, module] of this.modules) {\n result.push(...module.applicationCommandArgumentConverters)\n }\n\n return result\n }\n\n get applicationCommands(): AppCommand[] {\n const result: AppCommand[] = []\n\n for (const [, module] of this.modules) {\n result.push(...module.applicationCommands)\n }\n\n return result\n }\n\n get messageComponentHandlers(): MessageComponentHandler[] {\n const result: MessageComponentHandler[] = []\n\n for (const [, module] of this.modules) {\n result.push(...module.messageComponentHandlers)\n }\n\n return result\n }\n\n registerModule(module: Module) {\n module.commandClient = this.client\n\n this.modules.set(Symbol(module.constructor.name), module)\n\n const list: ListenerExecutor[] = []\n\n for (const listener of module.listeners) {\n const bound = listener.execute.bind(module)\n list.push({ event: listener.name, execute: bound })\n this.client.client.on(listener.name, bound)\n }\n\n Reflect.defineMetadata(KListenerExecuteCache, list, module)\n\n return module\n }\n\n async loadModulesIn(dir: string, absolute = false) {\n let p = absolute ? dir : path.join(require.main!.path, dir)\n\n for (const i of walkSync(p)) {\n if (fs.lstatSync(path.join(p, i)).isFile()) {\n if (i.endsWith('.map')) continue\n await this.loadModule(path.join(p, i), true)\n }\n }\n }\n\n async loadModule(file: string, absolute: boolean = false) {\n let p = absolute ? file : path.join(require.main!.path, file)\n\n let m\n\n try {\n m = require(p)\n } catch (e: any) {\n throw new ModuleLoadError(p, e)\n }\n\n if (m.loaded) throw new Error('MODULE_ALREADY_LOADED')\n\n if (!m.install) throw new InvalidModuleError('Install function not found.')\n\n const mod = m.install(this.client)\n\n if (!(mod instanceof Module)) throw new InvalidTargetError()\n\n Reflect.defineMetadata(KModulePath, require.resolve(p), mod)\n\n this.registerModule(mod)\n\n await mod.load()\n\n m.loaded = true\n\n return mod\n }\n\n async syncCommands() {\n this.logger.debug(`Syncing commands...`)\n const commands = this.applicationCommands.filter((x) => !x.guild)\n const guild = this.client.options.applicationCommands.guild\n const syncForGuild = async (g: Guild, commands: AppCommand[]) => {\n this.logger.debug(`Syncing for guild ${g.name}(${g.id})`)\n const commandsToRegister = commands.map((x) => x.command)\n this.logger.debug(`Command List: ${commandsToRegister.map((x) => x.name).join(', ')}`)\n await g.commands.set(commandsToRegister)\n }\n if (guild) {\n if (typeof guild === 'string') {\n await syncForGuild(await this.client.client.guilds.fetch(guild), commands)\n } else {\n for (const g of guild) {\n await syncForGuild(await this.client.client.guilds.fetch(g), commands)\n }\n }\n } else {\n this.logger.debug('Syncing global...')\n await this.client.client.application?.commands.set(commands.map((x) => x.command))\n }\n const commandsWithGuild = this.applicationCommands.filter((x) => !!x.guild)\n\n const guilds = new Set<string>()\n\n for (const command of commandsWithGuild) {\n if (!command.guild) continue\n if (typeof command.guild === 'string') {\n guilds.add(command.guild)\n } else {\n for (const guild of command.guild) {\n guilds.add(guild)\n }\n }\n }\n\n for (const guild of guilds) {\n await syncForGuild(\n await this.client.client.guilds.fetch(guild),\n commandsWithGuild.filter((x) => x.guild && (typeof x.guild === 'string' ? guild === x.guild : x.guild.includes(guild))),\n )\n }\n\n this.logger.debug('Syncing ended.')\n }\n\n async unregisterModule(module: Module) {\n if (Reflect.getMetadata(KBuiltInModule, module)) throw new Error('Built-in modules cannot be unloaded')\n const symbol = this.modules.findKey((x) => x === module)\n if (!symbol) return module\n await module.unload()\n const list: ListenerExecutor[] = Reflect.getMetadata(KListenerExecuteCache, module)\n for (const listener of list) {\n this.client.client.removeListener(listener.event, listener.execute)\n }\n this.modules.delete(symbol)\n return module\n }\n\n async unloadModule(module: Module) {\n const p = Reflect.getMetadata(KModulePath, module)\n\n if (!p) throw new InvalidModuleError('This module is not loaded by loadModule.')\n\n await this.unregisterModule(module)\n delete require.cache[p]\n }\n\n async reloadModule(module: Module) {\n await module.beforeReload()\n const p = Reflect.getMetadata(KModulePath, module)\n await this.unloadModule(module)\n const mod = await this.loadModule(p, true)\n await mod.afterReload()\n return true\n }\n\n async reloadAll() {\n const results: {\n path: string\n success: boolean\n error?: Error\n }[] = []\n\n for (const [, module] of this.modules.filter((x) => !!x.path && !Reflect.getMetadata(KBuiltInModule, x))) {\n try {\n await this.reloadModule(module)\n results.push({\n path: module.path!,\n success: true,\n })\n } catch (e: any) {\n results.push({\n error: e,\n path: module.path!,\n success: false,\n })\n }\n }\n return results\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport class InvalidTargetError extends Error {\n constructor() {\n super('Class does not extend \"Module\" class.')\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport class ModuleLoadError extends Error {\n constructor(file: string, public error: Error) {\n super('Failed to load module ' + file)\n }\n}\n\nexport class InvalidModuleError extends Error {}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { Message } from 'discord.js'\nimport { Command } from '../command'\n\nexport class ArgumentNotProvided extends Error {\n constructor(public index: number, public command: Command, public msg: Message) {\n super(`Required argument #${index} not provided.`)\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { CommandInteraction, ContextMenuInteraction, Message } from 'discord.js'\nimport type { Argument } from '../command'\nimport type { AppCommandArgument } from '../applicationCommand'\n\nexport class ArgumentConverterNotFound extends Error {\n constructor(public type: Argument, public msg: Message) {\n super(`Argument converter ${type.type.name} not found.`)\n }\n}\nexport class ApplicationCommandArgumentConverterNotFound extends Error {\n constructor(public type: AppCommandArgument, public interaction: CommandInteraction | ContextMenuInteraction) {\n super(`Argument converter ${type.type.name} not found.`)\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { CommandInteraction, ContextMenuInteraction, Message, MessageComponentInteraction } from 'discord.js'\nimport { Command } from '../command'\nimport { AppCommand } from '../applicationCommand'\n\nexport class CommandCheckFailed extends Error {\n constructor(public msg: Message, public command: Command) {\n super()\n }\n}\n\nexport class ApplicationCommandCheckFailed extends Error {\n constructor(public interaction: CommandInteraction | MessageComponentInteraction | ContextMenuInteraction, public command: AppCommand) {\n super()\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { GuildMember, Permissions } from 'discord.js'\n\nexport class UserPermissionRequired extends Error {\n constructor(public user: GuildMember, public permissions: Permissions) {\n super()\n }\n}\n\nexport class ClientPermissionRequired extends Error {\n constructor(public permissions: Permissions) {\n super()\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport class OwnerOnlyCommandError extends Error {\n constructor() {\n super()\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport class GuildOnlyCommandError extends Error {\n constructor() {\n super()\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport class DMOnlyCommandError extends Error {\n constructor() {\n super()\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { CommandInteraction } from 'discord.js'\n\nexport class SlashCommandGlobalCheckError extends Error {\n constructor(public i: CommandInteraction) {\n super('Slash command before-run check failed.')\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { Message } from 'discord.js'\n\nexport class CommandNotFound extends Error {\n constructor(public commandName: string, public msg: Message, public args: string[]) {\n super(`Command ${commandName} not found.`)\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { Module } from '../structures'\nimport { KBuiltInModule } from '../constants'\n\nexport class BuiltInModule extends Module {\n constructor() {\n super()\n Reflect.defineMetadata(KBuiltInModule, true, this)\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport class Listener {\n constructor(public name: string, public execute: Function) {}\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { Module } from './structures'\nimport { InvalidTargetError } from './error'\n\nexport const checkTarget = (target: Object) => {\n if (!(target instanceof Module)) throw new InvalidTargetError()\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { checkTarget } from '../utils'\nimport { KListeners } from '../constants'\nimport { Listener } from './Listener'\nimport { Module } from '../structures'\n\nexport const listener = (event: string) => {\n return (\n target: Module,\n propertyKey: string,\n // descriptor: TypedPropertyDescriptor<any>,\n ) => {\n checkTarget(target)\n\n let properties: Listener[] = Reflect.getMetadata(KListeners, target)\n\n const listener = new Listener(event, Reflect.get(target, propertyKey))\n\n if (properties) {\n properties.push(listener)\n } else {\n properties = [listener]\n Reflect.defineMetadata(KListeners, properties, target)\n }\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { BuiltInModule } from './BuiltInModule'\nimport { Registry } from '../structures'\nimport { listener } from '../listener'\nimport {\n CommandInteraction,\n CommandInteractionOptionResolver,\n GuildMember,\n Interaction,\n Message,\n MessageComponentInteraction,\n MessageContextMenuInteraction,\n Role,\n User,\n UserContextMenuInteraction,\n} from 'discord.js'\nimport { CommandClient } from '../structures'\nimport { Command } from '../command'\nimport { ArgumentConverterNotFound, ArgumentNotProvided, CommandCheckFailed, ApplicationCommandArgumentConverterNotFound, ApplicationCommandCheckFailed } from '../error'\nimport { CommandNotFound } from '../error/CommandNotFound'\nimport { SlashCommandGlobalCheckError } from '../error/checks/SlashCommandGlobalCheckError'\nimport { MessageComponentHandler } from '../messageComponents/base'\n\nexport class CommandHandler extends BuiltInModule {\n private readonly client: CommandClient\n\n constructor(private registry: Registry) {\n super()\n this.client = registry.client\n }\n\n // region message command handler\n @listener('messageCreate')\n async message(msg: Message) {\n const error = (error: Error) => this.client.client.emit('commandError', error, msg)\n\n try {\n const prefixList: string[] | string =\n typeof this.client.options.command.prefix === 'string'\n ? this.client.options.command.prefix\n : typeof this.client.options.command.prefix === 'function'\n ? await this.client.options.command.prefix(msg)\n : this.client.options.command.prefix\n let prefix: string\n if (typeof prefixList === 'object') {\n const res = prefixList.find((x) => msg.content.includes(x))\n\n if (!res) return\n\n prefix = res\n } else {\n if (!msg.content.includes(prefixList)) return\n prefix = prefixList\n }\n\n if (!msg.content.startsWith(prefix)) return\n\n const args = msg.content.slice(prefix.length).split(' ')\n\n const command = args.shift()\n\n if (!command) return\n\n let cmd: Command | null = null\n\n for (const c of this.registry.commands) {\n const aliases = typeof c.aliases === 'function' ? await c.aliases(msg) : c.aliases\n if ([...aliases, c.name].some((x) => x === command)) {\n cmd = c\n break\n }\n }\n\n msg.data = {\n cts: this.client,\n command: cmd,\n prefix: prefix,\n }\n\n if (!(await this.client.options.command.check(msg))) {\n return\n }\n\n if (!cmd) return error(new CommandNotFound(command, msg, args))\n\n const module = this.registry.modules.find((x) => x.commands.includes(cmd!))\n\n if (!module) return\n\n const argList: any[] = []\n\n for (const check of cmd.checks) {\n if (!(await check(msg))) return error(new CommandCheckFailed(msg, cmd))\n }\n\n for (let i = 0; i < cmd.argTypes.length; i++) {\n const argType = cmd.argTypes[i]\n const converter = this.registry.argumentConverters.find((x) => x.type === argType.type)\n\n if (argType.rest) {\n const i = args.join(' ')\n argList.push(i)\n break\n }\n\n if (!converter) return error(new ArgumentConverterNotFound(argType, msg))\n\n const converterModule = this.registry.modules.find((x) => x.argumentConverters.includes(converter))\n\n if (!converterModule) return error(new ArgumentConverterNotFound(argType, msg))\n\n if (converter.withoutParameter) {\n argList.push(await converter.execute(converterModule, msg))\n continue\n }\n const arg = args.shift()\n if (argType.optional && !arg) {\n break\n }\n if (!arg) {\n return error(new ArgumentNotProvided(i, cmd, msg))\n }\n const executed = await converter.execute(converterModule, msg, arg)\n if ((executed === undefined || executed === null) && !argType.optional) {\n return error(new ArgumentNotProvided(i, cmd, msg))\n }\n argList.push(executed)\n }\n\n try {\n await cmd.execute(module, argList)\n } catch (e: any) {\n return error(e)\n }\n } catch (e) {\n return error(e)\n }\n }\n // endregion\n\n // region slash command handler\n private async command(i: CommandInteraction) {\n const error = (error: Error) => this.client.client.emit('applicationCommandError', error, i)\n try {\n const cmd = this.registry.applicationCommands.find((x) => x.command.type === 'CHAT_INPUT' && x.command.name === i.commandName)\n\n if (!cmd) return\n\n const module = this.registry.modules.find((x) => x.applicationCommands.includes(cmd))\n\n if (!module) return\n\n const argList: any[] = []\n\n i.data = {\n cts: this.client,\n command: cmd,\n }\n\n if (!(await this.client.options.slashCommands.check(i))) {\n return error(new SlashCommandGlobalCheckError(i))\n }\n for (const check of cmd.checks) {\n if (!(await check(i))) return error(new ApplicationCommandCheckFailed(i, cmd))\n }\n\n for (let j = 0; j < cmd.params.length; j++) {\n const argType = cmd.params[j]\n const converter = this.registry.applicationCommandArgumentConverters.find((x) => x.type === argType.type)\n\n if (argType.type === CommandInteraction) {\n argList.push(i)\n continue\n }\n\n if (argType.type === CommandInteractionOptionResolver) {\n argList.push(i.options)\n continue\n }\n\n if (argType.name) {\n switch (argType.type) {\n case String:\n argList.push(i.options.getString(argType.name, false) || undefined)\n break\n case Role:\n argList.push(i.options.getRole(argType.name, false) || undefined)\n break\n case User:\n argList.push(i.options.getUser(argType.name, false) || undefined)\n break\n case GuildMember:\n argList.push(i.options.getMember(argType.name, false) || undefined)\n break\n case Boolean:\n argList.push(i.options.getBoolean(argType.name, false) || undefined)\n break\n case Number:\n const opt = i.options.get(argType.name, false)\n if (!opt) {\n argList.push(undefined)\n break\n }\n if (opt.type == 'NUMBER') {\n argList.push(i.options.getNumber(argType.name, false) ?? undefined)\n break\n }\n if (opt.type == 'INTEGER') {\n argList.push(i.options.getInteger(argType.name, false) ?? undefined)\n break\n }\n }\n continue\n }\n\n if (!converter) return error(new ApplicationCommandArgumentConverterNotFound(argType, i))\n\n argList.push(await converter.execute(module, i))\n }\n\n await cmd.execute(module, argList)\n } catch (e) {\n return error(e)\n }\n }\n // endregion\n\n private async messageComponent(i: MessageComponentInteraction) {\n const error = (e: any) => this.client.client.emit('messageComponentError', e)\n\n try {\n const handlers: MessageComponentHandler[] = []\n\n for (const handler of this.registry.messageComponentHandlers) {\n if (handler.componentId === handler.componentId && handler.componentType === i.componentType) {\n handlers.push(handler)\n }\n }\n\n for (const handler of handlers) {\n const module = this.registry.modules.find((x) => x.messageComponentHandlers.includes(handler))\n if (!module) continue\n await handler.run(module, i)\n }\n } catch (e) {\n error(e)\n }\n }\n\n private async userContextMenu(i: UserContextMenuInteraction) {\n const error = (error: Error) => this.client.client.emit('applicationCommandError', error, i)\n try {\n const cmd = this.registry.applicationCommands.find((x) => x.command.type === 'USER' && x.command.name === i.commandName)\n\n if (!cmd) return\n\n const module = this.registry.modules.find((x) => x.applicationCommands.includes(cmd))\n\n if (!module) return\n\n i.data = {\n cts: this.client,\n command: cmd,\n }\n\n for (const check of cmd.checks) {\n if (!(await check(i))) return error(new ApplicationCommandCheckFailed(i, cmd))\n }\n\n let argList: any[] = []\n\n for (let j = 0; j < cmd.params.length; j++) {\n const argType = cmd.params[j]\n const converter = this.registry.applicationCommandArgumentConverters.find((x) => x.type === argType.type)\n\n if (argType.type === UserContextMenuInteraction) {\n argList.push(i)\n continue\n }\n\n if (!converter) return error(new ApplicationCommandArgumentConverterNotFound(argType, i))\n\n argList.push(await converter.execute(module, i))\n }\n\n await cmd.execute(module, argList)\n } catch (e) {\n return error(e)\n }\n }\n\n private async messageContextMenu(i: MessageContextMenuInteraction) {\n const error = (error: Error) => this.client.client.emit('applicationCommandError', error, i)\n try {\n const cmd = this.registry.applicationCommands.find((x) => x.command.type === 'MESSAGE' && x.command.name === i.commandName)\n\n if (!cmd) return\n\n const module = this.registry.modules.find((x) => x.applicationCommands.includes(cmd))\n\n if (!module) return\n\n i.data = {\n cts: this.client,\n command: cmd,\n }\n\n for (const check of cmd.checks) {\n if (!(await check(i))) return error(new ApplicationCommandCheckFailed(i, cmd))\n }\n\n let argList: any[] = []\n\n for (let j = 0; j < cmd.params.length; j++) {\n const argType = cmd.params[j]\n const converter = this.registry.applicationCommandArgumentConverters.find((x) => x.type === argType.type)\n\n if (argType.type === MessageContextMenuInteraction) {\n argList.push(i)\n continue\n }\n\n if (!converter) return error(new ApplicationCommandArgumentConverterNotFound(argType, i))\n\n argList.push(await converter.execute(module, i))\n }\n\n await cmd.execute(module, argList)\n } catch (e) {\n return error(e)\n }\n }\n\n @listener('interactionCreate')\n async interaction(i: Interaction) {\n const error = (e: any) => this.client.client.emit('interactionError', e, i)\n\n try {\n await this.client.options.applicationCommands.beforeRunCheck(i)\n if (i.isCommand()) {\n await this.command(i)\n return\n }\n if (i.isMessageComponent()) {\n await this.messageComponent(i)\n return\n }\n if (i.isMessageContextMenu()) {\n await this.messageContextMenu(i)\n return\n }\n if (i.isUserContextMenu()) {\n await this.userContextMenu(i)\n return\n }\n } catch (e) {\n return error(e)\n }\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { Module } from '../structures'\nimport { CommandInteraction, ContextMenuInteraction, Message, MessageComponentInteraction } from 'discord.js'\nimport { KCommandChecks } from '../constants'\n\nexport type Argument = {\n optional: boolean\n type: any\n rest: boolean\n}\n\nexport type CheckFunction = (msg: Message) => boolean | Promise<boolean>\nexport type ApplicationCommandCheckFunction = (i: CommandInteraction | MessageComponentInteraction | ContextMenuInteraction) => boolean | Promise<boolean>\n\nexport class Command {\n execute(module: Module, args: any[]) {\n return this.run.apply(module, args)\n }\n\n get checks(): CheckFunction[] {\n return Reflect.getMetadata(KCommandChecks, this.module, this.key) || []\n }\n\n constructor(\n private run: Function,\n public argTypes: Argument[],\n public name: string,\n public aliases: string[] | ((msg: Message) => string[] | Promise<string[]>),\n public module: Module,\n public key: symbol | string,\n ) {}\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { Module } from '../structures'\nimport { CommandInteraction, ContextMenuInteraction, Message } from 'discord.js'\n\nexport class ArgumentConverter {\n execute(module: Module, msg: Message, arg?: string) {\n return this.run.apply(module, [msg, arg])\n }\n\n constructor(public type: object, private run: Function, public withoutParameter: boolean) {}\n}\n\nexport class ApplicationCommandArgumentConverter {\n execute(module: Module, interaction: CommandInteraction | ContextMenuInteraction) {\n return this.run.apply(module, [interaction])\n }\n\n constructor(public type: object, private run: Function) {}\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { CommandInteraction, ContextMenuInteraction, Message, MessageComponentInteraction } from 'discord.js'\nimport type { CheckFunction, ApplicationCommandCheckFunction } from './Command'\nimport { KCommandChecks, KApplicationCommandChecks } from '../constants'\n\nexport const createCheckDecorator = (\n execute: ((msg: Message) => boolean | Promise<boolean>) | null,\n executeApplicationCommand?: (i: CommandInteraction | MessageComponentInteraction | ContextMenuInteraction) => boolean | Promise<boolean>,\n): MethodDecorator => {\n return (target, propertyKey) => {\n if (execute) {\n let properties: CheckFunction[] = Reflect.getMetadata(KCommandChecks, target, propertyKey)\n if (properties) {\n properties.push(execute)\n } else {\n properties = [execute]\n Reflect.defineMetadata(KCommandChecks, properties, target, propertyKey)\n }\n }\n if (executeApplicationCommand) {\n let properties: ApplicationCommandCheckFunction[] = Reflect.getMetadata(KApplicationCommandChecks, target, propertyKey)\n if (properties) {\n properties.push(executeApplicationCommand)\n } else {\n properties = [executeApplicationCommand]\n Reflect.defineMetadata(KApplicationCommandChecks, properties, target, propertyKey)\n }\n }\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { KArgumentConverters, KCommands, KOptionals, KRest, KSlashArgumentConverters } from '../constants'\nimport { Command } from './Command'\nimport { checkTarget } from '../utils'\nimport { ArgumentConverter, ApplicationCommandArgumentConverter } from './ArgumentConverter'\nimport { Module } from '../structures'\nimport { createCheckDecorator } from './utils'\nimport { GuildMember, Message, PermissionResolvable, Permissions, TextChannel } from 'discord.js'\nimport { ClientPermissionRequired, DMOnlyCommandError, GuildOnlyCommandError, OwnerOnlyCommandError, UserPermissionRequired } from '../error'\n\ntype CommandOptions = {\n name: string\n aliases: string[] | ((msg: Message) => string[])\n optionTypes?: any[]\n}\n\nexport const command = (options: Partial<CommandOptions> = {}) => {\n return (\n target: Object,\n propertyKey: string,\n // descriptor: TypedPropertyDescriptor<any>,\n ) => {\n checkTarget(target)\n\n let properties: Command[] = Reflect.getMetadata(KCommands, target)\n\n const params: any[] = options.optionTypes ?? Reflect.getMetadata('design:paramtypes', target, propertyKey)\n\n const optionals: number = Reflect.getMetadata(KOptionals, target, propertyKey) || -1\n\n const rest = Reflect.getMetadata(KRest, target, propertyKey) || -1\n\n const command = new Command(\n Reflect.get(target, propertyKey),\n params.map((x, i) => ({\n type: x,\n optional: optionals === -1 ? false : optionals <= i,\n rest: rest === -1 ? false : rest === i,\n })),\n options.name || propertyKey,\n options.aliases || [],\n target as Module,\n propertyKey,\n )\n\n if (properties) {\n properties.push(command)\n } else {\n properties = [command]\n Reflect.defineMetadata(KCommands, properties, target)\n }\n }\n}\n\nexport const argumentConverter = (type: object, requireParameter = true) => {\n return (\n target: Object,\n propertyKey: string,\n // descriptor: TypedPropertyDescriptor<any>,\n ) => {\n checkTarget(target)\n\n let properties: ArgumentConverter[] = Reflect.getMetadata(KArgumentConverters, target)\n\n const converter = new ArgumentConverter(type, Reflect.get(target, propertyKey), !requireParameter)\n\n if (properties) {\n properties.push(converter)\n } else {\n properties = [converter]\n Reflect.defineMetadata(KArgumentConverters, properties, target)\n }\n }\n}\n\nexport const applicationCommandArgumentConverter = (type: object) => {\n return (\n target: Object,\n propertyKey: string,\n // descriptor: TypedPropertyDescriptor<any>,\n ) => {\n checkTarget(target)\n\n let properties: ApplicationCommandArgumentConverter[] = Reflect.getMetadata(KSlashArgumentConverters, target)\n\n const converter = new ApplicationCommandArgumentConverter(type, Reflect.get(target, propertyKey))\n\n if (properties) {\n properties.push(converter)\n } else {\n properties = [converter]\n Reflect.defineMetadata(KSlashArgumentConverters, properties, target)\n }\n }\n}\n\nexport const optional: ParameterDecorator = (target, propertyKey, parameterIndex) => {\n checkTarget(target)\n\n Reflect.defineMetadata(KOptionals, parameterIndex, target, propertyKey)\n}\n\nexport const rest: ParameterDecorator = (target, propertyKey, parameterIndex) => {\n checkTarget(target)\n\n const params: any[] = Reflect.getMetadata('design:paramtypes', target, propertyKey)\n\n if (params.length - 1 !== parameterIndex) throw new Error('Rest decorator must be used at last argument.')\n\n if (params[parameterIndex] !== String) throw new Error('Rest argument type must be \"String\"')\n\n Reflect.defineMetadata(KRest, parameterIndex, target, propertyKey)\n}\n\nexport const ownerOnly = createCheckDecorator(\n (msg) => {\n if (msg.data.cts.owners.includes(msg.author.id)) return true\n throw new OwnerOnlyCommandError()\n },\n (i) => {\n if (i.data.cts.owners.includes(i.user.id)) return true\n throw new OwnerOnlyCommandError()\n },\n)\n\nexport const guildOnly = createCheckDecorator(\n (msg) => {\n if (!!msg.guild) return true\n throw new GuildOnlyCommandError()\n },\n (i) => {\n if (!!i.guildId) return true\n throw new GuildOnlyCommandError()\n },\n)\n\nexport const dmOnly = createCheckDecorator(\n (msg) => {\n if (!msg.guild) return true\n throw new DMOnlyCommandError()\n },\n (i) => {\n if (!i.guildId) return true\n throw new DMOnlyCommandError()\n },\n)\n\nexport const requireUserPermissions = (permission: PermissionResolvable) =>\n createCheckDecorator(\n (msg) => {\n if (!msg.guild || !msg.member) throw new Error('This command must be used in guild.')\n if (msg.member.permissionsIn(msg.channel as TextChannel).has(permission)) {\n return true\n }\n throw new UserPermissionRequired(msg.member, new Permissions(permission))\n },\n (i) => {\n if (!i.guild || !i.member) throw new Error('This command must be used in guild.')\n if (!(i.member instanceof GuildMember) || i.member.permissionsIn(i.channel as TextChannel).has(permission)) {\n return true\n }\n throw new UserPermissionRequired(i.member, new Permissions(permission))\n },\n )\n\nexport const requireClientPermissions = (permission: PermissionResolvable) =>\n createCheckDecorator(\n (msg) => {\n if (!msg.guild) throw new Error('This command must be used in guild.')\n if (msg.guild.me!.permissionsIn(msg.channel as TextChannel).has(permission)) {\n return true\n }\n throw new ClientPermissionRequired(new Permissions(permission))\n },\n (i) => {\n if (!i.guild) throw new Error('This command must be used in guild.')\n if (i.guild.me!.permissionsIn(i.channel as TextChannel).has(permission)) {\n return true\n }\n throw new ClientPermissionRequired(new Permissions(permission))\n },\n )\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport enum CoolDownType {\n USER,\n CHANNEL,\n GUILD,\n ROLE,\n CATEGORY,\n MEMBER,\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { createCheckDecorator } from '../utils'\nimport { CoolDownType } from './type'\nimport { DMChannel, GuildMember, TextChannel } from 'discord.js'\nimport { CoolDownError } from './error'\n\nexport const coolDown = (type: CoolDownType, seconds: number) =>\n createCheckDecorator(\n async (msg) => {\n const a = msg.data.cts.coolDownAdapter\n const getKey = (): string => {\n switch (type) {\n case CoolDownType.USER:\n return msg.author.id\n case CoolDownType.GUILD:\n return (msg.guild || msg.author).id\n case CoolDownType.CHANNEL:\n return msg.channel.id\n case CoolDownType.MEMBER:\n return `${msg.guild?.id}.${msg.author.id}`\n case CoolDownType.ROLE:\n return (msg.channel instanceof DMChannel ? msg.channel : msg.member!.roles.highest).id\n case CoolDownType.CATEGORY:\n return ((msg.channel as TextChannel).parent || msg.channel).id\n }\n }\n const key = getKey() + '-command-' + msg.data.command?.name\n const data = await a.get(key)\n const now = Date.now()\n if (!data || !(now - data < seconds * 1000)) {\n await a.set(key, now)\n return true\n }\n throw new CoolDownError(new Date(data + seconds * 1000))\n },\n async (i) => {\n if (i.isMessageComponent()) return true\n const a = i.data.cts.coolDownAdapter\n const getKey = (): string => {\n switch (type) {\n case CoolDownType.USER:\n return i.user.id + '.user'\n case CoolDownType.GUILD:\n return (i.guild || i.user).id + '.guild'\n case CoolDownType.CHANNEL:\n return i.channel!.id + '.channel'\n case CoolDownType.MEMBER:\n return `${i.guild?.id}.${i.user.id}`\n case CoolDownType.ROLE:\n return (i.channel instanceof DMChannel ? i.channel : (i.member as GuildMember)!.roles.highest).id + '.role'\n case CoolDownType.CATEGORY:\n return ((i.channel as TextChannel).parent || i.channel!).id + '.category'\n }\n }\n const key = getKey() + '-appCommand-' + i.commandName\n const data = await a.get(key)\n const now = Date.now()\n if (!data || !(now - data < seconds * 1000)) {\n await a.set(key, now)\n return true\n }\n throw new CoolDownError(new Date(data + seconds * 1000))\n },\n )\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nexport class CoolDownError extends Error {\n constructor(public endsAt: Date) {\n super()\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { Collection } from 'discord.js'\n\nexport interface CoolDownAdapter {\n get(id: string): Promise<number | undefined>\n set(id: string, value: number): Promise<void>\n}\n\nexport class DefaultCoolDownAdapter implements CoolDownAdapter {\n map = new Collection<string, number>()\n async get(id: string): Promise<number | undefined> {\n return this.map.get(id)\n }\n\n async set(id: string, value: number) {\n this.map.set(id, value)\n return\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { BuiltInModule } from './BuiltInModule'\nimport { argumentConverter } from '../command'\nimport { Client, GuildMember, Message, User, Role } from 'discord.js'\nimport { CommandClient } from '../structures'\n\nexport class BuiltinCommandConverters extends BuiltInModule {\n client: Client\n\n constructor(private cts: CommandClient) {\n super()\n this.client = cts.client\n }\n\n @argumentConverter(Message, false)\n message(msg: Message) {\n return msg\n }\n\n @argumentConverter(String)\n string(msg: Message, arg: string) {\n return arg\n }\n\n getUserIDByMention(mention: string): `${bigint}` | undefined {\n if (!mention) return\n if (mention.startsWith('<@') && mention.endsWith('>')) {\n mention = mention.slice(2, -1)\n if (mention.startsWith('!')) {\n mention = mention.slice(1)\n }\n return mention as `${bigint}`\n }\n }\n\n @argumentConverter(User)\n user(msg: Message, value: string): User | null {\n let user = this.client.users.cache.get(value)\n if (user) return user\n user = this.client.users.cache.find((x) => x.tag === value || x.username === value)\n if (user) return user\n const id = this.getUserIDByMention(value)\n if (!id) return null\n user = this.client.users.cache.get(id)\n return user || null\n }\n\n @argumentConverter(GuildMember)\n member(msg: Message, value: string): GuildMember | undefined {\n let user = msg.guild?.members.cache.get(value)\n if (!user) return user\n user = msg.guild?.members.cache.find((x) => x.user.tag === value)\n if (user) return user\n const id = this.getUserIDByMention(value)\n if (!id) return\n user = msg.guild?.members.cache.get(id)\n return user || undefined\n }\n\n @argumentConverter(Number)\n number(msg: Message, value: string) {\n const n = Number(value)\n return isNaN(n) ? undefined : n\n }\n\n getRoleIDByMention(mention: string): `${bigint}` | undefined {\n if (!mention) return\n if (mention.startsWith('<@') && mention.endsWith('>')) {\n mention = mention.slice(2, -1)\n if (mention.startsWith('&')) {\n mention = mention.slice(1)\n }\n return mention as `${bigint}`\n }\n }\n\n @argumentConverter(Role)\n role(msg: Message, value: string): Role | undefined {\n const id = this.getRoleIDByMention(value)\n if (!id) return\n const role = msg.guild?.roles.cache.get(id)\n return role || undefined\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { BuiltInModule } from './BuiltInModule'\nimport { Client } from 'discord.js'\nimport { CommandClient } from '../structures'\n\nexport class BuiltinApplicationCommandConverters extends BuiltInModule {\n client: Client\n\n constructor(private cts: CommandClient) {\n super()\n this.client = cts.client\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { ApplicationCommandDataResolvable, Collection, Snowflake } from 'discord.js'\nimport { checkTarget } from '../utils'\nimport { KSlashCommandOptions, KApplicationCommands } from '../constants'\nimport { Module } from '../structures'\nimport { AppCommand } from './AppCommand'\n\ntype ApplicationCommandOptions = {\n guild: Snowflake | Snowflake[]\n optionTypes?: any[]\n}\n\nexport const applicationCommand = (opt: Partial<ApplicationCommandOptions> & { command: ApplicationCommandDataResolvable }) => {\n return (\n target: Object,\n propertyKey: string,\n // descriptor: TypedPropertyDescriptor<any>,\n ) => {\n checkTarget(target)\n\n let properties: AppCommand[] = Reflect.getMetadata(KApplicationCommands, target)\n\n const params: any[] = opt.optionTypes ?? Reflect.getMetadata('design:paramtypes', target, propertyKey)\n\n const options: Collection<number, string> = Reflect.getMetadata(KSlashCommandOptions, target, propertyKey) || new Collection<number, string>()\n\n const command = new AppCommand(\n opt.command,\n Reflect.get(target, propertyKey),\n target as Module,\n params.map((x, i) => ({\n type: x,\n name: options.get(i),\n })),\n opt.guild,\n propertyKey,\n )\n\n if (properties) {\n properties.push(command)\n } else {\n properties = [command]\n Reflect.defineMetadata(KApplicationCommands, properties, target)\n }\n }\n}\n\nexport const option = (key: string): ParameterDecorator => (target, propertyKey, parameterIndex) => {\n checkTarget(target)\n\n let properties: Collection<number, string> = Reflect.getMetadata(KSlashCommandOptions, target, propertyKey)\n\n if (!properties) {\n properties = new Collection<number, string>()\n Reflect.defineMetadata(KSlashCommandOptions, properties, target, propertyKey)\n }\n\n properties.set(parameterIndex, key)\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { Module } from '../structures'\nimport { ApplicationCommandDataResolvable, Snowflake } from 'discord.js'\nimport { KApplicationCommandChecks } from '../constants'\nimport { ApplicationCommandCheckFunction } from '../command'\n\nexport type AppCommandArgument = {\n type: any\n name?: string\n}\n\nexport class AppCommand {\n get checks(): ApplicationCommandCheckFunction[] {\n return Reflect.getMetadata(KApplicationCommandChecks, this.module, this.key) || []\n }\n\n execute(module: Module, args: any[]) {\n return this.run.apply(module, args)\n }\n\n constructor(\n public command: ApplicationCommandDataResolvable,\n private run: Function,\n public module: Module,\n public params: AppCommandArgument[],\n public guild: Snowflake | Snowflake[] | undefined,\n private key: string | symbol,\n ) {}\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { MessageComponentInteraction, MessageComponentType } from 'discord.js'\nimport { Module } from '../structures'\n\nexport type MessageComponentExecutor = (i: MessageComponentInteraction) => void | Promise<void>\n\nexport class MessageComponentHandler {\n constructor(public componentId: string, public componentType: Exclude<MessageComponentType, 'ACTION_ROW'>, public execute: MessageComponentExecutor) {}\n\n run(module: Module, i: MessageComponentInteraction) {\n return this.execute.apply(module, [i])\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { MessageComponentExecutor, MessageComponentHandler } from './base'\nimport { checkTarget } from '../utils'\nimport { KMessageComponentHandlers } from '../constants'\n\nexport class ButtonInteractionHandler extends MessageComponentHandler {\n constructor(id: string, execute: MessageComponentExecutor) {\n super(id, 'BUTTON', execute)\n }\n}\n\nexport const messageButton = (id: string): MethodDecorator => {\n return (target, propertyKey) => {\n checkTarget(target)\n\n const handler = new ButtonInteractionHandler(id, Reflect.get(target, propertyKey))\n\n let properties: MessageComponentHandler[] = Reflect.getMetadata(KMessageComponentHandlers, target)\n\n if (properties) {\n properties.push(handler)\n } else {\n properties = [handler]\n Reflect.defineMetadata(KMessageComponentHandlers, properties, target)\n }\n }\n}\n","/*\n * Copyright (c) 2022 pikokr. Licensed under the MIT license\n */\n\nimport { MessageComponentExecutor, MessageComponentHandler } from './base'\nimport { checkTarget } from '../utils'\nimport { KMessageComponentHandlers } from '../constants'\n\nexport class SelectMenuInteractionHandler extends MessageComponentHandler {\n constructor(id: string, execute: MessageComponentExecutor) {\n super(id, 'SELECT_MENU', execute)\n }\n}\n\nexport const messageSelectMenu = (id: string): MethodDecorator => {\n return (target, propertyKey) => {\n checkTarget(target)\n\n const handler = new SelectMenuInteractionHandler(id, Reflect.get(target, propertyKey))\n\n let properties: MessageComponentHandler[] = Reflect.getMetadata(KMessageComponentHandlers, target)\n\n if (properties) {\n properties.push(handler)\n } else {\n properties = [handler]\n Reflect.defineMetadata(KMessageComponentHandlers, properties, target)\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../node_modules/tsup/assets/home/runner/work/command.ts/command.ts/node_modules/tsup/assets/cjs_shims.js","../src/core/home/runner/work/command.ts/command.ts/src/core/symbols.ts","../src/core/hooks/home/runner/work/command.ts/command.ts/src/core/hooks/componentHook.ts","../src/core/components/home/runner/work/command.ts/command.ts/src/core/components/decoratorCreator.ts","../src/core/components/home/runner/work/command.ts/command.ts/src/core/components/ComponentArgument.ts","../src/core/components/home/runner/work/command.ts/command.ts/src/core/components/ComponentArgumentDecorator.ts","../src/applicationCommand/home/runner/work/command.ts/command.ts/src/applicationCommand/ApplicationCommand.ts","../src/applicationCommand/home/runner/work/command.ts/command.ts/src/applicationCommand/ApplicationCommandOption.ts","../src/core/hooks/home/runner/work/command.ts/command.ts/src/core/hooks/moduleHook.ts","../src/core/hooks/home/runner/work/command.ts/command.ts/src/core/hooks/index.ts","../src/core/listener/home/runner/work/command.ts/command.ts/src/core/listener/index.ts","../src/core/structures/home/runner/work/command.ts/command.ts/src/core/structures/Registry.ts","../src/core/structures/home/runner/work/command.ts/command.ts/src/core/structures/index.ts","../src/core/converter/home/runner/work/command.ts/command.ts/src/core/converter/index.ts","../src/core/extensions/home/runner/work/command.ts/command.ts/src/core/extensions/Extension.ts","../src/core/extensions/home/runner/work/command.ts/command.ts/src/core/extensions/CTSExtension.ts","../src/applicationCommand/home/runner/work/command.ts/command.ts/src/applicationCommand/ApplicationCommandExtension.ts","../src/textCommand/home/runner/work/command.ts/command.ts/src/textCommand/TextCommand.ts","../src/textCommand/home/runner/work/command.ts/command.ts/src/textCommand/parameters.ts","../src/textCommand/home/runner/work/command.ts/command.ts/src/textCommand/TextCommandExtension.ts","../src/core/structures/home/runner/work/command.ts/command.ts/src/core/structures/CommandClient.ts","../src/core/components/home/runner/work/command.ts/command.ts/src/core/components/BaseComponent.ts","../src/core/components/home/runner/work/command.ts/command.ts/src/core/components/index.ts","../src/core/utils/home/runner/work/command.ts/command.ts/src/core/utils/errors.ts","../src/core/utils/home/runner/work/command.ts/command.ts/src/core/utils/checks.ts","../src/core/utils/home/runner/work/command.ts/command.ts/src/core/utils/index.ts","../src/core/extensions/home/runner/work/command.ts/command.ts/src/core/extensions/index.ts","../src/core/home/runner/work/command.ts/command.ts/src/core/index.ts","../src/home/runner/work/command.ts/command.ts/src/index.ts","../src/applicationCommand/home/runner/work/command.ts/command.ts/src/applicationCommand/index.ts","../src/textCommand/home/runner/work/command.ts/command.ts/src/textCommand/index.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL('file:' + __filename).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/*\r\n* File: symbols.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport const ComponentStoreSymbol = Symbol()\r\nexport const ComponentArgStoreSymbol = Symbol()\r\nexport const ModuleHookStoreSymbol = Symbol()\r\nexport const CommandClientSymbol = Symbol()\r\nexport const ComponentHookSymbol = Symbol()\r\n","/*\r\n* File: componentHook.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ComponentHookSymbol } from '../symbols'\n\nexport type ComponentHookFn = (...args: any[]) => void | Promise<void>\n\nexport type ComponentHookStore = Collection<string, ComponentHookFn[]>\n\nexport const getComponentHookStore = (target: object, property: string | symbol): ComponentHookStore => {\n let data = Reflect.getMetadata(ComponentHookSymbol, target, property) as ComponentHookStore\n\n if (!data) {\n data = new Collection()\n Reflect.defineMetadata(ComponentHookSymbol, data, target, property)\n }\n\n return data\n}\n\nexport const createComponentHook = (name: string, fn: ComponentHookFn): MethodDecorator => {\n return (target, key) => {\n const store = getComponentHookStore(target, key)\n\n let hooks = store.get(name)\n\n if (!hooks) {\n hooks = []\n store.set(name, hooks)\n }\n\n hooks.push(fn)\n }\n}\n","/*\r\n* File: decoratorCreator.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ComponentHookStore } from '../hooks'\nimport { getComponentHookStore } from '../hooks/componentHook'\nimport { ComponentStoreSymbol } from '../symbols'\nimport { BaseComponent } from './BaseComponent'\nimport { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\ntype ComponentStore = Collection<string | symbol, BaseComponent>\ntype ComponentArgumentStore = Collection<number, ComponentArgumentDecorator>\n\nexport const getComponentStore = (target: object): ComponentStore => {\n let result: ComponentStore | null = Reflect.getMetadata(ComponentStoreSymbol, target)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ComponentStoreSymbol, result, target)\n }\n\n return result\n}\n\nexport const getComponent = (target: object, key: string | symbol) => {\n const store = getComponentStore(target)\n\n return store.get(key)\n}\n\nexport const createComponentDecorator = <Options, OptionArgs>(type: typeof BaseComponent<Options, OptionArgs>) => {\n return (options: OptionArgs): MethodDecorator => {\n return (target, key) => {\n var component: BaseComponent<Options, OptionArgs> = new type(options, Reflect.get(target, key), Reflect.getMetadata('design:paramtypes', target, key))\n\n const componentHookStore: ComponentHookStore = getComponentHookStore(target, key)\n\n component.hooks = componentHookStore\n\n const store = getComponentStore(target)\n\n const decorators = getComponentArgumentStore(target, key)\n\n decorators.forEach((x, i) => {\n component.argTypes.get(i)?.decorators.push(x)\n })\n\n store.set(key, component)\n }\n }\n}\n\nexport const getComponentArgumentStore = (target: object, key: string | symbol): ComponentArgumentStore => {\n let result: ComponentArgumentStore | null = Reflect.getMetadata(ComponentStoreSymbol, target, key)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ComponentStoreSymbol, result, target, key)\n }\n\n return result\n}\n\nexport const createArgumentDecorator = <Options>(type: typeof ComponentArgumentDecorator<Options>) => {\n return (options: Options): ParameterDecorator => {\n return (target, key, idx) => {\n var arg: ComponentArgumentDecorator<Options> = new type(options)\n\n const store = getComponentArgumentStore(target, key)\n\n store.set(idx, arg)\n }\n }\n}\n","/*\r\n* File: ComponentArgument.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport class ComponentArgument {\n decorators: ComponentArgumentDecorator[] = []\n\n constructor(public type: unknown) {}\n}\n","/*\r\n* File: ComponentArgumentDecorator.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport _ from 'lodash'\n\nexport class ComponentArgumentDecorator<Options = unknown> {\n options: Options\n\n constructor(options: Partial<Options>) {\n if (typeof options === 'object') {\n this.options = _.merge(this.defaultOptions(), options)\n } else {\n this.options = options\n }\n }\n\n defaultOptions(): Options {\n return {} as unknown as Options\n }\n}\n","/*\r\n* File: ApplicationCommand.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport type { ApplicationCommandType, ChatInputApplicationCommandData, MessageApplicationCommandData, UserApplicationCommandData } from 'discord.js'\nimport { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\n\nexport class ApplicationCommandComponent extends BaseComponent<\n (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & { type: ApplicationCommandType }\n> {}\n\nexport const applicationCommand = createComponentDecorator(ApplicationCommandComponent)\n","/*\r\n* File: ApplicationCommandOption.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { APIApplicationCommandOption } from 'discord.js'\nimport { createArgumentDecorator, ComponentArgumentDecorator } from '../core'\n\ntype Options = APIApplicationCommandOption\n\nexport class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}\n\nexport const option = createArgumentDecorator(ApplicationCommandOption)\n","/*\r\n* File: moduleHook.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport { ModuleHookStoreSymbol } from '../symbols'\n\ntype ModuleHookStore = Collection<string, Function[]>\n\nexport const getModuleHookStore = (target: object) => {\n let result: ModuleHookStore | null = Reflect.getMetadata(ModuleHookStoreSymbol, target)\n\n if (!result) {\n result = new Collection()\n\n Reflect.defineMetadata(ModuleHookStoreSymbol, result, target)\n }\n\n return result\n}\n\nexport const moduleHook = (name: string): MethodDecorator => {\n return (target, key) => {\n const store = getModuleHookStore(target)\n\n let v = store.get(name)\n\n if (!v) {\n v = []\n store.set(name, v)\n }\n\n v.push(Reflect.get(target, key))\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './moduleHook'\r\nexport { createComponentHook } from './componentHook'\r\nexport type { ComponentHookStore } from './componentHook'\r\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\nexport class ListenerComponent extends BaseComponent<{ emitter: string; event: string }, { emitter?: string; event: string }> {\n defaultOptions() {\n return { emitter: 'discord' }\n }\n\n constructor(options: ListenerComponent['options'], method: Function, argTypes: unknown[]) {\n super(\n {\n event: options.event,\n emitter: options.emitter ?? 'discord',\n },\n method,\n argTypes,\n )\n }\n}\n\nexport const listener = createComponentDecorator(ListenerComponent)\n","/*\r\n* File: Registry.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport EventEmitter from 'events'\nimport _ from 'lodash'\nimport { Logger } from 'tslog'\nimport { getComponentStore } from '../components'\nimport type { BaseComponent } from '../components'\nimport { getModuleHookStore } from '../hooks'\nimport { ListenerComponent } from '../listener'\nimport { CommandClientSymbol } from '../symbols'\nimport { CommandClient } from './CommandClient'\n\nexport class Registry {\n extensions: object[] = []\n\n emitters: Collection<string, EventEmitter> = new Collection()\n\n logger: Logger\n\n constructor(logger: Logger, public client: CommandClient) {\n this.logger = logger.getChildLogger({\n prefix: [chalk.green('[Registry]')],\n })\n }\n\n getComponentsWithTypeGlobal<T extends typeof BaseComponent<Config>, Config>(type: T): InstanceType<T>[] {\n const result: InstanceType<T>[] = []\n\n for (const ext of this.extensions) {\n result.push(...this.getComponentsWithType(ext, type))\n }\n\n return result\n }\n\n getComponentsWithType<T extends typeof BaseComponent<Config>, Config>(ext: object, type: T): InstanceType<T>[] {\n const componentStore = getComponentStore(ext)\n\n return Array.from(componentStore.filter((x) => (x.constructor as unknown) === type).values() as Iterable<InstanceType<T>>)\n }\n\n registerEventListeners(ext: object) {\n const listeners = this.getComponentsWithType(ext, ListenerComponent)\n\n for (const listener of listeners) {\n const emitter = this.emitters.get(listener.options.emitter)\n\n if (emitter) {\n const bound = listener.method.bind(ext)\n\n Reflect.defineMetadata('bound', bound, listener)\n\n emitter.addListener(listener.options.event, bound)\n }\n }\n }\n\n unregisterEventListeners(ext: object) {\n const listeners = this.getComponentsWithType(ext, ListenerComponent)\n\n for (const listener of listeners) {\n const emitter = this.emitters.get(listener.options.emitter)\n const bound = Reflect.getMetadata('bound', listener)\n\n if (emitter && bound) {\n emitter.removeListener(listener.options.event, bound)\n }\n }\n }\n\n async registerModule(ext: object) {\n Reflect.defineMetadata(CommandClientSymbol, this.client, ext)\n\n this.registerEventListeners(ext)\n await this.runModuleHook(ext, 'load')\n this.extensions.push(ext)\n this.logger.info(`Module registered: ${chalk.green(ext.constructor.name)}`)\n }\n\n async unregisterModule(ext: object) {\n this.unregisterEventListeners(ext)\n await this.runModuleHook(ext, 'unload')\n _.remove(this.extensions, (x) => x === ext)\n this.logger.info(`Module unregistered: ${chalk.green(ext.constructor.name)}`)\n }\n\n runModuleHook(ext: object, hookName: string, ...args: unknown[]) {\n const hooks = getModuleHookStore(ext)\n\n const functions = hooks.get(hookName)\n\n if (functions) {\n for (const fn of functions) {\n fn.call(ext, ...args)\n }\n }\n }\n\n registerEventEmitter(name: string, emitter: EventEmitter) {\n this.emitters.set(name, emitter)\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './Registry'\nexport * from './CommandClient'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseComponent } from '../components/BaseComponent'\nimport { createComponentDecorator } from '../components/decoratorCreator'\n\ntype Options = { component: typeof BaseComponent<unknown>; type: Function; parameterless: boolean }\n\nexport class ConverterComponent extends BaseComponent<Options, Omit<Options, 'parameterless'> & { parameterless?: boolean }> {}\n\nexport const argConverter = createComponentDecorator(ConverterComponent)\n","/*\r\n* File: Extension.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport { Logger } from 'tslog'\nimport { BaseComponent } from '../components'\nimport { ComponentArgument } from '../components/ComponentArgument'\nimport { ConverterComponent } from '../converter'\nimport { CommandClient } from '../structures'\n\nexport class Extension {\n protected get commandClient() {\n return CommandClient.getFromModule(this)\n }\n\n protected get client() {\n return this.commandClient.discord\n }\n\n protected _logger?: Logger\n\n protected get logger() {\n if (!this._logger) this._logger = this.commandClient.logger.getChildLogger({ prefix: [chalk.green(`[${this.constructor.name}]`)], displayFunctionName: false })\n return this._logger\n }\n\n protected async convertArguments(\n component: typeof BaseComponent<unknown>,\n argList: unknown[],\n args: Collection<number, ComponentArgument>,\n getConverterArgs: (arg: ComponentArgument, index: number, converter: ConverterComponent) => unknown[] | Promise<unknown[]>,\n ) {\n const items = new Collection<unknown, { ext: object; component: ConverterComponent }>()\n\n for (const extension of this.commandClient.registry.extensions) {\n for (const converter of this.commandClient.registry.getComponentsWithType(extension, ConverterComponent)) {\n if (converter.options.component != component) continue\n\n items.set(converter.options.type, { component: converter, ext: extension })\n }\n }\n\n for (const [index, arg] of args) {\n const converter = items.get(arg.type)\n\n if (!converter) {\n argList[index] = undefined\n continue\n }\n\n const converterArgs = await getConverterArgs(arg, index, converter.component)\n\n argList[index] = await converter.component.execute(converter.ext, converterArgs)\n }\n }\n}\n","/*\r\n* File: CTSExtension.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Extension } from './Extension'\n\nexport class CTSExtension extends Extension {\n protected get logger() {\n if (!this._logger) this._logger = this.commandClient.ctsLogger.getChildLogger({ prefix: [chalk.green(`[${this.constructor.name}]`)], displayFunctionName: false })\n return this._logger\n }\n}\n","/*\r\n* File: ApplicationCommandExtension.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport {\n ApplicationCommandData,\n ApplicationCommandType,\n ChatInputCommandInteraction,\n Interaction,\n InteractionType,\n MessageContextMenuCommandInteraction,\n Snowflake,\n UserContextMenuCommandInteraction,\n} from 'discord.js'\nimport { ApplicationCommandComponent } from './ApplicationCommand'\nimport { ApplicationCommandOption } from './ApplicationCommandOption'\nimport { moduleHook } from '../core/hooks'\nimport { listener } from '../core/listener'\nimport { CommandClient } from '../core/structures'\nimport { argConverter } from '../core/converter'\nimport { CTSExtension } from '../core/extensions/CTSExtension'\n\nexport type ApplicationCommandExtensionConfig = {\n guilds?: Snowflake[]\n}\n\nexport class ApplicationCommandExtension extends CTSExtension {\n constructor(public config: ApplicationCommandExtensionConfig) {\n super()\n }\n\n @listener({ event: 'interactionCreate' })\n async interactionCreate(i: Interaction) {\n if (i.type !== InteractionType.ApplicationCommand) return\n\n let cmd: ApplicationCommandComponent | null = null\n let ext: object | null = null\n\n const extensions = this.commandClient.registry.extensions\n\n for (const extension of extensions) {\n const components = this.commandClient.registry.getComponentsWithType(extension, ApplicationCommandComponent)\n\n for (const command of components) {\n if (command.options.name === i.commandName) {\n ext = extension\n cmd = command\n }\n }\n }\n\n if (cmd && ext) {\n const argList: unknown[] = []\n\n await this.convertArguments(ApplicationCommandComponent, argList, cmd.argTypes, () => [i])\n\n for (const [idx, arg] of cmd.argTypes) {\n let value: unknown = null\n\n for (const decorator of arg.decorators) {\n if (decorator instanceof ApplicationCommandOption) {\n value = i.options.get(decorator.options.name, false)?.value\n break\n }\n }\n\n if (value) {\n argList[idx] = value\n }\n }\n\n try {\n await cmd.execute(ext, argList, [i])\n } catch (e) {\n this.logger.error(e)\n this.commandClient.emit('applicationCommandInvokeError', e, i)\n }\n }\n }\n\n @moduleHook('load')\n async load() {}\n\n async sync() {\n const client = CommandClient.getFromModule(this)\n\n this.logger.info('Trying to sync commands...')\n\n const commands: ApplicationCommandData[] = []\n\n for (const command of client.registry.getComponentsWithTypeGlobal(ApplicationCommandComponent)) {\n const cmd: ApplicationCommandData = { ...command.options }\n\n if (cmd.type === ApplicationCommandType.ChatInput) {\n cmd.options = []\n\n for (const [, arg] of command.argTypes) {\n const option = arg.decorators.find((x) => x.constructor === ApplicationCommandOption) as ApplicationCommandOption\n\n if (option) {\n cmd.options.push(option.options)\n }\n }\n }\n\n commands.push(cmd)\n }\n\n this.logger.info(`Processing ${chalk.green(commands.length)} commands(${commands.map((x) => chalk.blue(x.name)).join(', ')})`)\n\n if (this.config.guilds) {\n for (const guild of this.config.guilds) {\n try {\n const g = await this.client.guilds.fetch(guild)\n await g.fetch()\n this.logger.info(`Registering commands for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`)\n\n await g.commands.set(commands)\n\n this.logger.info(`Successfully registered commands for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`)\n } catch (e) {\n this.logger.error(`Failed to register commands to guild ${chalk.green(guild)}: ${(e as Error).message}`)\n }\n }\n } else {\n try {\n this.logger.info(`Registering commands globally...`)\n\n await this.client.application!.commands.set(commands)\n\n this.logger.info('Successfully registered commands.')\n } catch (e) {\n this.logger.error(`Failed to register commands to global: ${(e as Error).message}`)\n }\n }\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: ChatInputCommandInteraction,\n })\n async chatInteraction(i: ChatInputCommandInteraction) {\n return i\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: MessageContextMenuCommandInteraction,\n })\n async messageInteraction(i: MessageContextMenuCommandInteraction) {\n return i\n }\n\n @argConverter({\n component: ApplicationCommandComponent,\n parameterless: true,\n type: UserContextMenuCommandInteraction,\n })\n async userInteraction(i: UserContextMenuCommandInteraction) {\n return i\n }\n}\n","/*\r\n* File: TextCommand.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { createComponentDecorator } from '../core/components/decoratorCreator'\nimport { BaseComponent } from '../core/components/BaseComponent'\n\ntype TextCommandOptions = {\n name: string\n aliases?: string\n description?: string\n}\n\nexport class TextCommandComponent extends BaseComponent<TextCommandOptions> {}\n\nexport const command = createComponentDecorator(TextCommandComponent)\n","/*\r\n * File: parameters.ts\r\n *\r\n * Copyright (c) 2022-2022 pikokr\r\n *\r\n * Licensed under MIT License. Please see more defails in LICENSE file.\r\n */\r\n\r\nimport { ComponentArgumentDecorator } from '../core'\r\nimport { createArgumentDecorator } from '../core'\r\n\r\nexport class TextCommandRestOption extends ComponentArgumentDecorator<void> {}\r\n\r\nexport const rest = createArgumentDecorator(TextCommandRestOption)\r\n","/*\r\n* File: TextCommandExtension.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { listener } from '../core/listener'\nimport { Message } from 'discord.js'\nimport { CTSExtension } from '../core/extensions/CTSExtension'\nimport { TextCommandComponent } from './TextCommand'\nimport { TextCommandRestOption } from './parameters'\nimport { argConverter } from '../core'\n\nexport type TextCommandConfig = {\n prefix: string | string[] | ((msg: Message) => Promise<string | string[]> | string | string[])\n}\n\nexport class TextCommandExtension extends CTSExtension {\n constructor(private config: TextCommandConfig) {\n super()\n }\n\n private async processPrefix(msg: Message): Promise<number | null> {\n const content = msg.content\n let prefix = this.config.prefix\n\n if (typeof prefix === 'function') {\n prefix = await prefix(msg)\n }\n\n if (typeof prefix === 'string') {\n if (content.startsWith(prefix)) return prefix.length\n return null\n }\n\n if (prefix instanceof Array) {\n const p = prefix.find((x) => content.startsWith(x))\n\n if (p) return p.length\n return null\n }\n\n return null\n }\n\n @listener({ event: 'messageCreate', emitter: 'discord' })\n private async messageCreate(msg: Message) {\n const startIndex = await this.processPrefix(msg)\n\n if (!startIndex) return\n\n const content = msg.content.slice(startIndex)\n\n const commands: TextCommandComponent[] = []\n\n const extensions = new Map<TextCommandComponent, object>()\n\n for (const ext of this.commandClient.registry.extensions) {\n for (const cmd of this.commandClient.registry.getComponentsWithType(ext, TextCommandComponent)) {\n commands.push(cmd)\n extensions.set(cmd, ext)\n }\n }\n\n let commandNameLength = 0\n\n const command = commands.find((x) => {\n const names = [x.options.name]\n\n if (x.options.aliases) {\n names.push(...x.options.aliases)\n }\n\n for (const name of names) {\n if (content.startsWith(name)) {\n if (content.length === name.length) {\n commandNameLength = name.length\n return true\n }\n commandNameLength = name.length\n return content.startsWith(name + ' ')\n }\n }\n\n return false\n })\n\n if (!command) return\n\n const ext = extensions.get(command)\n\n if (!ext) return\n\n const args: unknown[] = []\n\n let argStrings = content.slice(commandNameLength + 1).split(/ /g)\n\n await this.convertArguments(TextCommandComponent, args, command.argTypes, async (arg, i, converter) => {\n if (converter.options.parameterless) return [msg]\n\n if (arg.decorators.find((x) => x.constructor === TextCommandRestOption)) {\n const text = argStrings.join(' ')\n argStrings = []\n return [text, msg]\n }\n return [argStrings.shift(), msg]\n })\n\n await command.execute(ext, args, [msg])\n }\n\n @argConverter({ component: TextCommandComponent, type: Message, parameterless: true })\n async mesage(msg: Message) {\n return msg\n }\n\n @argConverter({ component: TextCommandComponent, type: String })\n async str(value: string) {\n return value\n }\n\n @argConverter({ component: TextCommandComponent, type: Number })\n async num(value: string) {\n return Number(value)\n }\n}\n","/*\r\n* File: CommandClient.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport chalk from 'chalk'\nimport { Client, Snowflake, Team, User } from 'discord.js'\nimport EventEmitter from 'events'\nimport { Logger } from 'tslog'\nimport { ApplicationCommandExtension, ApplicationCommandExtensionConfig } from '../../applicationCommand/ApplicationCommandExtension'\nimport { TextCommandConfig } from '../../textCommand'\nimport { TextCommandExtension } from '../../textCommand/TextCommandExtension'\nimport { CommandClientSymbol } from '../symbols'\nimport { Registry } from './Registry'\nexport class CommandClient extends EventEmitter {\n ctsLogger: Logger\n registry: Registry\n\n owners: Set<Snowflake> = new Set()\n\n constructor(public discord: Client, public logger: Logger = new Logger({ dateTimeTimezone: Intl.DateTimeFormat().resolvedOptions().timeZone })) {\n super()\n\n this.ctsLogger = logger.getChildLogger({ prefix: [chalk.blue('[command.ts]')], displayFilePath: 'hidden', displayFunctionName: false })\n\n this.registry = new Registry(this.ctsLogger, this)\n\n this.registry.registerEventEmitter('cts', this)\n this.registry.registerEventEmitter('discord', this.discord)\n }\n\n async fetchOwners() {\n if (!this.discord.application) throw new Error('The client is not logged in.')\n\n this.ctsLogger.info('Fetching owners...')\n\n await this.discord.application.fetch()\n\n const owner = this.discord.application.owner\n\n if (!owner) throw new Error('Cannot find application owner')\n\n const owners: string[] = []\n\n if (owner instanceof User) {\n this.owners.add(owner.id)\n owners.push(owner.tag)\n } else if (owner instanceof Team) {\n for (const [id, member] of owner.members) {\n this.owners.add(id)\n owners.push(member.user.tag)\n }\n }\n\n this.ctsLogger.info(`Fetched ${chalk.green(owners.length)} owners(${owners.map((x) => chalk.blue(x)).join(', ')})`)\n }\n\n async enableApplicationCommandsExtension(config: ApplicationCommandExtensionConfig) {\n await this.registry.registerModule(new ApplicationCommandExtension(config))\n this.ctsLogger.info('Application command extension enabled.')\n }\n\n async enableTextCommandsExtension(config: TextCommandConfig) {\n await this.registry.registerModule(new TextCommandExtension(config))\n this.ctsLogger.info('Text command extension enabled.')\n }\n\n getApplicationCommandsExtension() {\n return this.registry.extensions.find((x) => x.constructor === ApplicationCommandExtension) as ApplicationCommandExtension | undefined\n }\n\n static getFromModule(ext: object): CommandClient {\n return Reflect.getMetadata(CommandClientSymbol, ext)\n }\n}\n","/*\r\n* File: BaseComponent.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { Collection } from 'discord.js'\nimport _ from 'lodash'\nimport type { ComponentHookStore } from '../hooks'\nimport { ComponentArgument } from './ComponentArgument'\n\nexport class BaseComponent<Options = unknown, OptionsArg = Options> {\n options: Options\n\n method: Function\n\n hooks: ComponentHookStore = new Collection()\n\n argTypes: Collection<number, ComponentArgument> = new Collection()\n\n constructor(options: OptionsArg, method: Function, argTypes: unknown[]) {\n this.options = this.convertOptions(options)\n\n this.method = method\n for (let i = 0; i < argTypes.length; i++) {\n const element = argTypes[i]\n this.argTypes.set(i, new ComponentArgument(element))\n }\n }\n\n convertOptions(options: OptionsArg): Options {\n return options as unknown as Options\n }\n\n async executeHook(target: object, name: string, args: unknown[]) {\n const hook = this.hooks.get(name)\n\n if (!hook) return\n\n const { CommandClient } = await import('../structures/CommandClient')\n\n for (const fn of hook) {\n await fn.call(null, CommandClient.getFromModule(target), ...args)\n }\n }\n\n async execute(target: object, args: unknown[], beforeCallArgs: unknown[] = args) {\n await this.executeHook(target, 'beforeCall', beforeCallArgs)\n let result\n try {\n result = await this.method.call(target, ...args)\n } catch (e) {\n await this.executeHook(target, 'invokeError', [e])\n throw e\n }\n await this.executeHook(target, 'afterCall', [result])\n\n return result\n }\n}\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport 'reflect-metadata'\r\nexport * from './decoratorCreator'\r\nexport * from './ComponentArgument'\r\nexport * from './ComponentArgumentDecorator'\r\nexport * from './BaseComponent'\r\n","/*\r\n* File: errors.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport class OwnerOnlyError {}\n","/*\r\n* File: checks.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nimport { BaseInteraction, Interaction, Message } from 'discord.js'\nimport { createComponentHook } from '../hooks'\nimport { ComponentHookFn } from '../hooks/componentHook'\nimport { CommandClient } from '../structures'\nimport { OwnerOnlyError } from './errors'\n\nexport const createCheckDecorator = (fn: ComponentHookFn) => createComponentHook('beforeCall', fn)\n\nexport const ownerOnly = createCheckDecorator(async (client: CommandClient, i: Interaction | Message) => {\n let isOwner = false\n\n if (i instanceof BaseInteraction) {\n isOwner = client.owners.has(i.user.id)\n } else if (i instanceof Message) {\n isOwner = client.owners.has(i.author.id)\n }\n\n if (!isOwner) throw new OwnerOnlyError()\n})\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './checks'\nexport * from './errors'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './Extension'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './components'\nexport * from './hooks'\nexport * from './converter'\nexport * from './utils'\nexport * from './listener'\nexport * from './structures'\nexport * from './extensions'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './core'\r\nexport * from './applicationCommand'\r\nexport * from './textCommand'\r\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './ApplicationCommand'\nexport { option } from './ApplicationCommandOption'\n","/*\r\n* File: index.ts\r\n* \r\n* Copyright (c) 2022-2022 pikokr\r\n* \r\n* Licensed under MIT License. Please see more defails in LICENSE file.\r\n*/\r\n\r\nexport * from './TextCommand'\nexport type { TextCommandConfig } from './TextCommandExtension'\nexport * from './parameters'\n"],"mappings":"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","names":[]}
package/docs/index.yml CHANGED
@@ -2,4 +2,4 @@
2
2
  files:
3
3
  - name: Welcome
4
4
  id: welcome
5
- path: ../../README.md
5
+ path: ../../README.md
package/package.json CHANGED
@@ -1,39 +1,45 @@
1
1
  {
2
2
  "name": "@pikokr/command.ts",
3
3
  "description": "Discord.js command framework for typescript.",
4
- "version": "4.0.5",
4
+ "version": "5.0.0-dev.144e990",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
8
8
  "devDependencies": {
9
- "@discordjs/ts-docgen": "^0.3.4",
10
- "@swc/core": "^1.2.135",
11
- "@types/lodash": "^4.14.172",
12
- "all-contributors-cli": "^6.20.0",
13
- "discord.js": "^13.6.0",
14
- "prettier": "^2.2.1",
15
- "ts-node": "^10.1.0",
16
- "tsup": "^5.11.12",
17
- "typedoc": "^0.22.11"
9
+ "@discordjs/ts-docgen": "0.4.1",
10
+ "@swc/core": "1.2.218",
11
+ "@types/chalk": "2.2.0",
12
+ "@types/lodash": "4.14.182",
13
+ "all-contributors-cli": "6.20.0",
14
+ "discord.js": "14.0.3",
15
+ "dotenv": "16.0.1",
16
+ "prettier": "2.7.1",
17
+ "ts-node": "10.9.1",
18
+ "tsup": "5.11.12",
19
+ "typedoc": "0.22.11",
20
+ "typescript": "4.7.4"
18
21
  },
19
22
  "dependencies": {
20
- "@types/node": "^14.14.37",
21
- "discord-api-types": "^0.23.1",
23
+ "@types/node": "^16.0.0",
24
+ "chalk": "4.1.2",
22
25
  "lodash": "^4.17.21",
23
26
  "reflect-metadata": "^0.1.13",
24
27
  "tslog": "^3.3.1",
25
- "typescript": "^4.2.3",
26
28
  "walk-sync": "^3.0.0"
27
29
  },
28
30
  "repository": {
29
31
  "type": "git",
30
- "url": "https://github.com/pikokr/command.ts-v2"
32
+ "url": "https://github.com/pikokr/command.ts"
31
33
  },
32
34
  "scripts": {
33
35
  "prepack": "yarn build",
34
36
  "build": "tsup-node",
35
37
  "docs:dev": "typedoc",
36
38
  "docs:build": "typedoc",
37
- "docs": "typedoc --json docs/typedoc-out.json src/index.ts && ts-node scripts/docs"
39
+ "docs": "typedoc --json docs/typedoc-out.json --tsconfig tsconfig.prod.json src/index.ts && ts-node scripts/docs",
40
+ "test": "yarn ts-node --swc test"
41
+ },
42
+ "peerDependencies": {
43
+ "discord.js": "^14.0.1"
38
44
  }
39
- }
45
+ }
@@ -1,3 +1,23 @@
1
+ /*
2
+ * This is the default license template.
3
+ *
4
+ * File: publish-version.js
5
+ * Author: pikokr
6
+ * Copyright (c) 2022 pikokr
7
+ *
8
+ * To edit this license information: Press Ctrl+Shift+P and press 'Create new License Template...'.
9
+ */
10
+
11
+ /*
12
+ * This is the default license template.
13
+ *
14
+ * File: publish-version.js
15
+ * Author: pikokr
16
+ * Copyright (c) 2022 pikokr
17
+ *
18
+ * To edit this license information: Press Ctrl+Shift+P and press 'Create new License Template...'.
19
+ */
20
+
1
21
  /*
2
22
  * Copyright (c) 2022 pikokr. Licensed under the MIT license
3
23
  */
package/renovate.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ]
5
+ }
package/scripts/docs.ts CHANGED
@@ -1,7 +1,11 @@
1
- /*
2
- * Copyright (c) 2022 pikokr. Licensed under the MIT license
3
- */
4
-
1
+ /*
2
+ * File: docs.ts
3
+ *
4
+ * Copyright (c) 2022-2022 pikokr
5
+ *
6
+ * Licensed under MIT License. Please see more defails in LICENSE file.
7
+ */
8
+
5
9
  import { runGenerator } from '@discordjs/ts-docgen'
6
10
 
7
11
  runGenerator({
@@ -0,0 +1,17 @@
1
+ /*
2
+ * File: ApplicationCommand.ts
3
+ *
4
+ * Copyright (c) 2022-2022 pikokr
5
+ *
6
+ * Licensed under MIT License. Please see more defails in LICENSE file.
7
+ */
8
+
9
+ import type { ApplicationCommandType, ChatInputApplicationCommandData, MessageApplicationCommandData, UserApplicationCommandData } from 'discord.js'
10
+ import { createComponentDecorator } from '../core/components/decoratorCreator'
11
+ import { BaseComponent } from '../core/components/BaseComponent'
12
+
13
+ export class ApplicationCommandComponent extends BaseComponent<
14
+ (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & { type: ApplicationCommandType }
15
+ > {}
16
+
17
+ export const applicationCommand = createComponentDecorator(ApplicationCommandComponent)