@pikokr/command.ts 5.5.0 → 5.6.0-dev.3
Sign up to get free protection for your applications and to get access to all the features.
- package/.eslintrc.js +19 -0
- package/.github/workflows/docs.yml +22 -6
- package/.github/workflows/lint.yml +41 -0
- package/.github/workflows/release.yml +49 -0
- package/.vscode/settings.json +6 -3
- package/dist/index.d.ts +48 -46
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +20 -3
- package/publish-version.js +1 -23
- package/scripts/docs.ts +8 -8
- package/src/applicationCommand/ApplicationCommand.ts +1 -9
- package/src/applicationCommand/ApplicationCommandExtension.ts +14 -17
- package/src/applicationCommand/ApplicationCommandOption.ts +1 -9
- package/src/applicationCommand/group.ts +2 -1
- package/src/applicationCommand/index.ts +4 -12
- package/src/core/components/BaseComponent.ts +3 -11
- package/src/core/components/ComponentArgument.ts +1 -9
- package/src/core/components/ComponentArgumentDecorator.ts +0 -8
- package/src/core/components/decoratorCreator.ts +4 -12
- package/src/core/components/index.ts +5 -13
- package/src/core/converter/index.ts +8 -15
- package/src/core/extensions/CTSExtension.ts +0 -8
- package/src/core/extensions/Extension.ts +5 -13
- package/src/core/extensions/index.ts +0 -8
- package/src/core/hooks/componentHook.ts +4 -11
- package/src/core/hooks/index.ts +3 -11
- package/src/core/hooks/moduleHook.ts +2 -9
- package/src/core/index.ts +0 -8
- package/src/core/listener/index.ts +0 -8
- package/src/core/structures/CommandClient.ts +7 -12
- package/src/core/structures/Registry.ts +8 -16
- package/src/core/structures/index.ts +0 -8
- package/src/core/symbols.ts +6 -14
- package/src/core/utils/checks.ts +5 -12
- package/src/core/utils/errors.ts +0 -8
- package/src/core/utils/index.ts +3 -11
- package/src/index.ts +3 -11
- package/src/textCommand/TextCommand.ts +0 -8
- package/src/textCommand/TextCommandExtension.ts +11 -32
- package/src/textCommand/index.ts +0 -8
- package/src/textCommand/parameters.ts +6 -14
- package/src/utils/types.ts +1 -0
- package/test/index.ts +5 -4
- package/tsup.config.ts +8 -8
- package/.github/workflows/publish.stable.yml +0 -18
- package/.github/workflows/publish.yml +0 -20
- package/.yarn/releases/yarn-3.2.3.cjs +0 -783
- package/.yarn/sdks/integrations.yml +0 -5
- package/.yarn/sdks/prettier/index.js +0 -20
- package/.yarn/sdks/prettier/package.json +0 -6
- package/.yarn/sdks/typescript/bin/tsc +0 -20
- package/.yarn/sdks/typescript/bin/tsserver +0 -20
- package/.yarn/sdks/typescript/lib/tsc.js +0 -20
- package/.yarn/sdks/typescript/lib/tsserver.js +0 -196
- package/.yarn/sdks/typescript/lib/tsserverlibrary.js +0 -196
- package/.yarn/sdks/typescript/lib/typescript.js +0 -20
- package/.yarn/sdks/typescript/package.json +0 -6
- package/.yarnrc.yml +0 -1
package/.eslintrc.js
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module.exports = {
|
2
|
+
env: {
|
3
|
+
es2021: true,
|
4
|
+
node: true,
|
5
|
+
},
|
6
|
+
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'],
|
7
|
+
overrides: [],
|
8
|
+
parser: '@typescript-eslint/parser',
|
9
|
+
parserOptions: {
|
10
|
+
ecmaVersion: 'latest',
|
11
|
+
sourceType: 'module',
|
12
|
+
},
|
13
|
+
plugins: ['@typescript-eslint', 'prettier'],
|
14
|
+
rules: {
|
15
|
+
'prettier/prettier': 'error',
|
16
|
+
'@typescript-eslint/consistent-type-imports': 'error',
|
17
|
+
'@typescript-eslint/no-unused-vars': 'error',
|
18
|
+
},
|
19
|
+
}
|
@@ -20,17 +20,33 @@ jobs:
|
|
20
20
|
- name: Checkout repository
|
21
21
|
uses: actions/checkout@v3
|
22
22
|
|
23
|
-
- name: Install node.js
|
23
|
+
- name: Install node.js v18
|
24
24
|
uses: actions/setup-node@v3
|
25
25
|
with:
|
26
|
-
node-version:
|
27
|
-
|
28
|
-
|
26
|
+
node-version: 18
|
27
|
+
|
28
|
+
- name: Enable corepack
|
29
|
+
run: corepack enable
|
30
|
+
|
31
|
+
- name: Get pnpm store directory
|
32
|
+
id: pnpm-cache
|
33
|
+
shell: bash
|
34
|
+
run: |
|
35
|
+
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
36
|
+
|
37
|
+
- uses: actions/cache@v3
|
38
|
+
name: Setup pnpm cache
|
39
|
+
with:
|
40
|
+
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
|
41
|
+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
42
|
+
restore-keys: |
|
43
|
+
${{ runner.os }}-pnpm-store-
|
44
|
+
|
29
45
|
- name: Install dependencies
|
30
|
-
run:
|
46
|
+
run: pnpm i --frozen-lockfile
|
31
47
|
|
32
48
|
- name: Build docs
|
33
|
-
run:
|
49
|
+
run: pnpm run docs
|
34
50
|
|
35
51
|
- name: Upload artifacts
|
36
52
|
uses: actions/upload-artifact@v3
|
@@ -0,0 +1,41 @@
|
|
1
|
+
name: Lint
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- 'dev'
|
7
|
+
pull_request:
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
eslint:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
steps:
|
14
|
+
- name: Checkout
|
15
|
+
uses: actions/checkout@v3
|
16
|
+
- name: Setup node
|
17
|
+
uses: actions/setup-node@v3
|
18
|
+
with:
|
19
|
+
node-version: 18
|
20
|
+
- name: Enable corepack
|
21
|
+
run: corepack enable
|
22
|
+
|
23
|
+
- name: Get pnpm store directory
|
24
|
+
id: pnpm-cache
|
25
|
+
shell: bash
|
26
|
+
run: |
|
27
|
+
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
28
|
+
|
29
|
+
- uses: actions/cache@v3
|
30
|
+
name: Setup pnpm cache
|
31
|
+
with:
|
32
|
+
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
|
33
|
+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
34
|
+
restore-keys: |
|
35
|
+
${{ runner.os }}-pnpm-store-
|
36
|
+
|
37
|
+
- name: Install dependencies
|
38
|
+
run: pnpm i --frozen-lockfile
|
39
|
+
|
40
|
+
- name: Lint
|
41
|
+
run: pnpm run lint --max-warnings=0
|
@@ -0,0 +1,49 @@
|
|
1
|
+
name: Release
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- 'dev'
|
7
|
+
- 'stable'
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
release:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
steps:
|
14
|
+
- name: Checkout
|
15
|
+
uses: actions/checkout@v3
|
16
|
+
- name: Setup node
|
17
|
+
uses: actions/setup-node@v3
|
18
|
+
with:
|
19
|
+
node-version: 18
|
20
|
+
- name: Enable corepack
|
21
|
+
run: corepack enable
|
22
|
+
|
23
|
+
- name: Remove packageManager entry
|
24
|
+
run: |
|
25
|
+
sudo apt install -y jq
|
26
|
+
cat package.json | jq "del(.packageManager)" | tee package.json
|
27
|
+
|
28
|
+
- name: Get pnpm store directory
|
29
|
+
id: pnpm-cache
|
30
|
+
shell: bash
|
31
|
+
run: |
|
32
|
+
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
33
|
+
|
34
|
+
- uses: actions/cache@v3
|
35
|
+
name: Setup pnpm cache
|
36
|
+
with:
|
37
|
+
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
|
38
|
+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
39
|
+
restore-keys: |
|
40
|
+
${{ runner.os }}-pnpm-store-
|
41
|
+
|
42
|
+
- name: Install dependencies
|
43
|
+
run: pnpm i --frozen-lockfile
|
44
|
+
|
45
|
+
- name: Semantic release
|
46
|
+
run: pnpm run semantic-release
|
47
|
+
env:
|
48
|
+
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
49
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/.vscode/settings.json
CHANGED
@@ -11,7 +11,10 @@
|
|
11
11
|
"**/.yarn": true,
|
12
12
|
"**/.pnp.*": true
|
13
13
|
},
|
14
|
-
"prettier.prettierPath": "
|
15
|
-
"typescript.tsdk": "
|
16
|
-
"typescript.enablePromptUseWorkspaceTsdk": true
|
14
|
+
"prettier.prettierPath": "node_modules/prettier/index.js",
|
15
|
+
"typescript.tsdk": "node_modules/typescript/lib",
|
16
|
+
"typescript.enablePromptUseWorkspaceTsdk": true,
|
17
|
+
"editor.codeActionsOnSave": {
|
18
|
+
"source.fixAll": true
|
19
|
+
}
|
17
20
|
}
|
package/dist/index.d.ts
CHANGED
@@ -4,14 +4,16 @@ import EventEmitter from 'events';
|
|
4
4
|
import * as tslog from 'tslog';
|
5
5
|
import { Logger, ISettingsParam } from 'tslog';
|
6
6
|
|
7
|
-
|
7
|
+
type AnyFunction = (...args: unknown[]) => unknown;
|
8
|
+
|
9
|
+
type ComponentHookFn<T extends unknown[]> = (...args: T) => void | Promise<void>;
|
10
|
+
type ComponentHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
|
11
|
+
declare const createComponentHook: <T extends unknown[]>(name: string, fn: ComponentHookFn<T>) => MethodDecorator;
|
12
|
+
|
13
|
+
type ModuleHookStore = Collection<string, ComponentHookFn<unknown[]>[]>;
|
8
14
|
declare const getModuleHookStore: (target: object) => ModuleHookStore;
|
9
15
|
declare const moduleHook: (name: string) => MethodDecorator;
|
10
16
|
|
11
|
-
declare type ComponentHookFn = (...args: any[]) => void | Promise<void>;
|
12
|
-
declare type ComponentHookStore = Collection<string, ComponentHookFn[]>;
|
13
|
-
declare const createComponentHook: (name: string, fn: ComponentHookFn) => MethodDecorator;
|
14
|
-
|
15
17
|
declare class ComponentArgumentDecorator<Options = unknown> {
|
16
18
|
options: Options;
|
17
19
|
constructor(options: Partial<Options>);
|
@@ -25,17 +27,17 @@ declare class ComponentArgument {
|
|
25
27
|
}
|
26
28
|
|
27
29
|
declare class BaseComponent {
|
28
|
-
method:
|
30
|
+
method: AnyFunction;
|
29
31
|
hooks: ComponentHookStore;
|
30
32
|
argTypes: Collection<number, ComponentArgument>;
|
31
|
-
_init(method:
|
33
|
+
_init(method: AnyFunction, argTypes: unknown[]): void;
|
32
34
|
executeGlobalHook(target: object, name: string, args: unknown[]): Promise<void>;
|
33
35
|
executeHook(target: object, name: string, args: unknown[]): Promise<void>;
|
34
|
-
execute(target: object, args: unknown[], beforeCallArgs?: unknown[]): Promise<
|
36
|
+
execute(target: object, args: unknown[], beforeCallArgs?: unknown[]): Promise<unknown>;
|
35
37
|
}
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
+
type ComponentStore = Collection<string | symbol, BaseComponent>;
|
40
|
+
type ComponentArgumentStore = Collection<number, ComponentArgumentDecorator>;
|
39
41
|
declare const getComponentStore: (target: object) => ComponentStore;
|
40
42
|
declare const getComponent: (target: object, key: string | symbol) => BaseComponent | undefined;
|
41
43
|
declare const createComponentDecorator: (component: BaseComponent) => MethodDecorator;
|
@@ -44,55 +46,33 @@ declare const createArgumentDecorator: <Options>(type: {
|
|
44
46
|
new (options: Partial<Options>): ComponentArgumentDecorator<Options>;
|
45
47
|
}) => (options: Options) => ParameterDecorator;
|
46
48
|
|
47
|
-
|
49
|
+
type Options$2<T> = {
|
48
50
|
component: unknown;
|
49
|
-
type:
|
51
|
+
type: T;
|
50
52
|
parameterless: boolean;
|
51
53
|
};
|
52
|
-
|
54
|
+
type OptionsArg$1<T> = Omit<Options$2<T>, 'parameterless'> & {
|
53
55
|
parameterless?: boolean;
|
54
56
|
};
|
55
|
-
declare class ConverterComponent extends BaseComponent {
|
56
|
-
options: Options$2
|
57
|
-
constructor(options: OptionsArg$1);
|
57
|
+
declare class ConverterComponent<T> extends BaseComponent {
|
58
|
+
options: Options$2<T>;
|
59
|
+
constructor(options: OptionsArg$1<T>);
|
58
60
|
}
|
59
|
-
declare const argConverter: (options: OptionsArg$1) => MethodDecorator;
|
60
|
-
|
61
|
-
declare const createCheckDecorator: (fn: ComponentHookFn) => MethodDecorator;
|
62
|
-
declare const ownerOnly: MethodDecorator;
|
63
|
-
|
64
|
-
declare class OwnerOnlyError {
|
65
|
-
}
|
66
|
-
|
67
|
-
declare const mergeMethodDecorators: (decorators: MethodDecorator[]) => MethodDecorator;
|
68
|
-
|
69
|
-
declare type Options$1 = {
|
70
|
-
emitter: string;
|
71
|
-
event: string;
|
72
|
-
};
|
73
|
-
declare type OptionsArg = {
|
74
|
-
emitter?: string;
|
75
|
-
event: string;
|
76
|
-
};
|
77
|
-
declare class ListenerComponent extends BaseComponent {
|
78
|
-
options: Options$1;
|
79
|
-
constructor(options: OptionsArg);
|
80
|
-
}
|
81
|
-
declare const listener: (options: OptionsArg) => MethodDecorator;
|
61
|
+
declare const argConverter: <T>(options: OptionsArg$1<T>) => MethodDecorator;
|
82
62
|
|
83
63
|
declare class Extension {
|
84
64
|
protected get commandClient(): CommandClient;
|
85
65
|
protected get client(): discord_js.Client<boolean>;
|
86
66
|
protected _logger?: Logger<unknown>;
|
87
67
|
protected get logger(): Logger<unknown>;
|
88
|
-
protected convertArguments(component: unknown, argList: unknown[], args: Collection<number, ComponentArgument>, getConverterArgs: (arg: ComponentArgument, index: number, converter: ConverterComponent) => unknown[] | Promise<unknown[]>): Promise<void>;
|
68
|
+
protected convertArguments(component: unknown, argList: unknown[], args: Collection<number, ComponentArgument>, getConverterArgs: (arg: ComponentArgument, index: number, converter: ConverterComponent<unknown>) => unknown[] | Promise<unknown[]>): Promise<void>;
|
89
69
|
}
|
90
70
|
|
91
71
|
declare class CTSExtension extends Extension {
|
92
72
|
protected get logger(): tslog.Logger<unknown>;
|
93
73
|
}
|
94
74
|
|
95
|
-
|
75
|
+
type ApplicationCommandExtensionConfig = {
|
96
76
|
guilds?: Snowflake[];
|
97
77
|
};
|
98
78
|
declare class ApplicationCommandExtension extends CTSExtension {
|
@@ -112,7 +92,7 @@ declare class ApplicationCommandExtension extends CTSExtension {
|
|
112
92
|
commandInteraction(i: UserContextMenuCommandInteraction): Promise<UserContextMenuCommandInteraction<discord_js.CacheType>>;
|
113
93
|
}
|
114
94
|
|
115
|
-
|
95
|
+
type TextCommandOptions = {
|
116
96
|
name: string;
|
117
97
|
aliases?: string[];
|
118
98
|
description?: string;
|
@@ -123,7 +103,7 @@ declare class TextCommandComponent extends BaseComponent {
|
|
123
103
|
}
|
124
104
|
declare const command: (options: TextCommandOptions) => MethodDecorator;
|
125
105
|
|
126
|
-
|
106
|
+
type TextCommandConfig = {
|
127
107
|
prefix: string | string[] | ((msg: Message) => Promise<string | string[]> | string | string[]);
|
128
108
|
};
|
129
109
|
declare module 'discord.js' {
|
@@ -156,9 +136,9 @@ declare class Registry {
|
|
156
136
|
extensions: object[];
|
157
137
|
emitters: Collection<string, EventEmitter>;
|
158
138
|
logger: Logger<unknown>;
|
159
|
-
globalHooks: Record<string, ComponentHookFn[]>;
|
139
|
+
globalHooks: Record<string, ComponentHookFn<unknown[]>[]>;
|
160
140
|
constructor(logger: Logger<unknown>, client: CommandClient);
|
161
|
-
addGlobalHook(name: string, fn: ComponentHookFn): void;
|
141
|
+
addGlobalHook(name: string, fn: ComponentHookFn<unknown[]>): void;
|
162
142
|
getComponentsWithTypeGlobal<T>(type: unknown): T[];
|
163
143
|
getComponentsWithType<T>(ext: object, type: unknown): T[];
|
164
144
|
registerEventListeners(ext: object): void;
|
@@ -178,6 +158,28 @@ declare class Registry {
|
|
178
158
|
registerEventEmitter(name: string, emitter: EventEmitter): void;
|
179
159
|
}
|
180
160
|
|
161
|
+
declare const createCheckDecorator: (fn: ComponentHookFn<[CommandClient, Interaction | Message]>) => MethodDecorator;
|
162
|
+
declare const ownerOnly: MethodDecorator;
|
163
|
+
|
164
|
+
declare class OwnerOnlyError {
|
165
|
+
}
|
166
|
+
|
167
|
+
declare const mergeMethodDecorators: (decorators: MethodDecorator[]) => MethodDecorator;
|
168
|
+
|
169
|
+
type Options$1 = {
|
170
|
+
emitter: string;
|
171
|
+
event: string;
|
172
|
+
};
|
173
|
+
type OptionsArg = {
|
174
|
+
emitter?: string;
|
175
|
+
event: string;
|
176
|
+
};
|
177
|
+
declare class ListenerComponent extends BaseComponent {
|
178
|
+
options: Options$1;
|
179
|
+
constructor(options: OptionsArg);
|
180
|
+
}
|
181
|
+
declare const listener: (options: OptionsArg) => MethodDecorator;
|
182
|
+
|
181
183
|
declare class SubCommandGroup {
|
182
184
|
options: Omit<APIApplicationCommandSubcommandOption, 'type'>;
|
183
185
|
guilds?: string[] | undefined;
|
@@ -192,7 +194,7 @@ declare class SubCommandGroupChild {
|
|
192
194
|
command(options: Omit<ChatInputApplicationCommandData, 'options' | 'type'>): MethodDecorator;
|
193
195
|
}
|
194
196
|
|
195
|
-
|
197
|
+
type Options = (UserApplicationCommandData | MessageApplicationCommandData | Omit<ChatInputApplicationCommandData, 'options'>) & {
|
196
198
|
type: ApplicationCommandType;
|
197
199
|
guilds?: Snowflake[];
|
198
200
|
};
|
package/dist/index.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
"use strict";var ne=Object.create;var B=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ie=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var c=(r,t)=>B(r,"name",{value:t,configurable:!0});var f=(r,t)=>()=>(r&&(t=r(r=0)),t);var At=(r,t)=>{for(var e in t)B(r,e,{get:t[e],enumerable:!0})},Lt=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of se(t))!ae.call(r,s)&&s!==e&&B(r,s,{get:()=>t[s],enumerable:!(o=re(t,s))||o.enumerable});return r};var C=(r,t,e)=>(e=r!=null?ne(ie(r)):{},Lt(t||!r||!r.__esModule?B(e,"default",{value:r,enumerable:!0}):e,r)),ce=r=>Lt(B({},"__esModule",{value:!0}),r);var z,xe,ft,Y,ut,tt,F=f(()=>{"use strict";z=Symbol(),xe=Symbol(),ft=Symbol(),Y=Symbol(),ut=Symbol(),tt=Symbol()});var Et,dt,et,gt=f(()=>{"use strict";Et=require("discord.js");F();dt=c((r,t)=>{let e=Reflect.getMetadata(ut,r,t);return e||(e=new Et.Collection,Reflect.defineMetadata(ut,e,r,t)),e},"getComponentHookStore"),et=c((r,t)=>(e,o)=>{let s=dt(e,o),n=s.get(r);n||(n=[],s.set(r,n)),n.unshift(t)},"createComponentHook")});var ht,Z,me,y,yt,J,$=f(()=>{"use strict";ht=require("discord.js");gt();F();Z=c(r=>{let t=Reflect.getMetadata(z,r);return t||(t=new ht.Collection,Reflect.defineMetadata(z,t,r)),t},"getComponentStore"),me=c((r,t)=>Z(r).get(t),"getComponent"),y=c(r=>(t,e)=>{r._init(Reflect.get(t,e),Reflect.getMetadata("design:paramtypes",t,e));let o=dt(t,e);r.hooks=o;let s=Z(t);yt(t,e).forEach((a,i)=>{var m;(m=r.argTypes.get(i))==null||m.decorators.push(a)}),s.set(e,r)},"createComponentDecorator"),yt=c((r,t)=>{let e=Reflect.getMetadata(z,r,t);return e||(e=new ht.Collection,Reflect.defineMetadata(z,e,r,t)),e},"getComponentArgumentStore"),J=c(r=>t=>(e,o,s)=>{var n=new r(t);yt(e,o).set(s,n)},"createArgumentDecorator")});var O,xt=f(()=>{"use strict";O=class{constructor(t){this.type=t,this.decorators=[]}};c(O,"ComponentArgument")});var Ft,G,$t=f(()=>{"use strict";Ft=C(require("lodash")),G=class{constructor(t){typeof t=="object"?this.options=Ft.default.merge(this.defaultOptions(),t):this.options=t}defaultOptions(){return{}}};c(G,"ComponentArgumentDecorator")});var h,pe,ot=f(()=>{"use strict";$();W();h=class extends x{constructor(t){super(),this.options=t}};c(h,"ApplicationCommandComponent");pe=c(r=>y(new h(r)),"applicationCommand")});var H,Ot,bt=f(()=>{"use strict";T();H=class extends G{};c(H,"ApplicationCommandOption");Ot=J(H)});var Wt,I,K,Q=f(()=>{"use strict";Wt=C(require("lodash"));W();$();I=class extends x{constructor(t){super(),this.options=Wt.default.merge({emitter:"discord"},t)}};c(I,"ListenerComponent");K=c(r=>y(new I(r)),"listener")});var j,S,nt=f(()=>{"use strict";W();$();j=class extends x{constructor(t){super(),this.options=t}};c(j,"ConverterComponent");S=c(r=>y(new j(r)),"argConverter")});var Dt,rt,le,Pt=f(()=>{"use strict";Dt=require("discord.js");F();rt=c(r=>{let t=Reflect.getMetadata(ft,r);return t||(t=new Dt.Collection,Reflect.defineMetadata(ft,t,r)),t},"getModuleHookStore"),le=c(r=>(t,e)=>{let o=rt(t),s=o.get(r);s||(s=[],o.set(r,s)),s.push(Reflect.get(t,e))},"moduleHook")});var st=f(()=>{"use strict";Pt();gt()});var D,Nt,qt,Ut,Bt,P,Ct=f(()=>{"use strict";D=C(require("chalk")),Nt=require("discord.js"),qt=C(require("lodash"));wt();st();Q();F();Ut=C(require("walk-sync")),Bt=C(require("path")),P=class{constructor(t,e){this.client=e,this.extensions=[],this.emitters=new Nt.Collection,this.globalHooks={},this.logger=t.getSubLogger({name:D.default.green("Registry")})}addGlobalHook(t,e){let o=this.globalHooks[t];o||(o=[],this.globalHooks[t]=o),o.push(e)}getComponentsWithTypeGlobal(t){let e=[];for(let o of this.extensions)e.push(...this.getComponentsWithType(o,t));return e}getComponentsWithType(t,e){let o=Z(t);return Array.from(o.filter(s=>s.constructor===e).values())}registerEventListeners(t){let e=this.getComponentsWithType(t,I);for(let o of e){let s=this.emitters.get(o.options.emitter);if(s){let n=o.method.bind(t);Reflect.defineMetadata("bound",n,o),s.addListener(o.options.event,n)}}}unregisterEventListeners(t){let e=this.getComponentsWithType(t,I);for(let o of e){let s=this.emitters.get(o.options.emitter),n=Reflect.getMetadata("bound",o);s&&n&&s.removeListener(o.options.event,n)}}async loadAllModulesInDirectory(t,e){let o=[],s=(0,Ut.default)(t).filter(n=>(n.endsWith(".ts")||n.endsWith(".js"))&&(!e||e.test(n)));for(let n of s){if(n.endsWith(".d.ts"))continue;let a=Bt.default.join(t,n);o.push(...await this.loadModulesAtPath(a))}return o}async loadModulesAtPath(t){this.logger.info(`Loading module at path ${D.default.green(t)}`);let e=require.resolve(t),o=require(e);if(typeof o.setup!="function")throw new Error("Extension must have a setup function");let s=await o.setup(this.client);return this.registerModules(s,e)}async registerModules(t,e){let o=[];if(t instanceof Array)for(let s of t)await this.registerModule(s),Reflect.defineMetadata(tt,e,s),o.push(s);else await this.registerModule(t),Reflect.defineMetadata(tt,e,t),o.push(t);return o}async reloadModules(){let t=[],e=new Set,o=[...this.extensions];for(let s of o){let n=Reflect.getMetadata(tt,s);!n||(this.logger.info(`Unloading module: ${D.default.green(s.constructor.name)}`),e.add(n),await this.unregisterModule(s),delete require.cache[require.resolve(n)])}for(let s of e)try{let n=await this.loadModulesAtPath(s);t.push({file:s,result:!0,extensions:n})}catch(n){t.push({file:s,result:!1,error:n})}return t}async registerModule(t){Reflect.defineMetadata(Y,this.client,t),this.registerEventListeners(t),await this.runModuleHook(t,"load"),this.extensions.push(t),this.logger.info(`Module registered: ${D.default.green(t.constructor.name)}`)}async unregisterModule(t){this.unregisterEventListeners(t),await this.runModuleHook(t,"unload"),qt.default.remove(this.extensions,e=>e===t),this.logger.info(`Module unregistered: ${D.default.green(t.constructor.name)}`)}runModuleHook(t,e,...o){let n=rt(t).get(e);if(n)for(let a of n)a.call(t,...o)}registerEventEmitter(t,e){this.emitters.set(t,e)}};c(P,"Registry")});var St=f(()=>{"use strict";Ct();it()});var zt,Zt,N,Mt=f(()=>{"use strict";zt=C(require("chalk")),Zt=require("discord.js");nt();St();N=class{get commandClient(){return A.getFromModule(this)}get client(){return this.commandClient.discord}get logger(){return this._logger||(this._logger=this.commandClient.logger.getSubLogger({name:zt.default.green(`${this.constructor.name}`)})),this._logger}async convertArguments(t,e,o,s){let n=new Zt.Collection;for(let a of this.commandClient.registry.extensions)for(let i of this.commandClient.registry.getComponentsWithType(a,j))i.options.component==t&&n.set(i.options.type,{component:i,ext:a});for(let[a,i]of o){let m=n.get(i.type);if(!m){e[a]=void 0;continue}let u=await s(i,a,m.component);e[a]=await m.component.execute(m.ext,u)}}};c(N,"Extension")});var Jt,L,kt=f(()=>{"use strict";Jt=C(require("chalk"));Mt();L=class extends N{get logger(){return this._logger||(this._logger=this.commandClient.ctsLogger.getSubLogger({name:Jt.default.green(`${this.constructor.name}`)})),this._logger}};c(L,"CTSExtension")});var M,p,V,k,b,vt=f(()=>{"use strict";M=C(require("chalk")),p=require("discord.js");ot();bt();Q();nt();kt();V=function(r,t,e,o){var s=arguments.length,n=s<3?t:o===null?o=Object.getOwnPropertyDescriptor(t,e):o,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,e,o);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,e,n):a(t,e))||n);return s>3&&n&&Object.defineProperty(t,e,n),n},k=function(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)},b=class extends L{constructor(t){super(),this.config=t,this.unmanagedCommands=[]}registerUnmanagedCommand(t){this.unmanagedCommands.push(t)}async interactionCreate(t){var e;try{if(t.type!==p.InteractionType.ApplicationCommand)return;let o=null,s=null,n=this.commandClient.registry.extensions,a=null,i=null;t.commandType===p.ApplicationCommandType.ChatInput&&(a=t.options.getSubcommand(!1),i=t.options.getSubcommandGroup(!1));t:for(let m of n){let u=this.commandClient.registry.getComponentsWithType(m,h);if(a){for(let l of u)if(!(!l.subcommandGroup&&!l.subcommandGroupChild)){if(l.subcommandGroupChild&&l.subcommandGroupChild.parent.options.name===t.commandName&&l.subcommandGroupChild.options.name===i&&l.options.name===a){s=m,o=l;break t}if(l.subcommandGroup&&!i&&l.subcommandGroup.options.name===t.commandName&&l.options.name===a){s=m,o=l;break t}}}else for(let l of u)if(l.options.name===t.commandName){s=m,o=l;break t}}if(o&&s){let m=[];await this.convertArguments(h,m,o.argTypes,()=>[t]);for(let[u,l]of o.argTypes){let d=null;for(let g of l.decorators)if(g instanceof H){if([p.ApplicationCommandOptionType.Subcommand,p.ApplicationCommandOptionType.SubcommandGroup].includes(g.options.type)&&t.isChatInputCommand()){if(g.options.type===p.ApplicationCommandOptionType.Subcommand){d=t.options.getSubcommand()===g.options.name;break}if(g.options.type===p.ApplicationCommandOptionType.SubcommandGroup){d=t.options.getSubcommandGroup()===g.options.name;break}}d=(e=t.options.get(g.options.name,!1))==null?void 0:e.value;break}d&&(m[u]=d)}try{await o.executeGlobalHook(s,"beforeApplicationCommandCall",[t]),await o.execute(s,m,[t])}finally{await o.executeGlobalHook(s,"afterApplicationCommandCall",[t])}}}catch(o){this.commandClient.emit("applicationCommandInvokeError",o,t)}}async sync(){let t=this.commandClient;this.logger.info("Trying to sync commands...");let e=[],o=new p.Collection,s=new p.Collection;for(let n of t.registry.getComponentsWithTypeGlobal(h)){if(n.subcommandGroup){let i=s.get(n.subcommandGroup.options.name);if(!i){if(i={...n.subcommandGroup.options,type:p.ApplicationCommandType.ChatInput},n.subcommandGroup.guilds)for(let u of n.subcommandGroup.guilds){let l=o.get(u);l||(l=[],o.set(u,l))}else e.push(i);s.set(n.subcommandGroup.options.name,i)}i.options||(i.options=[]);let m=[];for(let[,u]of n.argTypes){let l=u.decorators.find(d=>d.constructor===H);l&&m.push(l.options)}i.options.push({...n.options,type:p.ApplicationCommandOptionType.Subcommand,options:m});continue}else if(n.subcommandGroupChild){let i=n.subcommandGroupChild.parent,m=s.get(i.options.name);if(!m){if(m={...i.options,type:p.ApplicationCommandType.ChatInput},i.guilds)for(let d of i.guilds){let g=o.get(d);g||(g=[],o.set(d,g))}else e.push(m);s.set(i.options.name,m)}m.options||(m.options=[]);let u=m.options.find(d=>d.name===n.subcommandGroupChild.options.name);u||(u={type:p.ApplicationCommandOptionType.SubcommandGroup,...n.subcommandGroupChild.options},m.options.push(u)),u.options||(u.options=[]);let l=[];for(let[,d]of n.argTypes){let g=d.decorators.find(v=>v.constructor===H);g&&l.push(g.options)}u.options.push({...n.options,type:p.ApplicationCommandOptionType.Subcommand,options:l});continue}let a={...n.options};if(a.type===p.ApplicationCommandType.ChatInput){a.options=[];for(let[,i]of n.argTypes){let m=i.decorators.find(u=>u.constructor===H);m&&a.options.push(m.options)}}if(await n.executeHook(this,"beforeSync",[a,n]),n.options.guilds){for(let i of n.options.guilds){let m=o.get(i);m||(m=[],o.set(i,m)),m.push(a)}continue}e.push(a)}for(let{guilds:n,...a}of this.unmanagedCommands)if(n){for(let i of n){let m=o.get(i);m||(m=[],o.set(i,m)),m.push(a)}continue}else e.push(a);if(this.config.guilds){for(let n of this.config.guilds){let a=o.get(n);a||(a=[],o.set(n,a)),a.push(...e)}e=[]}if(o.size)for(let[n,a]of o)try{let i=await this.client.guilds.fetch(n);await i.fetch(),this.logger.info(`Processing ${M.default.green(a.length)} commands(${a.map(m=>M.default.blue(m.name)).join(", ")}) for guild ${M.default.green(i.name)}(${M.default.blue(i.id)})`),await i.commands.set(a),this.logger.info(`Successfully registered commands for guild ${M.default.green(i.name)}(${M.default.blue(i.id)})`)}catch(i){this.logger.error(`Failed to register commands to guild ${M.default.green(n)}: ${i.message}`)}if(e.length)try{this.logger.info(`Processing ${M.default.green(e.length)} commands(${e.map(n=>M.default.blue(n.name)).join(", ")}) for application scope...`),await this.client.application.commands.set(e),this.logger.info("Successfully registered commands.")}catch(n){this.logger.error(`Failed to register commands to global: ${n.message}`)}}async chatInteraction(t){return t}async messageInteraction(t){return t}async userInteraction(t){return t}async commandInteraction(t){return t}};c(b,"ApplicationCommandExtension");V([K({event:"interactionCreate"}),k("design:type",Function),k("design:paramtypes",[typeof p.Interaction>"u"?Object:p.Interaction])],b.prototype,"interactionCreate",null);V([S({component:h,parameterless:!0,type:p.ChatInputCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.ChatInputCommandInteraction>"u"?Object:p.ChatInputCommandInteraction])],b.prototype,"chatInteraction",null);V([S({component:h,parameterless:!0,type:p.MessageContextMenuCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.MessageContextMenuCommandInteraction>"u"?Object:p.MessageContextMenuCommandInteraction])],b.prototype,"messageInteraction",null);V([S({component:h,parameterless:!0,type:p.UserContextMenuCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.UserContextMenuCommandInteraction>"u"?Object:p.UserContextMenuCommandInteraction])],b.prototype,"userInteraction",null);V([S({component:h,parameterless:!0,type:p.CommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.UserContextMenuCommandInteraction>"u"?Object:p.UserContextMenuCommandInteraction])],b.prototype,"commandInteraction",null)});var w,fe,Ht=f(()=>{"use strict";$();W();w=class extends x{constructor(t){super(),this.options=t}};c(w,"TextCommandComponent");fe=c(r=>y(new w(r)),"command")});var E,ue,Rt=f(()=>{"use strict";T();T();E=class extends G{};c(E,"TextCommandRestOption");ue=J(E)});var q,at,_,R,Kt=f(()=>{"use strict";Q();q=require("discord.js");kt();Ht();Rt();T();at=function(r,t,e,o){var s=arguments.length,n=s<3?t:o===null?o=Object.getOwnPropertyDescriptor(t,e):o,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,e,o);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,e,n):a(t,e))||n);return s>3&&n&&Object.defineProperty(t,e,n),n},_=function(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)},R=class extends L{constructor(t){super(),this.config=t}async processPrefix(t){let e=t.content,o=this.config.prefix;if(typeof o=="function"&&(o=await o(t)),typeof o=="string")return e.startsWith(o)?o.length:null;if(o instanceof Array){let s=o.find(n=>e.startsWith(n));return s?s.length:null}return null}async messageCreate(t){try{let e=await this.processPrefix(t);if(e===null)return;let o=t.content.slice(e),s=[],n=new Map;for(let d of this.commandClient.registry.extensions)for(let g of this.commandClient.registry.getComponentsWithType(d,w))s.push(g),n.set(g,d);let a=0,i=s.find(d=>{let g=[d.options.name];d.options.aliases&&g.push(...d.options.aliases);for(let v of g)if(o.startsWith(v))return o.length===v.length?(a=v.length,!0):(a=v.length,o.startsWith(v+" "));return!1});if(!i)return;let m=n.get(i);if(!m)return;t.command=i;let u=[],l=o.slice(a+1).split(/ /g);await this.convertArguments(w,u,i.argTypes,async(d,g,v)=>{if(v.options.parameterless)return[t];if(d.decorators.find(lt=>lt.constructor===E)){let lt=l.join(" ");return l=[],[lt,t]}return[l.shift(),t]}),await i.execute(m,u,[t])}catch(e){this.commandClient.emit("textCommandInvokeError",e,t)}}async mesage(t){return t}async str(t){return t}async num(t){return Number(t)}};c(R,"TextCommandExtension");at([K({event:"messageCreate",emitter:"discord"}),_("design:type",Function),_("design:paramtypes",[typeof q.Message>"u"?Object:q.Message])],R.prototype,"messageCreate",null);at([S({component:w,type:q.Message,parameterless:!0}),_("design:type",Function),_("design:paramtypes",[typeof q.Message>"u"?Object:q.Message])],R.prototype,"mesage",null);at([S({component:w,type:String}),_("design:type",Function),_("design:paramtypes",[String])],R.prototype,"str",null);at([S({component:w,type:Number}),_("design:type",Function),_("design:paramtypes",[String])],R.prototype,"num",null)});var It={};At(It,{CommandClient:()=>A});var Gt,ct,Qt,Vt,A,it=f(()=>{"use strict";Gt=C(require("chalk")),ct=require("discord.js"),Qt=C(require("events")),Vt=require("tslog");vt();Kt();F();Ct();A=class extends Qt.default{constructor(t,e=new Vt.Logger({prettyLogTimeZone:"local"}),o={}){super(),this.discord=t,this.logger=e,this.owners=new Set,this.ctsLogger=e.getSubLogger({...o,name:"command.ts"}),this.registry=new P(this.ctsLogger,this),this.registry.registerEventEmitter("cts",this),this.registry.registerEventEmitter("discord",this.discord)}async isOwner(t){return this.owners.has(t.id)}async fetchOwners(){if(!this.discord.application)throw new Error("The client is not logged in.");this.ctsLogger.info("Fetching owners..."),await this.discord.application.fetch();let t=this.discord.application.owner;if(!t)throw new Error("Cannot find application owner");let e=[];if(t instanceof ct.User)this.owners.add(t.id),e.push(t.tag);else if(t instanceof ct.Team)for(let[o,s]of t.members)this.owners.add(o),e.push(s.user.tag);this.ctsLogger.info(`Fetched ${Gt.default.green(e.length)} owners(${e.map(o=>Gt.default.blue(o)).join(", ")})`)}async enableApplicationCommandsExtension(t){await this.registry.registerModule(new b(t)),this.ctsLogger.info("Application command extension enabled.")}async enableTextCommandsExtension(t){await this.registry.registerModule(new R(t)),this.ctsLogger.info("Text command extension enabled.")}getApplicationCommandsExtension(){return this.registry.extensions.find(t=>t.constructor===b)}static getFromModule(t){return Reflect.getMetadata(Y,t)}};c(A,"CommandClient")});var _t,x,W=f(()=>{"use strict";_t=require("discord.js");xt();x=class{hooks=new _t.Collection;argTypes=new _t.Collection;_init(t,e){this.method=t;for(let o=0;o<e.length;o++){let s=e[o];this.argTypes.set(o,new O(s))}}async executeGlobalHook(t,e,o){let{CommandClient:s}=await Promise.resolve().then(()=>(it(),It)),n=s.getFromModule(t),a=n.registry.globalHooks[e];if(a)for(let i of a)await i.call(null,n,...o)}async executeHook(t,e,o){let s=this.hooks.get(e);if(!s)return;let{CommandClient:n}=await Promise.resolve().then(()=>(it(),It)),a=n.getFromModule(t),i=a.registry.globalHooks[e];i&&s.unshift(...i);for(let m of s)await m.call(null,a,...o)}async execute(t,e,o=e){await this.executeHook(t,"beforeCall",o);let s;try{s=await this.method.call(t,...e),await this.executeHook(t,"afterCall",[...o,s])}catch(n){throw await this.executeHook(t,"invokeError",[n,...o]),n}return s}};c(x,"BaseComponent")});var Ro,wt=f(()=>{"use strict";Ro=require("reflect-metadata");$();xt();$t();W()});var U,Tt=f(()=>{"use strict";U=class{};c(U,"OwnerOnlyError")});var mt,Xt,de,Yt=f(()=>{"use strict";mt=require("discord.js");st();Tt();Xt=c(r=>et("beforeCall",r),"createCheckDecorator"),de=Xt(async(r,t)=>{let e=!1;if(t instanceof mt.BaseInteraction?e=await r.isOwner(t.user):t instanceof mt.Message&&(e=await r.isOwner(t.author)),!e)throw new U})});var ge,te=f(()=>{"use strict";ge=c(r=>(t,e,o)=>{for(let s of r)s(t,e,o)},"mergeMethodDecorators")});var ee=f(()=>{"use strict";Yt();Tt();te()});var oe=f(()=>{"use strict";Mt()});var T=f(()=>{"use strict";wt();st();nt();ee();Q();St();oe()});var he={};At(he,{ApplicationCommandComponent:()=>h,ApplicationCommandExtension:()=>b,BaseComponent:()=>x,CommandClient:()=>A,ComponentArgument:()=>O,ComponentArgumentDecorator:()=>G,ConverterComponent:()=>j,Extension:()=>N,ListenerComponent:()=>I,OwnerOnlyError:()=>U,Registry:()=>P,SubCommandGroup:()=>pt,SubCommandGroupChild:()=>X,TextCommandComponent:()=>w,TextCommandRestOption:()=>E,applicationCommand:()=>pe,argConverter:()=>S,command:()=>fe,createArgumentDecorator:()=>J,createCheckDecorator:()=>Xt,createComponentDecorator:()=>y,createComponentHook:()=>et,getComponent:()=>me,getComponentArgumentStore:()=>yt,getComponentStore:()=>Z,getModuleHookStore:()=>rt,listener:()=>K,mergeMethodDecorators:()=>ge,moduleHook:()=>le,option:()=>Ot,ownerOnly:()=>de,rest:()=>ue});module.exports=ce(he);T();ot();bt();var jt=require("discord.js");T();ot();var pt=class{constructor(t,e){this.options=t,this.guilds=e}command(t){let e=new h({type:jt.ApplicationCommandType.ChatInput,...t});return e.subcommandGroup=this,y(e)}createChild(t){return new X(t,this)}};c(pt,"SubCommandGroup");var X=class{constructor(t,e){this.options=t,this.parent=e}command(t){let e=new h({type:jt.ApplicationCommandType.ChatInput,...t});return e.subcommandGroupChild=this,y(e)}};c(X,"SubCommandGroupChild");vt();Ht();Rt();0&&(module.exports={ApplicationCommandComponent,ApplicationCommandExtension,BaseComponent,CommandClient,ComponentArgument,ComponentArgumentDecorator,ConverterComponent,Extension,ListenerComponent,OwnerOnlyError,Registry,SubCommandGroup,SubCommandGroupChild,TextCommandComponent,TextCommandRestOption,applicationCommand,argConverter,command,createArgumentDecorator,createCheckDecorator,createComponentDecorator,createComponentHook,getComponent,getComponentArgumentStore,getComponentStore,getModuleHookStore,listener,mergeMethodDecorators,moduleHook,option,ownerOnly,rest});
|
1
|
+
"use strict";var no=Object.create;var B=Object.defineProperty;var ro=Object.getOwnPropertyDescriptor;var so=Object.getOwnPropertyNames;var io=Object.getPrototypeOf,ao=Object.prototype.hasOwnProperty;var c=(r,t)=>B(r,"name",{value:t,configurable:!0});var f=(r,t)=>()=>(r&&(t=r(r=0)),t);var At=(r,t)=>{for(var o in t)B(r,o,{get:t[o],enumerable:!0})},Lt=(r,t,o,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of so(t))!ao.call(r,s)&&s!==o&&B(r,s,{get:()=>t[s],enumerable:!(e=ro(t,s))||e.enumerable});return r};var C=(r,t,o)=>(o=r!=null?no(io(r)):{},Lt(t||!r||!r.__esModule?B(o,"default",{value:r,enumerable:!0}):o,r)),co=r=>Lt(B({},"__esModule",{value:!0}),r);var z,bo,ft,Y,ut,tt,F=f(()=>{"use strict";z=Symbol(),bo=Symbol(),ft=Symbol(),Y=Symbol(),ut=Symbol(),tt=Symbol()});var Et,dt,ot,gt=f(()=>{"use strict";Et=require("discord.js");F();dt=c((r,t)=>{let o=Reflect.getMetadata(ut,r,t);return o||(o=new Et.Collection,Reflect.defineMetadata(ut,o,r,t)),o},"getComponentHookStore"),ot=c((r,t)=>(o,e)=>{let s=dt(o,e),n=s.get(r);n||(n=[],s.set(r,n)),n.unshift(t)},"createComponentHook")});var ht,Z,mo,y,yt,J,$=f(()=>{"use strict";ht=require("discord.js");gt();F();Z=c(r=>{let t=Reflect.getMetadata(z,r);return t||(t=new ht.Collection,Reflect.defineMetadata(z,t,r)),t},"getComponentStore"),mo=c((r,t)=>Z(r).get(t),"getComponent"),y=c(r=>(t,o)=>{r._init(Reflect.get(t,o),Reflect.getMetadata("design:paramtypes",t,o));let e=dt(t,o);r.hooks=e;let s=Z(t);yt(t,o).forEach((a,i)=>{var m;(m=r.argTypes.get(i))==null||m.decorators.push(a)}),s.set(o,r)},"createComponentDecorator"),yt=c((r,t)=>{let o=Reflect.getMetadata(z,r,t);return o||(o=new ht.Collection,Reflect.defineMetadata(z,o,r,t)),o},"getComponentArgumentStore"),J=c(r=>t=>(o,e,s)=>{let n=new r(t);yt(o,e).set(s,n)},"createArgumentDecorator")});var O,xt=f(()=>{"use strict";O=class{constructor(t){this.type=t,this.decorators=[]}};c(O,"ComponentArgument")});var Ft,G,$t=f(()=>{"use strict";Ft=C(require("lodash")),G=class{constructor(t){typeof t=="object"?this.options=Ft.default.merge(this.defaultOptions(),t):this.options=t}defaultOptions(){return{}}};c(G,"ComponentArgumentDecorator")});var h,po,et=f(()=>{"use strict";$();W();h=class extends x{constructor(t){super(),this.options=t}};c(h,"ApplicationCommandComponent");po=c(r=>y(new h(r)),"applicationCommand")});var H,Ot,bt=f(()=>{"use strict";T();H=class extends G{};c(H,"ApplicationCommandOption");Ot=J(H)});var Wt,I,K,Q=f(()=>{"use strict";Wt=C(require("lodash"));W();$();I=class extends x{constructor(t){super(),this.options=Wt.default.merge({emitter:"discord"},t)}};c(I,"ListenerComponent");K=c(r=>y(new I(r)),"listener")});var j,S,nt=f(()=>{"use strict";W();$();j=class extends x{constructor(t){super(),this.options=t}};c(j,"ConverterComponent");S=c(r=>y(new j(r)),"argConverter")});var Dt,rt,lo,Pt=f(()=>{"use strict";Dt=require("discord.js");F();rt=c(r=>{let t=Reflect.getMetadata(ft,r);return t||(t=new Dt.Collection,Reflect.defineMetadata(ft,t,r)),t},"getModuleHookStore"),lo=c(r=>(t,o)=>{let e=rt(t),s=e.get(r);s||(s=[],e.set(r,s)),s.push(Reflect.get(t,o))},"moduleHook")});var st=f(()=>{"use strict";Pt();gt()});var D,Nt,Ut,qt,Bt,P,Ct=f(()=>{"use strict";D=C(require("chalk")),Nt=require("discord.js"),Ut=C(require("lodash"));wt();st();Q();F();qt=C(require("walk-sync")),Bt=C(require("path")),P=class{constructor(t,o){this.client=o,this.extensions=[],this.emitters=new Nt.Collection,this.globalHooks={},this.logger=t.getSubLogger({name:D.default.green("Registry")})}addGlobalHook(t,o){let e=this.globalHooks[t];e||(e=[],this.globalHooks[t]=e),e.push(o)}getComponentsWithTypeGlobal(t){let o=[];for(let e of this.extensions)o.push(...this.getComponentsWithType(e,t));return o}getComponentsWithType(t,o){let e=Z(t);return Array.from(e.filter(s=>s.constructor===o).values())}registerEventListeners(t){let o=this.getComponentsWithType(t,I);for(let e of o){let s=this.emitters.get(e.options.emitter);if(s){let n=e.method.bind(t);Reflect.defineMetadata("bound",n,e),s.addListener(e.options.event,n)}}}unregisterEventListeners(t){let o=this.getComponentsWithType(t,I);for(let e of o){let s=this.emitters.get(e.options.emitter),n=Reflect.getMetadata("bound",e);s&&n&&s.removeListener(e.options.event,n)}}async loadAllModulesInDirectory(t,o){let e=[],s=(0,qt.default)(t).filter(n=>(n.endsWith(".ts")||n.endsWith(".js"))&&(!o||o.test(n)));for(let n of s){if(n.endsWith(".d.ts"))continue;let a=Bt.default.join(t,n);e.push(...await this.loadModulesAtPath(a))}return e}async loadModulesAtPath(t){this.logger.info(`Loading module at path ${D.default.green(t)}`);let o=require.resolve(t),e=await import(o);if(typeof e.setup!="function")throw new Error("Extension must have a setup function");let s=await e.setup(this.client);return this.registerModules(s,o)}async registerModules(t,o){let e=[];if(t instanceof Array)for(let s of t)await this.registerModule(s),Reflect.defineMetadata(tt,o,s),e.push(s);else await this.registerModule(t),Reflect.defineMetadata(tt,o,t),e.push(t);return e}async reloadModules(){let t=[],o=new Set,e=[...this.extensions];for(let s of e){let n=Reflect.getMetadata(tt,s);!n||(this.logger.info(`Unloading module: ${D.default.green(s.constructor.name)}`),o.add(n),await this.unregisterModule(s),delete require.cache[require.resolve(n)])}for(let s of o)try{let n=await this.loadModulesAtPath(s);t.push({file:s,result:!0,extensions:n})}catch(n){t.push({file:s,result:!1,error:n})}return t}async registerModule(t){Reflect.defineMetadata(Y,this.client,t),this.registerEventListeners(t),await this.runModuleHook(t,"load"),this.extensions.push(t),this.logger.info(`Module registered: ${D.default.green(t.constructor.name)}`)}async unregisterModule(t){this.unregisterEventListeners(t),await this.runModuleHook(t,"unload"),Ut.default.remove(this.extensions,o=>o===t),this.logger.info(`Module unregistered: ${D.default.green(t.constructor.name)}`)}runModuleHook(t,o,...e){let n=rt(t).get(o);if(n)for(let a of n)a.call(t,...e)}registerEventEmitter(t,o){this.emitters.set(t,o)}};c(P,"Registry")});var St=f(()=>{"use strict";Ct();it()});var zt,Zt,N,Mt=f(()=>{"use strict";zt=C(require("chalk")),Zt=require("discord.js");nt();St();N=class{get commandClient(){return A.getFromModule(this)}get client(){return this.commandClient.discord}get logger(){return this._logger||(this._logger=this.commandClient.logger.getSubLogger({name:zt.default.green(`${this.constructor.name}`)})),this._logger}async convertArguments(t,o,e,s){let n=new Zt.Collection;for(let a of this.commandClient.registry.extensions)for(let i of this.commandClient.registry.getComponentsWithType(a,j))i.options.component==t&&n.set(i.options.type,{component:i,ext:a});for(let[a,i]of e){let m=n.get(i.type);if(!m){o[a]=void 0;continue}let d=await s(i,a,m.component);o[a]=await m.component.execute(m.ext,d)}}};c(N,"Extension")});var Jt,L,kt=f(()=>{"use strict";Jt=C(require("chalk"));Mt();L=class extends N{get logger(){return this._logger||(this._logger=this.commandClient.ctsLogger.getSubLogger({name:Jt.default.green(`${this.constructor.name}`)})),this._logger}};c(L,"CTSExtension")});var M,p,V,k,b,vt=f(()=>{"use strict";M=C(require("chalk")),p=require("discord.js");et();bt();Q();nt();kt();V=function(r,t,o,e){var s=arguments.length,n=s<3?t:e===null?e=Object.getOwnPropertyDescriptor(t,o):e,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,o,e);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,o,n):a(t,o))||n);return s>3&&n&&Object.defineProperty(t,o,n),n},k=function(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)},b=class extends L{constructor(t){super(),this.config=t,this.unmanagedCommands=[]}registerUnmanagedCommand(t){this.unmanagedCommands.push(t)}async interactionCreate(t){var o;try{if(t.type!==p.InteractionType.ApplicationCommand)return;let e=null,s=null,n=this.commandClient.registry.extensions,a=null,i=null;t.commandType===p.ApplicationCommandType.ChatInput&&(a=t.options.getSubcommand(!1),i=t.options.getSubcommandGroup(!1));t:for(let m of n){let d=this.commandClient.registry.getComponentsWithType(m,h);if(a){for(let l of d)if(!(!l.subcommandGroup&&!l.subcommandGroupChild)){if(l.subcommandGroupChild&&l.subcommandGroupChild.parent.options.name===t.commandName&&l.subcommandGroupChild.options.name===i&&l.options.name===a){s=m,e=l;break t}if(l.subcommandGroup&&!i&&l.subcommandGroup.options.name===t.commandName&&l.options.name===a){s=m,e=l;break t}}}else for(let l of d)if(l.options.name===t.commandName){s=m,e=l;break t}}if(e&&s){let m=[];await this.convertArguments(h,m,e.argTypes,()=>[t]);for(let[d,l]of e.argTypes){let g=null;for(let u of l.decorators)if(u instanceof H){if([p.ApplicationCommandOptionType.Subcommand,p.ApplicationCommandOptionType.SubcommandGroup].includes(u.options.type)&&t.isChatInputCommand()){if(u.options.type===p.ApplicationCommandOptionType.Subcommand){g=t.options.getSubcommand()===u.options.name;break}if(u.options.type===p.ApplicationCommandOptionType.SubcommandGroup){g=t.options.getSubcommandGroup()===u.options.name;break}}g=(o=t.options.get(u.options.name,!1))==null?void 0:o.value;break}g&&(m[d]=g)}try{await e.executeGlobalHook(s,"beforeApplicationCommandCall",[t]),await e.execute(s,m,[t])}finally{await e.executeGlobalHook(s,"afterApplicationCommandCall",[t])}}}catch(e){this.commandClient.emit("applicationCommandInvokeError",e,t)}}async sync(){let t=this.commandClient;this.logger.info("Trying to sync commands...");let o=[],e=new p.Collection,s=new p.Collection;for(let n of t.registry.getComponentsWithTypeGlobal(h)){if(n.subcommandGroup){let i=s.get(n.subcommandGroup.options.name);if(!i){if(i={...n.subcommandGroup.options,type:p.ApplicationCommandType.ChatInput},n.subcommandGroup.guilds)for(let d of n.subcommandGroup.guilds){let l=e.get(d);l||(l=[],e.set(d,l))}else o.push(i);s.set(n.subcommandGroup.options.name,i)}i.options||(i.options=[]);let m=[];for(let[,d]of n.argTypes){let l=d.decorators.find(g=>g.constructor===H);l&&m.push(l.options)}i.options.push({...n.options,type:p.ApplicationCommandOptionType.Subcommand,options:m});continue}else if(n.subcommandGroupChild){let i=n.subcommandGroupChild.parent,m=s.get(i.options.name);if(!m){if(m={...i.options,type:p.ApplicationCommandType.ChatInput},i.guilds)for(let g of i.guilds){let u=e.get(g);u||(u=[],e.set(g,u))}else o.push(m);s.set(i.options.name,m)}m.options||(m.options=[]);let d=m.options.find(g=>{var u;return g.name===((u=n.subcommandGroupChild)==null?void 0:u.options.name)});d||(d={type:p.ApplicationCommandOptionType.SubcommandGroup,...n.subcommandGroupChild.options},m.options.push(d)),d.options||(d.options=[]);let l=[];for(let[,g]of n.argTypes){let u=g.decorators.find(v=>v.constructor===H);u&&l.push(u.options)}d.options.push({...n.options,type:p.ApplicationCommandOptionType.Subcommand,options:l});continue}let a={...n.options};if(a.type===p.ApplicationCommandType.ChatInput){a.options=[];for(let[,i]of n.argTypes){let m=i.decorators.find(d=>d.constructor===H);m&&a.options.push(m.options)}}if(await n.executeHook(this,"beforeSync",[a,n]),n.options.guilds){for(let i of n.options.guilds){let m=e.get(i);m||(m=[],e.set(i,m)),m.push(a)}continue}o.push(a)}for(let{guilds:n,...a}of this.unmanagedCommands)if(n){for(let i of n){let m=e.get(i);m||(m=[],e.set(i,m)),m.push(a)}continue}else o.push(a);if(this.config.guilds){for(let n of this.config.guilds){let a=e.get(n);a||(a=[],e.set(n,a)),a.push(...o)}o=[]}if(e.size)for(let[n,a]of e)try{let i=await this.client.guilds.fetch(n);await i.fetch(),this.logger.info(`Processing ${M.default.green(a.length)} commands(${a.map(m=>M.default.blue(m.name)).join(", ")}) for guild ${M.default.green(i.name)}(${M.default.blue(i.id)})`),await i.commands.set(a),this.logger.info(`Successfully registered commands for guild ${M.default.green(i.name)}(${M.default.blue(i.id)})`)}catch(i){this.logger.error(`Failed to register commands to guild ${M.default.green(n)}: ${i.message}`)}if(o.length)try{this.logger.info(`Processing ${M.default.green(o.length)} commands(${o.map(n=>M.default.blue(n.name)).join(", ")}) for application scope...`),this.client.application?(await this.client.application.commands.set(o),this.logger.info("Successfully registered commands.")):this.logger.error("Client#application is not yet initialized.")}catch(n){this.logger.error(`Failed to register commands to global: ${n.message}`)}}async chatInteraction(t){return t}async messageInteraction(t){return t}async userInteraction(t){return t}async commandInteraction(t){return t}};c(b,"ApplicationCommandExtension");V([K({event:"interactionCreate"}),k("design:type",Function),k("design:paramtypes",[typeof Interaction>"u"?Object:Interaction])],b.prototype,"interactionCreate",null);V([S({component:h,parameterless:!0,type:p.ChatInputCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.ChatInputCommandInteraction>"u"?Object:p.ChatInputCommandInteraction])],b.prototype,"chatInteraction",null);V([S({component:h,parameterless:!0,type:p.MessageContextMenuCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.MessageContextMenuCommandInteraction>"u"?Object:p.MessageContextMenuCommandInteraction])],b.prototype,"messageInteraction",null);V([S({component:h,parameterless:!0,type:p.UserContextMenuCommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.UserContextMenuCommandInteraction>"u"?Object:p.UserContextMenuCommandInteraction])],b.prototype,"userInteraction",null);V([S({component:h,parameterless:!0,type:p.CommandInteraction}),k("design:type",Function),k("design:paramtypes",[typeof p.UserContextMenuCommandInteraction>"u"?Object:p.UserContextMenuCommandInteraction])],b.prototype,"commandInteraction",null)});var w,fo,Ht=f(()=>{"use strict";$();W();w=class extends x{constructor(t){super(),this.options=t}};c(w,"TextCommandComponent");fo=c(r=>y(new w(r)),"command")});var E,uo,Rt=f(()=>{"use strict";T();T();E=class extends G{};c(E,"TextCommandRestOption");uo=J(E)});var U,at,_,R,Kt=f(()=>{"use strict";Q();U=require("discord.js");kt();Ht();Rt();T();at=function(r,t,o,e){var s=arguments.length,n=s<3?t:e===null?e=Object.getOwnPropertyDescriptor(t,o):e,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(r,t,o,e);else for(var i=r.length-1;i>=0;i--)(a=r[i])&&(n=(s<3?a(n):s>3?a(t,o,n):a(t,o))||n);return s>3&&n&&Object.defineProperty(t,o,n),n},_=function(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)},R=class extends L{constructor(t){super(),this.config=t}async processPrefix(t){let o=t.content,e=this.config.prefix;if(typeof e=="function"&&(e=await e(t)),typeof e=="string")return o.startsWith(e)?e.length:null;if(e instanceof Array){let s=e.find(n=>o.startsWith(n));return s?s.length:null}return null}async messageCreate(t){try{let o=await this.processPrefix(t);if(o===null)return;let e=t.content.slice(o),s=[],n=new Map;for(let g of this.commandClient.registry.extensions)for(let u of this.commandClient.registry.getComponentsWithType(g,w))s.push(u),n.set(u,g);let a=0,i=s.find(g=>{let u=[g.options.name];g.options.aliases&&u.push(...g.options.aliases);for(let v of u)if(e.startsWith(v))return e.length===v.length?(a=v.length,!0):(a=v.length,e.startsWith(v+" "));return!1});if(!i)return;let m=n.get(i);if(!m)return;t.command=i;let d=[],l=e.slice(a+1).split(/ /g);await this.convertArguments(w,d,i.argTypes,async(g,u,v)=>{if(v.options.parameterless)return[t];if(g.decorators.find(lt=>lt.constructor===E)){let lt=l.join(" ");return l=[],[lt,t]}return[l.shift(),t]}),await i.execute(m,d,[t])}catch(o){this.commandClient.emit("textCommandInvokeError",o,t)}}async mesage(t){return t}async str(t){return t}async num(t){return Number(t)}};c(R,"TextCommandExtension");at([K({event:"messageCreate",emitter:"discord"}),_("design:type",Function),_("design:paramtypes",[typeof U.Message>"u"?Object:U.Message])],R.prototype,"messageCreate",null);at([S({component:w,type:U.Message,parameterless:!0}),_("design:type",Function),_("design:paramtypes",[typeof U.Message>"u"?Object:U.Message])],R.prototype,"mesage",null);at([S({component:w,type:String}),_("design:type",Function),_("design:paramtypes",[String])],R.prototype,"str",null);at([S({component:w,type:Number}),_("design:type",Function),_("design:paramtypes",[String])],R.prototype,"num",null)});var It={};At(It,{CommandClient:()=>A});var Gt,ct,Qt,Vt,A,it=f(()=>{"use strict";Gt=C(require("chalk")),ct=require("discord.js"),Qt=C(require("events")),Vt=require("tslog");vt();Kt();F();Ct();A=class extends Qt.default{constructor(t,o=new Vt.Logger({prettyLogTimeZone:"local"}),e={}){super(),this.discord=t,this.logger=o,this.owners=new Set,this.ctsLogger=o.getSubLogger({...e,name:"command.ts"}),this.registry=new P(this.ctsLogger,this),this.registry.registerEventEmitter("cts",this),this.registry.registerEventEmitter("discord",this.discord)}async isOwner(t){return this.owners.has(t.id)}async fetchOwners(){if(!this.discord.application)throw new Error("The client is not logged in.");this.ctsLogger.info("Fetching owners..."),await this.discord.application.fetch();let t=this.discord.application.owner;if(!t)throw new Error("Cannot find application owner");let o=[];if(t instanceof ct.User)this.owners.add(t.id),o.push(t.tag);else if(t instanceof ct.Team)for(let[e,s]of t.members)this.owners.add(e),o.push(s.user.tag);this.ctsLogger.info(`Fetched ${Gt.default.green(o.length)} owners(${o.map(e=>Gt.default.blue(e)).join(", ")})`)}async enableApplicationCommandsExtension(t){await this.registry.registerModule(new b(t)),this.ctsLogger.info("Application command extension enabled.")}async enableTextCommandsExtension(t){await this.registry.registerModule(new R(t)),this.ctsLogger.info("Text command extension enabled.")}getApplicationCommandsExtension(){return this.registry.extensions.find(t=>t.constructor===b)}static getFromModule(t){return Reflect.getMetadata(Y,t)}};c(A,"CommandClient")});var _t,x,W=f(()=>{"use strict";_t=require("discord.js");xt();x=class{hooks=new _t.Collection;argTypes=new _t.Collection;_init(t,o){this.method=t;for(let e=0;e<o.length;e++){let s=o[e];this.argTypes.set(e,new O(s))}}async executeGlobalHook(t,o,e){let{CommandClient:s}=await Promise.resolve().then(()=>(it(),It)),n=s.getFromModule(t),a=n.registry.globalHooks[o];if(a)for(let i of a)await i.call(null,n,...e)}async executeHook(t,o,e){let s=this.hooks.get(o);if(!s)return;let{CommandClient:n}=await Promise.resolve().then(()=>(it(),It)),a=n.getFromModule(t),i=a.registry.globalHooks[o];i&&s.unshift(...i);for(let m of s)await m.call(null,a,...e)}async execute(t,o,e=o){await this.executeHook(t,"beforeCall",e);let s;try{s=await this.method.call(t,...o),await this.executeHook(t,"afterCall",[...e,s])}catch(n){throw await this.executeHook(t,"invokeError",[n,...e]),n}return s}};c(x,"BaseComponent")});var Re,wt=f(()=>{"use strict";Re=require("reflect-metadata");$();xt();$t();W()});var q,Tt=f(()=>{"use strict";q=class{};c(q,"OwnerOnlyError")});var mt,Xt,go,Yt=f(()=>{"use strict";mt=require("discord.js");st();Tt();Xt=c(r=>ot("beforeCall",r),"createCheckDecorator"),go=Xt(async(r,t)=>{let o=!1;if(t instanceof mt.BaseInteraction?o=await r.isOwner(t.user):t instanceof mt.Message&&(o=await r.isOwner(t.author)),!o)throw new q})});var ho,to=f(()=>{"use strict";ho=c(r=>(t,o,e)=>{for(let s of r)s(t,o,e)},"mergeMethodDecorators")});var oo=f(()=>{"use strict";Yt();Tt();to()});var eo=f(()=>{"use strict";Mt()});var T=f(()=>{"use strict";wt();st();nt();oo();Q();St();eo()});var yo={};At(yo,{ApplicationCommandComponent:()=>h,ApplicationCommandExtension:()=>b,BaseComponent:()=>x,CommandClient:()=>A,ComponentArgument:()=>O,ComponentArgumentDecorator:()=>G,ConverterComponent:()=>j,Extension:()=>N,ListenerComponent:()=>I,OwnerOnlyError:()=>q,Registry:()=>P,SubCommandGroup:()=>pt,SubCommandGroupChild:()=>X,TextCommandComponent:()=>w,TextCommandRestOption:()=>E,applicationCommand:()=>po,argConverter:()=>S,command:()=>fo,createArgumentDecorator:()=>J,createCheckDecorator:()=>Xt,createComponentDecorator:()=>y,createComponentHook:()=>ot,getComponent:()=>mo,getComponentArgumentStore:()=>yt,getComponentStore:()=>Z,getModuleHookStore:()=>rt,listener:()=>K,mergeMethodDecorators:()=>ho,moduleHook:()=>lo,option:()=>Ot,ownerOnly:()=>go,rest:()=>uo});module.exports=co(yo);T();et();bt();var jt=require("discord.js");T();et();var pt=class{constructor(t,o){this.options=t,this.guilds=o}command(t){let o=new h({type:jt.ApplicationCommandType.ChatInput,...t});return o.subcommandGroup=this,y(o)}createChild(t){return new X(t,this)}};c(pt,"SubCommandGroup");var X=class{constructor(t,o){this.options=t,this.parent=o}command(t){let o=new h({type:jt.ApplicationCommandType.ChatInput,...t});return o.subcommandGroupChild=this,y(o)}};c(X,"SubCommandGroupChild");vt();Ht();Rt();0&&(module.exports={ApplicationCommandComponent,ApplicationCommandExtension,BaseComponent,CommandClient,ComponentArgument,ComponentArgumentDecorator,ConverterComponent,Extension,ListenerComponent,OwnerOnlyError,Registry,SubCommandGroup,SubCommandGroupChild,TextCommandComponent,TextCommandRestOption,applicationCommand,argConverter,command,createArgumentDecorator,createCheckDecorator,createComponentDecorator,createComponentHook,getComponent,getComponentArgumentStore,getComponentStore,getModuleHookStore,listener,mergeMethodDecorators,moduleHook,option,ownerOnly,rest});
|
2
2
|
//# sourceMappingURL=index.js.map
|