@pikokr/command.ts 5.0.0-dev.6057824 → 5.0.0-dev.7ffabf2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts
CHANGED
|
@@ -66,10 +66,10 @@ declare class CommandClient extends EventEmitter {
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
declare class Registry {
|
|
69
|
+
logger: Logger;
|
|
69
70
|
client: CommandClient;
|
|
70
71
|
extensions: object[];
|
|
71
72
|
emitters: Collection<string, EventEmitter>;
|
|
72
|
-
logger: Logger;
|
|
73
73
|
constructor(logger: Logger, client: CommandClient);
|
|
74
74
|
getComponentsWithTypeGlobal<T extends typeof BaseComponent<Config>, Config>(type: T): InstanceType<T>[];
|
|
75
75
|
getComponentsWithType<T extends typeof BaseComponent<Config>, Config>(ext: object, type: T): InstanceType<T>[];
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var et=Object.create;var d=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames,W=Object.getOwnPropertySymbols,nt=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty,st=Object.prototype.propertyIsEnumerable;var I=(o,t,e)=>t in o?d(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,P=(o,t)=>{for(var e in t||(t={}))k.call(t,e)&&I(o,e,t[e]);if(W)for(var e of W(t))st.call(t,e)&&I(o,e,t[e]);return o};var $=o=>d(o,"__esModule",{value:!0}),s=(o,t)=>d(o,"name",{value:t,configurable:!0});var it=(o,t)=>{for(var e in t)d(o,e,{get:t[e],enumerable:!0})},G=(o,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of rt(t))!k.call(o,r)&&(e||r!=="default")&&d(o,r,{get:()=>t[r],enumerable:!(n=ot(t,r))||n.enumerable});return o},u=(o,t)=>G($(d(o!=null?et(nt(o)):{},"default",!t&&o&&o.__esModule?{get:()=>o.default,enumerable:!0}:{value:o,enumerable:!0})),o),mt=(o=>(t,e)=>o&&o.get(t)||(e=G($({}),t,1),o&&o.set(t,e),e))(typeof WeakMap!="undefined"?new WeakMap:0);var at={};it(at,{ApplicationCommandComponent:()=>h,BaseComponent:()=>a,CommandClient:()=>l,Registry:()=>b,applicationCommand:()=>pt,createArgumentDecorator:()=>F,createComponentDecorator:()=>C,getComponent:()=>ct,getComponentArgumentStore:()=>A,getComponentStore:()=>x,getModuleHookStore:()=>w,moduleHook:()=>H,option:()=>K});var Ct=require("reflect-metadata");var N=require("discord.js");var S=class{constructor(t){this.type=t,this.decorators=[]}};s(S,"ComponentArgument");var a=class{argTypes=new N.Collection;constructor(t,e,n){this.options=this.convertOptions(t),this.method=e;for(let r=0;r<n.length;r++){let i=n[r];this.argTypes.set(r,new S(i))}}convertOptions(t){return t}execute(t,e){return this.method.call(t,...e)}};s(a,"BaseComponent");var O=require("discord.js");var y=Symbol(),gt=Symbol(),L=Symbol(),R=Symbol();var x=s(o=>{let t=Reflect.getMetadata(y,o);return t||(t=new O.Collection,Reflect.defineMetadata(y,t,o)),t},"getComponentStore"),ct=s((o,t)=>x(o).get(t),"getComponent"),C=s(o=>t=>(e,n)=>{var r=new o(t,Reflect.get(e,n),Reflect.getMetadata("design:paramtypes",e,n));let i=x(e);A(e,n).forEach((p,tt)=>{var j;(j=r.argTypes.get(tt))==null||j.decorators.push(p)}),i.set(n,r)},"createComponentDecorator"),A=s((o,t)=>{let e=Reflect.getMetadata(y,o,t);return e||(e=new O.Collection,Reflect.defineMetadata(y,e,o,t)),e},"getComponentArgumentStore"),F=s(o=>t=>(e,n,r)=>{var i=new o(t);A(e,n).set(r,i)},"createArgumentDecorator");var D=u(require("chalk")),Z=require("discord.js"),q=u(require("lodash"));var z=require("discord.js");var w=s(o=>{let t=Reflect.getMetadata(L,o);return t||(t=new z.Collection,Reflect.defineMetadata(L,t,o)),t},"getModuleHookStore"),H=s(o=>(t,e)=>{let n=w(t),r=n.get(e);r||(r=[],n.set(e,r)),r.push(Reflect.get(t,e))},"moduleHook");var g=class extends a{defaultOptions(){return{emitter:"discord"}}constructor(t,e,n){super({event:t.event,emitter:(r=t.emitter)!=null?r:"discord"},e,n);var r}};s(g,"ListenerComponent");var B=C(g);var b=class{constructor(t,e){this.logger=t,this.client=e,this.extensions=[],this.emitters=new Z.Collection}getComponentsWithTypeGlobal(t){let e=[];for(let n of this.extensions)e.push(...this.getComponentsWithType(n,t));return e}getComponentsWithType(t,e){let n=x(t);return Array.from(n.filter(r=>r.constructor===e).values())}registerEventListeners(t){let e=this.getComponentsWithType(t,g);for(let n of e){let r=this.emitters.get(n.options.emitter);if(r){let i=n.method.bind(t);Reflect.defineMetadata("bound",i,n),r.addListener(n.options.event,i)}}}unregisterEventListeners(t){let e=this.getComponentsWithType(t,g);for(let n of e){let r=this.emitters.get(n.options.emitter),i=Reflect.getMetadata("bound",n);r&&i&&r.removeListener(n.options.event,i)}}async registerModule(t){Reflect.defineMetadata(R,this.client,t),this.registerEventListeners(t),await this.runModuleHook(t,"load"),this.extensions.push(t),this.logger.info(`Module registered: ${D.default.green(t.constructor.name)}`)}async unregisterModule(t){this.unregisterEventListeners(t),await this.runModuleHook(t,"unload"),q.default.remove(this.extensions,e=>e===t),this.logger.info(`Module unregistered: ${D.default.green(t.constructor.name)}`)}runModuleHook(t,e,...n){let i=w(t).get(e);if(i)for(let c of i)c.call(t,...n)}registerEventEmitter(t,e){this.emitters.set(t,e)}};s(b,"Registry");var V=u(require("chalk")),X=u(require("events")),Y=require("tslog");var M=require("discord.js");var h=class extends a{};s(h,"ApplicationCommandComponent");var pt=C(h);var J=u(require("lodash")),E=class{constructor(t){typeof t=="object"?this.options=J.default.merge(this.defaultOptions(),t):this.options=t}defaultOptions(){return{}}};s(E,"ComponentArgumentDecorator");var v=class extends E{};s(v,"ApplicationCommandOption");var K=F(v);var Q=u(require("chalk"));var T=class{get commandClient(){return l.getFromModule(this)}get client(){return this.commandClient.discord}get logger(){return this._logger||(this._logger=this.commandClient.logger.getChildLogger({prefix:[Q.default.green(`[${this.constructor.name}]`)],displayFunctionName:!1})),this._logger}};s(T,"Extension");var U=function(o,t,e,n){var r=arguments.length,i=r<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,e):n,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(o,t,e,n);else for(var p=o.length-1;p>=0;p--)(c=o[p])&&(i=(r<3?c(i):r>3?c(t,e,i):c(t,e))||i);return r>3&&i&&Object.defineProperty(t,e,i),i},_=function(o,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(o,t)},f=class extends T{constructor(t){super();this.config=t}async interactionCreate(t){console.log(t)}async load(){}async sync(){let t=l.getFromModule(this);this.logger.info("Trying to sync commands...");let e=[];for(let n of t.registry.getComponentsWithTypeGlobal(h)){let r=P({},n.options);if(r.type===M.ApplicationCommandType.ChatInput){r.options=[];for(let[,i]of n.argTypes){let c=i.decorators.find(p=>p.constructor===v);c&&r.options.push(c.options)}}e.push(r)}this.logger.info(e)}};s(f,"ApplicationCommandExtension");U([B({event:"interactionCreate"}),_("design:type",Function),_("design:paramtypes",[typeof M.Interaction=="undefined"?Object:M.Interaction])],f.prototype,"interactionCreate",null);U([H("load"),_("design:type",Function),_("design:paramtypes",[])],f.prototype,"load",null);var l=class extends X.default{constructor(t,e=new Y.Logger({dateTimeTimezone:Intl.DateTimeFormat().resolvedOptions().timeZone})){super();this.discord=t,this.logger=e,this.ctsLogger=e.getChildLogger({prefix:[V.default.blue("[command.ts]")],displayFilePath:"hidden",displayFunctionName:!1}),this.registry=new b(this.ctsLogger,this),this.registry.registerEventEmitter("cts",this),this.registry.registerEventEmitter("discord",this.discord)}async enableApplicationCommandsExtension(t){await this.registry.registerModule(new f(t)),this.ctsLogger.info("Application command extension enabled.")}getApplicationCommandsExtension(){return this.registry.extensions.find(t=>t.constructor===f)}static getFromModule(t){return Reflect.getMetadata(R,t)}};s(l,"CommandClient");module.exports=mt(at);0&&(module.exports={ApplicationCommandComponent,BaseComponent,CommandClient,Registry,applicationCommand,createArgumentDecorator,createComponentDecorator,getComponent,getComponentArgumentStore,getComponentStore,getModuleHookStore,moduleHook,option});
|
|
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/core/components/home/runner/work/command.ts/command.ts/src/core/components/index.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/ComponentArgument.ts","../src/core/components/home/runner/work/command.ts/command.ts/src/core/components/decoratorCreator.ts","../src/core/home/runner/work/command.ts/command.ts/src/core/symbols.ts","../src/core/structures/home/runner/work/command.ts/command.ts/src/core/structures/Registry.ts","../src/core/hooks/home/runner/work/command.ts/command.ts/src/core/hooks/moduleHook.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/CommandClient.ts","../src/core/extensions/home/runner/work/command.ts/command.ts/src/core/extensions/ApplicationCommand.ts","../src/applicationCommand/home/runner/work/command.ts/command.ts/src/applicationCommand/ApplicationCommand.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/ApplicationCommandOption.ts","../src/core/extensions/home/runner/work/command.ts/command.ts/src/core/extensions/Extension.ts"],"sourcesContent":["/*\n * File: index.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nexport * from './core'\nexport * from './applicationCommand'\n","import 'reflect-metadata'\nexport * from './BaseComponent'\nexport * from './decoratorCreator'\n","import { Collection } from 'discord.js'\nimport _ from 'lodash'\nimport { ComponentArgument } from './ComponentArgument'\n\nexport class BaseComponent<Options = unknown, OptionsArg = Options> {\n options: Options\n\n method: Function\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 execute(target: object, args: unknown[]) {\n return this.method.call(target, ...args)\n }\n}\n","import { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport class ComponentArgument {\n decorators: ComponentArgumentDecorator[] = []\n\n constructor(public type: unknown) {}\n}\n","import { Collection } from 'discord.js'\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 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","export const ComponentStoreSymbol = Symbol()\nexport const ComponentArgStoreSymbol = Symbol()\nexport const ModuleHookStoreSymbol = Symbol()\nexport const CommandClientSymbol = Symbol()\n","import chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport EventEmitter from 'events'\nimport _ from 'lodash'\nimport { Logger } from 'tslog'\nimport { BaseComponent, getComponentStore } 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","import { Collection } from 'discord.js'\nimport { ModuleHookStoreSymbol } from '../symbols'\n\ntype ModuleHookStore = Collection<string | symbol, 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(key)\n\n if (!v) {\n v = []\n store.set(key, v)\n }\n\n v.push(Reflect.get(target, key))\n }\n}\n","import { BaseComponent, createComponentDecorator } from '../components'\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","import chalk from 'chalk'\nimport { Client } from 'discord.js'\nimport EventEmitter from 'events'\nimport { Logger } from 'tslog'\nimport { ApplicationCommandExtension, ApplicationCommandExtensionConfig } from '../extensions/ApplicationCommand'\nimport { CommandClientSymbol } from '../symbols'\nimport { Registry } from './Registry'\n\nexport class CommandClient extends EventEmitter {\n ctsLogger: Logger\n registry: Registry\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 enableApplicationCommandsExtension(config: ApplicationCommandExtensionConfig) {\n await this.registry.registerModule(new ApplicationCommandExtension(config))\n this.ctsLogger.info('Application command extension enabled.')\n }\n\n getApplicationCommandsExtension() {\n return this.registry.extensions.find((x) => x.constructor === ApplicationCommandExtension) as ApplicationCommandExtension | undefined\n }\n\n static getFromModule(ext: object): CommandClient {\n return Reflect.getMetadata(CommandClientSymbol, ext)\n }\n}\n","import chalk from 'chalk'\nimport { ApplicationCommandData, ApplicationCommandType, GuildAuditLogs, Interaction, Snowflake } from 'discord.js'\nimport { ApplicationCommandComponent } from '../../applicationCommand'\nimport { ApplicationCommandOption } from '../../applicationCommand/ApplicationCommandOption'\nimport { moduleHook } from '../hooks'\nimport { listener } from '../listener'\nimport { CommandClient } from '../structures'\nimport { Extension } from './Extension'\n\nexport type ApplicationCommandExtensionConfig = {\n guilds?: Snowflake[]\n}\n\nexport class ApplicationCommandExtension extends Extension {\n constructor(public config: ApplicationCommandExtensionConfig) {\n super()\n }\n\n @listener({ event: 'interactionCreate' })\n async interactionCreate(i: Interaction) {\n console.log(i)\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","import { ApplicationCommandType, ChatInputApplicationCommandData, MessageApplicationCommandData, UserApplicationCommandData } from 'discord.js'\nimport { BaseComponent, createComponentDecorator } from '../core'\n\nexport class ApplicationCommandComponent extends BaseComponent<\n (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & { type: ApplicationCommandType }\n> {}\n\nexport const applicationCommand = createComponentDecorator(ApplicationCommandComponent)\n","import _ from 'lodash'\n\nexport class ComponentArgumentDecorator<Options = unknown> {\n options: Options\n\n constructor(options: Partial<Options>) {\n if (typeof options === 'object') {\n this.options = _.merge(this.defaultOptions(), options)\n } else {\n this.options = options\n }\n }\n\n defaultOptions(): Options {\n return {} as unknown as Options\n }\n}\n","import { APIApplicationCommandOption } from 'discord.js'\nimport { createArgumentDecorator } from '../core'\nimport { ComponentArgumentDecorator } from '../core/components/ComponentArgumentDecorator'\n\ntype Options = APIApplicationCommandOption\n\nexport class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}\n\nexport const option = createArgumentDecorator(ApplicationCommandOption)\n","import chalk from 'chalk'\nimport { Logger } from 'tslog'\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 private _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"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/home/runner/work/command.ts/command.ts/src/index.ts","../src/core/components/home/runner/work/command.ts/command.ts/src/core/components/index.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/ComponentArgument.ts","../src/core/components/home/runner/work/command.ts/command.ts/src/core/components/decoratorCreator.ts","../src/core/home/runner/work/command.ts/command.ts/src/core/symbols.ts","../src/core/structures/home/runner/work/command.ts/command.ts/src/core/structures/Registry.ts","../src/core/hooks/home/runner/work/command.ts/command.ts/src/core/hooks/moduleHook.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/CommandClient.ts","../src/core/extensions/home/runner/work/command.ts/command.ts/src/core/extensions/ApplicationCommand.ts","../src/applicationCommand/home/runner/work/command.ts/command.ts/src/applicationCommand/ApplicationCommand.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/ApplicationCommandOption.ts","../src/core/extensions/home/runner/work/command.ts/command.ts/src/core/extensions/Extension.ts"],"sourcesContent":["/*\n * File: index.ts\n *\n * Copyright (c) 2022-2022 pikokr\n *\n * Licensed under MIT License. Please see more defails in LICENSE file.\n */\n\nexport * from './core'\nexport * from './applicationCommand'\n","import 'reflect-metadata'\nexport * from './BaseComponent'\nexport * from './decoratorCreator'\n","import { Collection } from 'discord.js'\nimport _ from 'lodash'\nimport { ComponentArgument } from './ComponentArgument'\n\nexport class BaseComponent<Options = unknown, OptionsArg = Options> {\n options: Options\n\n method: Function\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 execute(target: object, args: unknown[]) {\n return this.method.call(target, ...args)\n }\n}\n","import { ComponentArgumentDecorator } from './ComponentArgumentDecorator'\n\nexport class ComponentArgument {\n decorators: ComponentArgumentDecorator[] = []\n\n constructor(public type: unknown) {}\n}\n","import { Collection } from 'discord.js'\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 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","export const ComponentStoreSymbol = Symbol()\nexport const ComponentArgStoreSymbol = Symbol()\nexport const ModuleHookStoreSymbol = Symbol()\nexport const CommandClientSymbol = Symbol()\n","import chalk from 'chalk'\nimport { Collection } from 'discord.js'\nimport EventEmitter from 'events'\nimport _ from 'lodash'\nimport { Logger } from 'tslog'\nimport { BaseComponent, getComponentStore } 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 constructor(public logger: Logger, public client: CommandClient) {}\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","import { Collection } from 'discord.js'\nimport { ModuleHookStoreSymbol } from '../symbols'\n\ntype ModuleHookStore = Collection<string | symbol, 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(key)\n\n if (!v) {\n v = []\n store.set(key, v)\n }\n\n v.push(Reflect.get(target, key))\n }\n}\n","import { BaseComponent, createComponentDecorator } from '../components'\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","import chalk from 'chalk'\nimport { Client } from 'discord.js'\nimport EventEmitter from 'events'\nimport { Logger } from 'tslog'\nimport { ApplicationCommandExtension, ApplicationCommandExtensionConfig } from '../extensions/ApplicationCommand'\nimport { CommandClientSymbol } from '../symbols'\nimport { Registry } from './Registry'\n\nexport class CommandClient extends EventEmitter {\n ctsLogger: Logger\n registry: Registry\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 enableApplicationCommandsExtension(config: ApplicationCommandExtensionConfig) {\n await this.registry.registerModule(new ApplicationCommandExtension(config))\n this.ctsLogger.info('Application command extension enabled.')\n }\n\n getApplicationCommandsExtension() {\n return this.registry.extensions.find((x) => x.constructor === ApplicationCommandExtension) as ApplicationCommandExtension | undefined\n }\n\n static getFromModule(ext: object): CommandClient {\n return Reflect.getMetadata(CommandClientSymbol, ext)\n }\n}\n","import { ApplicationCommandData, ApplicationCommandType, Interaction, Snowflake } from 'discord.js'\nimport { ApplicationCommandComponent } from '../../applicationCommand'\nimport { ApplicationCommandOption } from '../../applicationCommand/ApplicationCommandOption'\nimport { moduleHook } from '../hooks'\nimport { listener } from '../listener'\nimport { CommandClient } from '../structures'\nimport { Extension } from './Extension'\n\nexport type ApplicationCommandExtensionConfig = {\n guilds?: Snowflake[]\n}\n\nexport class ApplicationCommandExtension extends Extension {\n constructor(public config: ApplicationCommandExtensionConfig) {\n super()\n }\n\n @listener({ event: 'interactionCreate' })\n async interactionCreate(i: Interaction) {\n console.log(i)\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(commands)\n }\n}\n","import { ApplicationCommandType, ChatInputApplicationCommandData, MessageApplicationCommandData, UserApplicationCommandData } from 'discord.js'\nimport { BaseComponent, createComponentDecorator } from '../core'\n\nexport class ApplicationCommandComponent extends BaseComponent<\n (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & { type: ApplicationCommandType }\n> {}\n\nexport const applicationCommand = createComponentDecorator(ApplicationCommandComponent)\n","import _ from 'lodash'\n\nexport class ComponentArgumentDecorator<Options = unknown> {\n options: Options\n\n constructor(options: Partial<Options>) {\n if (typeof options === 'object') {\n this.options = _.merge(this.defaultOptions(), options)\n } else {\n this.options = options\n }\n }\n\n defaultOptions(): Options {\n return {} as unknown as Options\n }\n}\n","import { APIApplicationCommandOption } from 'discord.js'\nimport { createArgumentDecorator } from '../core'\nimport { ComponentArgumentDecorator } from '../core/components/ComponentArgumentDecorator'\n\ntype Options = APIApplicationCommandOption\n\nexport class ApplicationCommandOption extends ComponentArgumentDecorator<Options> {}\n\nexport const option = createArgumentDecorator(ApplicationCommandOption)\n","import chalk from 'chalk'\nimport { Logger } from 'tslog'\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 private _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"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ApplicationCommandData, ApplicationCommandType, GuildAuditLogs, Interaction, Snowflake } from 'discord.js'
|
|
1
|
+
import { ApplicationCommandData, ApplicationCommandType, Interaction, Snowflake } from 'discord.js'
|
|
3
2
|
import { ApplicationCommandComponent } from '../../applicationCommand'
|
|
4
3
|
import { ApplicationCommandOption } from '../../applicationCommand/ApplicationCommandOption'
|
|
5
4
|
import { moduleHook } from '../hooks'
|
|
@@ -49,32 +48,6 @@ export class ApplicationCommandExtension extends Extension {
|
|
|
49
48
|
commands.push(cmd)
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
this.logger.info(
|
|
53
|
-
|
|
54
|
-
if (this.config.guilds) {
|
|
55
|
-
for (const guild of this.config.guilds) {
|
|
56
|
-
try {
|
|
57
|
-
const g = await this.client.guilds.fetch(guild)
|
|
58
|
-
await g.fetch()
|
|
59
|
-
this.logger.info(`Registering commands for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`)
|
|
60
|
-
|
|
61
|
-
await g.commands.set(commands)
|
|
62
|
-
|
|
63
|
-
this.logger.info(`Successfully registered commands for guild ${chalk.green(g.name)}(${chalk.blue(g.id)})`)
|
|
64
|
-
} catch (e) {
|
|
65
|
-
this.logger.error(`Failed to register commands to guild ${chalk.green(guild)}: ${(e as Error).message}`)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
} else {
|
|
69
|
-
try {
|
|
70
|
-
this.logger.info(`Registering commands globally...`)
|
|
71
|
-
|
|
72
|
-
await this.client.application!.commands.set(commands)
|
|
73
|
-
|
|
74
|
-
this.logger.info('Successfully registered commands.')
|
|
75
|
-
} catch (e) {
|
|
76
|
-
this.logger.error(`Failed to register commands to global: ${(e as Error).message}`)
|
|
77
|
-
}
|
|
78
|
-
}
|
|
51
|
+
this.logger.info(commands)
|
|
79
52
|
}
|
|
80
53
|
}
|
|
@@ -14,13 +14,7 @@ export class Registry {
|
|
|
14
14
|
|
|
15
15
|
emitters: Collection<string, EventEmitter> = new Collection()
|
|
16
16
|
|
|
17
|
-
logger: Logger
|
|
18
|
-
|
|
19
|
-
constructor(logger: Logger, public client: CommandClient) {
|
|
20
|
-
this.logger = logger.getChildLogger({
|
|
21
|
-
prefix: [chalk.green('[Registry]')],
|
|
22
|
-
})
|
|
23
|
-
}
|
|
17
|
+
constructor(public logger: Logger, public client: CommandClient) {}
|
|
24
18
|
|
|
25
19
|
getComponentsWithTypeGlobal<T extends typeof BaseComponent<Config>, Config>(type: T): InstanceType<T>[] {
|
|
26
20
|
const result: InstanceType<T>[] = []
|
package/test/index.ts
CHANGED
|
@@ -4,9 +4,8 @@ import { listener } from '../src/core/listener'
|
|
|
4
4
|
import 'dotenv/config'
|
|
5
5
|
import { Logger } from 'tslog'
|
|
6
6
|
import chalk from 'chalk'
|
|
7
|
-
import { Extension } from '../src/core/extensions'
|
|
8
7
|
|
|
9
|
-
class Test
|
|
8
|
+
class Test {
|
|
10
9
|
@applicationCommand({
|
|
11
10
|
type: ApplicationCommandType.ChatInput,
|
|
12
11
|
name: 'test',
|
|
@@ -30,17 +29,17 @@ class Test extends Extension {
|
|
|
30
29
|
|
|
31
30
|
@moduleHook('load')
|
|
32
31
|
load() {
|
|
33
|
-
|
|
32
|
+
console.log('load')
|
|
34
33
|
}
|
|
35
34
|
|
|
36
35
|
@moduleHook('unload')
|
|
37
36
|
unload() {
|
|
38
|
-
|
|
37
|
+
console.log('unload')
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
@listener({ event: '
|
|
40
|
+
@listener({ event: 'test', emitter: 'discord' })
|
|
42
41
|
testEvent() {
|
|
43
|
-
|
|
42
|
+
console.log('test')
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
|
|
@@ -63,6 +62,8 @@ const run = async () => {
|
|
|
63
62
|
|
|
64
63
|
await client.login(process.env.TOKEN)
|
|
65
64
|
|
|
65
|
+
logger.info(`Login: ${chalk.green(client.user!.tag)}`)
|
|
66
|
+
|
|
66
67
|
await cc.getApplicationCommandsExtension()!.sync()
|
|
67
68
|
}
|
|
68
69
|
|