@pikokr/command.ts 3.0.0-dev.a94f324 → 3.0.0-dev.ca01eb5
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/.prettierrc +2 -1
- package/README.md +2 -2
- package/dist/builtinModules/BuiltinCommandConverters.d.ts +9 -1
- package/dist/builtinModules/BuiltinCommandConverters.js +53 -0
- package/dist/builtinModules/BuiltinSlashCommandConverters.d.ts +9 -0
- package/dist/builtinModules/BuiltinSlashCommandConverters.js +32 -0
- package/dist/builtinModules/CommandHandler.d.ts +4 -2
- package/dist/builtinModules/CommandHandler.js +152 -53
- package/dist/builtinModules/index.d.ts +1 -0
- package/dist/builtinModules/index.js +1 -0
- package/dist/command/ArgumentConverter.d.ts +7 -1
- package/dist/command/ArgumentConverter.js +11 -1
- package/dist/command/Command.d.ts +8 -2
- package/dist/command/Command.js +7 -1
- package/dist/command/cooldown/adapter.d.ts +10 -0
- package/dist/command/cooldown/adapter.js +30 -0
- package/dist/command/cooldown/decorator.d.ts +2 -0
- package/dist/command/cooldown/decorator.js +72 -0
- package/dist/command/cooldown/error.d.ts +4 -0
- package/dist/command/cooldown/error.js +10 -0
- package/dist/command/cooldown/index.d.ts +5 -0
- package/dist/command/cooldown/index.js +17 -0
- package/dist/command/cooldown/type.d.ts +8 -0
- package/dist/command/cooldown/type.js +12 -0
- package/dist/command/decorator.d.ts +9 -1
- package/dist/command/decorator.js +70 -12
- package/dist/command/index.d.ts +2 -0
- package/dist/command/index.js +2 -0
- package/dist/command/utils.d.ts +2 -0
- package/dist/command/utils.js +29 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.js +7 -1
- package/dist/error/ArgumentConverterNotFound.d.ts +7 -1
- package/dist/error/ArgumentConverterNotFound.js +9 -1
- package/dist/error/ArgumentNotProvided.d.ts +3 -1
- package/dist/error/ArgumentNotProvided.js +2 -1
- package/dist/error/CommandCheckFailed.d.ts +13 -0
- package/dist/error/CommandCheckFailed.js +19 -0
- package/dist/error/PermissionRequired.d.ts +10 -0
- package/dist/error/PermissionRequired.js +18 -0
- package/dist/error/index.d.ts +2 -0
- package/dist/error/index.js +2 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/slashCommand/SlashCommand.d.ts +19 -0
- package/dist/slashCommand/SlashCommand.js +21 -0
- package/dist/slashCommand/decorator.d.ts +10 -0
- package/dist/slashCommand/decorator.js +37 -0
- package/dist/slashCommand/index.d.ts +2 -0
- package/dist/slashCommand/index.js +14 -0
- package/dist/structures/CommandClient.d.ts +14 -3
- package/dist/structures/CommandClient.js +27 -12
- package/dist/structures/Module.d.ts +5 -1
- package/dist/structures/Module.js +9 -0
- package/dist/structures/Registry.d.ts +16 -6
- package/dist/structures/Registry.js +130 -40
- package/dist/typings.d.ts +18 -0
- package/dist/typings.js +2 -0
- package/package.json +4 -1
- package/src/builtinModules/BuiltinCommandConverters.ts +42 -1
- package/src/builtinModules/BuiltinSlashCommandConverters.ts +18 -0
- package/src/builtinModules/CommandHandler.ts +155 -63
- package/src/builtinModules/index.ts +1 -0
- package/src/command/ArgumentConverter.ts +10 -6
- package/src/command/Command.ts +12 -1
- package/src/command/cooldown/adapter.ts +18 -0
- package/src/command/cooldown/decorator.ts +62 -0
- package/src/command/cooldown/error.ts +5 -0
- package/src/command/cooldown/index.ts +5 -0
- package/src/command/cooldown/type.ts +8 -0
- package/src/command/decorator.ts +102 -36
- package/src/command/index.ts +2 -0
- package/src/command/utils.ts +29 -0
- package/src/constants.ts +12 -0
- package/src/error/ArgumentConverterNotFound.ts +7 -1
- package/src/error/ArgumentNotProvided.ts +2 -1
- package/src/error/CommandCheckFailed.ts +15 -0
- package/src/error/PermissionRequired.ts +13 -0
- package/src/error/index.ts +2 -0
- package/src/index.ts +3 -0
- package/src/slashCommand/SlashCommand.ts +29 -0
- package/src/slashCommand/decorator.ts +58 -0
- package/src/slashCommand/index.ts +2 -0
- package/src/structures/CommandClient.ts +31 -19
- package/src/structures/Module.ts +15 -2
- package/src/structures/Registry.ts +96 -29
- package/src/typings.ts +19 -0
- package/test/index.ts +4 -0
- package/test/modules/test.ts +32 -5
- package/pagesconfig.json +0 -13
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CoolDownType = void 0;
|
|
4
|
+
var CoolDownType;
|
|
5
|
+
(function (CoolDownType) {
|
|
6
|
+
CoolDownType[CoolDownType["USER"] = 0] = "USER";
|
|
7
|
+
CoolDownType[CoolDownType["CHANNEL"] = 1] = "CHANNEL";
|
|
8
|
+
CoolDownType[CoolDownType["GUILD"] = 2] = "GUILD";
|
|
9
|
+
CoolDownType[CoolDownType["ROLE"] = 3] = "ROLE";
|
|
10
|
+
CoolDownType[CoolDownType["CATEGORY"] = 4] = "CATEGORY";
|
|
11
|
+
CoolDownType[CoolDownType["MEMBER"] = 5] = "MEMBER";
|
|
12
|
+
})(CoolDownType = exports.CoolDownType || (exports.CoolDownType = {}));
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
+
import { Message, PermissionResolvable } from 'discord.js';
|
|
1
2
|
declare type CommandOptions = {
|
|
2
3
|
name: string;
|
|
3
|
-
aliases: string[];
|
|
4
|
+
aliases: string[] | ((msg: Message) => string[]);
|
|
4
5
|
};
|
|
5
6
|
export declare const command: (options?: Partial<CommandOptions>) => (target: Object, propertyKey: string) => void;
|
|
6
7
|
export declare const argumentConverter: (type: object, requireParameter?: boolean) => (target: Object, propertyKey: string) => void;
|
|
8
|
+
export declare const slashArgumentConverter: (type: object) => (target: Object, propertyKey: string) => void;
|
|
7
9
|
export declare const optional: ParameterDecorator;
|
|
10
|
+
export declare const rest: ParameterDecorator;
|
|
11
|
+
export declare const ownerOnly: MethodDecorator;
|
|
12
|
+
export declare const guildOnly: MethodDecorator;
|
|
13
|
+
export declare const dmOnly: MethodDecorator;
|
|
14
|
+
export declare const requireUserPermissions: (permission: PermissionResolvable) => MethodDecorator;
|
|
15
|
+
export declare const requireClientPermissions: (permission: PermissionResolvable) => MethodDecorator;
|
|
8
16
|
export {};
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.optional = exports.argumentConverter = exports.command = void 0;
|
|
3
|
+
exports.requireClientPermissions = exports.requireUserPermissions = exports.dmOnly = exports.guildOnly = exports.ownerOnly = exports.rest = exports.optional = exports.slashArgumentConverter = exports.argumentConverter = exports.command = void 0;
|
|
4
4
|
const constants_1 = require("../constants");
|
|
5
5
|
const Command_1 = require("./Command");
|
|
6
6
|
const utils_1 = require("../utils");
|
|
7
7
|
const ArgumentConverter_1 = require("./ArgumentConverter");
|
|
8
|
+
const utils_2 = require("./utils");
|
|
9
|
+
const discord_js_1 = require("discord.js");
|
|
10
|
+
const error_1 = require("../error");
|
|
8
11
|
const command = (options = {}) => {
|
|
9
12
|
return (target, propertyKey) => {
|
|
10
13
|
utils_1.checkTarget(target);
|
|
11
14
|
let properties = Reflect.getMetadata(constants_1.KCommands, target);
|
|
12
15
|
const params = Reflect.getMetadata('design:paramtypes', target, propertyKey);
|
|
13
|
-
const optionals = Reflect.getMetadata(constants_1.KOptionals, target, propertyKey) ||
|
|
16
|
+
const optionals = Reflect.getMetadata(constants_1.KOptionals, target, propertyKey) || -1;
|
|
17
|
+
const rest = Reflect.getMetadata(constants_1.KRest, target, propertyKey) || -1;
|
|
14
18
|
const command = new Command_1.Command(Reflect.get(target, propertyKey), params.map((x, i) => ({
|
|
15
19
|
type: x,
|
|
16
|
-
optional: optionals
|
|
17
|
-
|
|
20
|
+
optional: optionals === -1 ? false : optionals <= i,
|
|
21
|
+
rest: rest === -1 ? false : rest === i,
|
|
22
|
+
})), options.name || propertyKey, options.aliases || [], target, propertyKey);
|
|
18
23
|
if (properties) {
|
|
19
24
|
properties.push(command);
|
|
20
25
|
}
|
|
@@ -40,15 +45,68 @@ const argumentConverter = (type, requireParameter = true) => {
|
|
|
40
45
|
};
|
|
41
46
|
};
|
|
42
47
|
exports.argumentConverter = argumentConverter;
|
|
48
|
+
const slashArgumentConverter = (type) => {
|
|
49
|
+
return (target, propertyKey) => {
|
|
50
|
+
utils_1.checkTarget(target);
|
|
51
|
+
let properties = Reflect.getMetadata(constants_1.KSlashArgumentConverters, target);
|
|
52
|
+
const converter = new ArgumentConverter_1.SlashArgumentConverter(type, Reflect.get(target, propertyKey));
|
|
53
|
+
if (properties) {
|
|
54
|
+
properties.push(converter);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
properties = [converter];
|
|
58
|
+
Reflect.defineMetadata(constants_1.KSlashArgumentConverters, properties, target);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
exports.slashArgumentConverter = slashArgumentConverter;
|
|
43
63
|
const optional = (target, propertyKey, parameterIndex) => {
|
|
44
64
|
utils_1.checkTarget(target);
|
|
45
|
-
|
|
46
|
-
if (properties) {
|
|
47
|
-
properties.push(parameterIndex);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
properties = [parameterIndex];
|
|
51
|
-
Reflect.defineMetadata(constants_1.KOptionals, properties, target, propertyKey);
|
|
52
|
-
}
|
|
65
|
+
Reflect.defineMetadata(constants_1.KOptionals, parameterIndex, target, propertyKey);
|
|
53
66
|
};
|
|
54
67
|
exports.optional = optional;
|
|
68
|
+
const rest = (target, propertyKey, parameterIndex) => {
|
|
69
|
+
utils_1.checkTarget(target);
|
|
70
|
+
const params = Reflect.getMetadata('design:paramtypes', target, propertyKey);
|
|
71
|
+
if (params.length - 1 !== parameterIndex)
|
|
72
|
+
throw new Error('Rest decorator must be used at last argument.');
|
|
73
|
+
if (params[parameterIndex] !== String)
|
|
74
|
+
throw new Error('Rest argument type must be "String"');
|
|
75
|
+
Reflect.defineMetadata(constants_1.KRest, parameterIndex, target, propertyKey);
|
|
76
|
+
};
|
|
77
|
+
exports.rest = rest;
|
|
78
|
+
exports.ownerOnly = utils_2.createCheckDecorator((msg) => msg.data.cts.owners.includes(msg.author.id), (i) => i.data.cts.owners.includes(i.user.id));
|
|
79
|
+
exports.guildOnly = utils_2.createCheckDecorator((msg) => !!msg.guild, (i) => !!i.guildId);
|
|
80
|
+
exports.dmOnly = utils_2.createCheckDecorator((msg) => !msg.guild, (i) => !i.guildId);
|
|
81
|
+
const requireUserPermissions = (permission) => utils_2.createCheckDecorator((msg) => {
|
|
82
|
+
if (!msg.guild || !msg.member)
|
|
83
|
+
throw new Error('This command must be used in guild.');
|
|
84
|
+
if (msg.member.permissionsIn(msg.channel).has(permission)) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
throw new error_1.UserPermissionRequired(msg.member, new discord_js_1.Permissions(permission));
|
|
88
|
+
}, (i) => {
|
|
89
|
+
if (!i.guild || !i.member)
|
|
90
|
+
throw new Error('This command must be used in serer.');
|
|
91
|
+
if (!(i.member instanceof discord_js_1.GuildMember) || i.member.permissionsIn(i.channel).has(permission)) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
throw new error_1.UserPermissionRequired(i.member, new discord_js_1.Permissions(permission));
|
|
95
|
+
});
|
|
96
|
+
exports.requireUserPermissions = requireUserPermissions;
|
|
97
|
+
const requireClientPermissions = (permission) => utils_2.createCheckDecorator((msg) => {
|
|
98
|
+
if (!msg.guild)
|
|
99
|
+
throw new Error('This command must be used in guild.');
|
|
100
|
+
if (msg.guild.me.permissionsIn(msg.channel).has(permission)) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
throw new error_1.ClientPermissionRequired(new discord_js_1.Permissions(permission));
|
|
104
|
+
}, (i) => {
|
|
105
|
+
if (!i.guild)
|
|
106
|
+
throw new Error('This command must be used in guild.');
|
|
107
|
+
if (i.guild.me.permissionsIn(i.channel).has(permission)) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
throw new error_1.ClientPermissionRequired(new discord_js_1.Permissions(permission));
|
|
111
|
+
});
|
|
112
|
+
exports.requireClientPermissions = requireClientPermissions;
|
package/dist/command/index.d.ts
CHANGED
package/dist/command/index.js
CHANGED
|
@@ -13,3 +13,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
__exportStar(require("./Command"), exports);
|
|
14
14
|
__exportStar(require("./decorator"), exports);
|
|
15
15
|
__exportStar(require("./ArgumentConverter"), exports);
|
|
16
|
+
__exportStar(require("./utils"), exports);
|
|
17
|
+
__exportStar(require("./cooldown"), exports);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCheckDecorator = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const createCheckDecorator = (execute, slashExecute) => {
|
|
6
|
+
return (target, propertyKey) => {
|
|
7
|
+
if (execute) {
|
|
8
|
+
let properties = Reflect.getMetadata(constants_1.KCommandChecks, target, propertyKey);
|
|
9
|
+
if (properties) {
|
|
10
|
+
properties.push(execute);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
properties = [execute];
|
|
14
|
+
Reflect.defineMetadata(constants_1.KCommandChecks, properties, target, propertyKey);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (slashExecute) {
|
|
18
|
+
let properties = Reflect.getMetadata(constants_1.KSlashCommandChecks, target, propertyKey);
|
|
19
|
+
if (properties) {
|
|
20
|
+
properties.push(slashExecute);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
properties = [slashExecute];
|
|
24
|
+
Reflect.defineMetadata(constants_1.KSlashCommandChecks, properties, target, propertyKey);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
exports.createCheckDecorator = createCheckDecorator;
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
export declare const KCommands: unique symbol;
|
|
2
|
+
export declare const KSlashCommands: unique symbol;
|
|
3
|
+
export declare const KSlashCommandOptions: unique symbol;
|
|
2
4
|
export declare const KListeners: unique symbol;
|
|
3
5
|
export declare const KModulePath: unique symbol;
|
|
4
6
|
export declare const KListenerExecuteCache: unique symbol;
|
|
5
7
|
export declare const KBuiltInModule: unique symbol;
|
|
6
8
|
export declare const KOptionals: unique symbol;
|
|
9
|
+
export declare const KRest: unique symbol;
|
|
7
10
|
export declare const KArgumentConverters: unique symbol;
|
|
11
|
+
export declare const KSlashArgumentConverters: unique symbol;
|
|
12
|
+
export declare const KCommandChecks: unique symbol;
|
|
13
|
+
export declare const KSlashCommandChecks: unique symbol;
|
package/dist/constants.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KArgumentConverters = exports.KOptionals = exports.KBuiltInModule = exports.KListenerExecuteCache = exports.KModulePath = exports.KListeners = exports.KCommands = void 0;
|
|
3
|
+
exports.KSlashCommandChecks = exports.KCommandChecks = exports.KSlashArgumentConverters = exports.KArgumentConverters = exports.KRest = exports.KOptionals = exports.KBuiltInModule = exports.KListenerExecuteCache = exports.KModulePath = exports.KListeners = exports.KSlashCommandOptions = exports.KSlashCommands = exports.KCommands = void 0;
|
|
4
4
|
exports.KCommands = Symbol('Command.TS Commands');
|
|
5
|
+
exports.KSlashCommands = Symbol('Command.TS Slash Commands');
|
|
6
|
+
exports.KSlashCommandOptions = Symbol('Command.TS Slash Command Options');
|
|
5
7
|
exports.KListeners = Symbol('Command.TS Listeners');
|
|
6
8
|
exports.KModulePath = Symbol('Command.TS Module Path');
|
|
7
9
|
exports.KListenerExecuteCache = Symbol('Command.TS Module Identifier');
|
|
8
10
|
exports.KBuiltInModule = Symbol('Command.TS Built-In Module');
|
|
9
11
|
exports.KOptionals = Symbol('Command.TS Optional Parameters');
|
|
12
|
+
exports.KRest = Symbol('Command.TS Rest Parameter');
|
|
10
13
|
exports.KArgumentConverters = Symbol('Command.TS Argument Converter');
|
|
14
|
+
exports.KSlashArgumentConverters = Symbol('Command.TS Slash Argument Converter');
|
|
15
|
+
exports.KCommandChecks = Symbol('Command.TS Command Checks');
|
|
16
|
+
exports.KSlashCommandChecks = Symbol('Command.TS Slash Command Checks');
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import { Message } from 'discord.js';
|
|
1
|
+
import { CommandInteraction, Message } from 'discord.js';
|
|
2
2
|
import type { Argument } from '../command';
|
|
3
|
+
import type { SlashArgument } from '../slashCommand';
|
|
3
4
|
export declare class ArgumentConverterNotFound extends Error {
|
|
4
5
|
type: Argument;
|
|
5
6
|
msg: Message;
|
|
6
7
|
constructor(type: Argument, msg: Message);
|
|
7
8
|
}
|
|
9
|
+
export declare class SlashArgumentConverterNotFound extends Error {
|
|
10
|
+
type: SlashArgument;
|
|
11
|
+
interaction: CommandInteraction;
|
|
12
|
+
constructor(type: SlashArgument, interaction: CommandInteraction);
|
|
13
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ArgumentConverterNotFound = void 0;
|
|
3
|
+
exports.SlashArgumentConverterNotFound = exports.ArgumentConverterNotFound = void 0;
|
|
4
4
|
class ArgumentConverterNotFound extends Error {
|
|
5
5
|
constructor(type, msg) {
|
|
6
6
|
super(`Argument converter ${type.type.name} not found.`);
|
|
@@ -9,3 +9,11 @@ class ArgumentConverterNotFound extends Error {
|
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
11
|
exports.ArgumentConverterNotFound = ArgumentConverterNotFound;
|
|
12
|
+
class SlashArgumentConverterNotFound extends Error {
|
|
13
|
+
constructor(type, interaction) {
|
|
14
|
+
super(`Argument converter ${type.type.name} not found.`);
|
|
15
|
+
this.type = type;
|
|
16
|
+
this.interaction = interaction;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.SlashArgumentConverterNotFound = SlashArgumentConverterNotFound;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Message } from 'discord.js';
|
|
2
|
+
import { Command } from '../command';
|
|
2
3
|
export declare class ArgumentNotProvided extends Error {
|
|
3
4
|
index: number;
|
|
5
|
+
command: Command;
|
|
4
6
|
msg: Message;
|
|
5
|
-
constructor(index: number, msg: Message);
|
|
7
|
+
constructor(index: number, command: Command, msg: Message);
|
|
6
8
|
}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ArgumentNotProvided = void 0;
|
|
4
4
|
class ArgumentNotProvided extends Error {
|
|
5
|
-
constructor(index, msg) {
|
|
5
|
+
constructor(index, command, msg) {
|
|
6
6
|
super(`Required argument #${index} not provided.`);
|
|
7
7
|
this.index = index;
|
|
8
|
+
this.command = command;
|
|
8
9
|
this.msg = msg;
|
|
9
10
|
}
|
|
10
11
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CommandInteraction, Message } from 'discord.js';
|
|
2
|
+
import { Command } from '../command';
|
|
3
|
+
import { SlashCommand } from '../slashCommand';
|
|
4
|
+
export declare class CommandCheckFailed extends Error {
|
|
5
|
+
msg: Message;
|
|
6
|
+
command: Command;
|
|
7
|
+
constructor(msg: Message, command: Command);
|
|
8
|
+
}
|
|
9
|
+
export declare class SlashCommandCheckFailed extends Error {
|
|
10
|
+
msg: CommandInteraction;
|
|
11
|
+
command: SlashCommand;
|
|
12
|
+
constructor(msg: CommandInteraction, command: SlashCommand);
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SlashCommandCheckFailed = exports.CommandCheckFailed = void 0;
|
|
4
|
+
class CommandCheckFailed extends Error {
|
|
5
|
+
constructor(msg, command) {
|
|
6
|
+
super();
|
|
7
|
+
this.msg = msg;
|
|
8
|
+
this.command = command;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.CommandCheckFailed = CommandCheckFailed;
|
|
12
|
+
class SlashCommandCheckFailed extends Error {
|
|
13
|
+
constructor(msg, command) {
|
|
14
|
+
super();
|
|
15
|
+
this.msg = msg;
|
|
16
|
+
this.command = command;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.SlashCommandCheckFailed = SlashCommandCheckFailed;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GuildMember, Permissions } from 'discord.js';
|
|
2
|
+
export declare class UserPermissionRequired extends Error {
|
|
3
|
+
user: GuildMember;
|
|
4
|
+
permissions: Permissions;
|
|
5
|
+
constructor(user: GuildMember, permissions: Permissions);
|
|
6
|
+
}
|
|
7
|
+
export declare class ClientPermissionRequired extends Error {
|
|
8
|
+
permissions: Permissions;
|
|
9
|
+
constructor(permissions: Permissions);
|
|
10
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClientPermissionRequired = exports.UserPermissionRequired = void 0;
|
|
4
|
+
class UserPermissionRequired extends Error {
|
|
5
|
+
constructor(user, permissions) {
|
|
6
|
+
super();
|
|
7
|
+
this.user = user;
|
|
8
|
+
this.permissions = permissions;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.UserPermissionRequired = UserPermissionRequired;
|
|
12
|
+
class ClientPermissionRequired extends Error {
|
|
13
|
+
constructor(permissions) {
|
|
14
|
+
super();
|
|
15
|
+
this.permissions = permissions;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.ClientPermissionRequired = ClientPermissionRequired;
|
package/dist/error/index.d.ts
CHANGED
package/dist/error/index.js
CHANGED
|
@@ -14,3 +14,5 @@ __exportStar(require("./InvalidTargetError"), exports);
|
|
|
14
14
|
__exportStar(require("./ModuleError"), exports);
|
|
15
15
|
__exportStar(require("./ArgumentNotProvided"), exports);
|
|
16
16
|
__exportStar(require("./ArgumentConverterNotFound"), exports);
|
|
17
|
+
__exportStar(require("./CommandCheckFailed"), exports);
|
|
18
|
+
__exportStar(require("./PermissionRequired"), exports);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
+
import './typings';
|
|
2
3
|
export * from './interface';
|
|
3
4
|
export * from './structures';
|
|
4
5
|
export * from './error';
|
|
5
6
|
export * from './command';
|
|
6
7
|
export * from './listener';
|
|
8
|
+
export * from './builtinModules/BuiltInModule';
|
|
9
|
+
export * from './slashCommand';
|
package/dist/index.js
CHANGED
|
@@ -11,8 +11,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
require("reflect-metadata");
|
|
14
|
+
require("./typings");
|
|
14
15
|
__exportStar(require("./interface"), exports);
|
|
15
16
|
__exportStar(require("./structures"), exports);
|
|
16
17
|
__exportStar(require("./error"), exports);
|
|
17
18
|
__exportStar(require("./command"), exports);
|
|
18
19
|
__exportStar(require("./listener"), exports);
|
|
20
|
+
__exportStar(require("./builtinModules/BuiltInModule"), exports);
|
|
21
|
+
__exportStar(require("./slashCommand"), exports);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SlashCommandBuilder } from '@discordjs/builders';
|
|
2
|
+
import { Module } from '../structures';
|
|
3
|
+
import { Snowflake } from 'discord.js';
|
|
4
|
+
import { SlashCheckFunction } from '../command';
|
|
5
|
+
export declare type SlashArgument = {
|
|
6
|
+
type: any;
|
|
7
|
+
name?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare class SlashCommand {
|
|
10
|
+
commandBuilder: SlashCommandBuilder | Omit<SlashCommandBuilder, 'addSubcommand' | 'addSubcommandGroup'>;
|
|
11
|
+
private run;
|
|
12
|
+
module: Module;
|
|
13
|
+
params: SlashArgument[];
|
|
14
|
+
guild: Snowflake | Snowflake[] | undefined;
|
|
15
|
+
private key;
|
|
16
|
+
get checks(): SlashCheckFunction[];
|
|
17
|
+
execute(module: Module, args: any[]): any;
|
|
18
|
+
constructor(commandBuilder: SlashCommandBuilder | Omit<SlashCommandBuilder, 'addSubcommand' | 'addSubcommandGroup'>, run: Function, module: Module, params: SlashArgument[], guild: Snowflake | Snowflake[] | undefined, key: string | symbol);
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SlashCommand = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
class SlashCommand {
|
|
6
|
+
constructor(commandBuilder, run, module, params, guild, key) {
|
|
7
|
+
this.commandBuilder = commandBuilder;
|
|
8
|
+
this.run = run;
|
|
9
|
+
this.module = module;
|
|
10
|
+
this.params = params;
|
|
11
|
+
this.guild = guild;
|
|
12
|
+
this.key = key;
|
|
13
|
+
}
|
|
14
|
+
get checks() {
|
|
15
|
+
return Reflect.getMetadata(constants_1.KSlashCommandChecks, this.module, this.key) || [];
|
|
16
|
+
}
|
|
17
|
+
execute(module, args) {
|
|
18
|
+
return this.run.apply(module, args);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.SlashCommand = SlashCommand;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Snowflake } from 'discord.js';
|
|
2
|
+
import { SlashCommandBuilder } from '@discordjs/builders';
|
|
3
|
+
declare type SlashOptions = {
|
|
4
|
+
guild: Snowflake | Snowflake[];
|
|
5
|
+
};
|
|
6
|
+
export declare const slashCommand: (opt: Partial<SlashOptions> & {
|
|
7
|
+
command: SlashCommandBuilder | Omit<SlashCommandBuilder, 'addSubcommand' | 'addSubcommandGroup'>;
|
|
8
|
+
}) => (target: Object, propertyKey: string) => void;
|
|
9
|
+
export declare const option: (key: string) => ParameterDecorator;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.option = exports.slashCommand = void 0;
|
|
4
|
+
const discord_js_1 = require("discord.js");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const constants_1 = require("../constants");
|
|
7
|
+
const SlashCommand_1 = require("./SlashCommand");
|
|
8
|
+
const slashCommand = (opt) => {
|
|
9
|
+
return (target, propertyKey) => {
|
|
10
|
+
utils_1.checkTarget(target);
|
|
11
|
+
let properties = Reflect.getMetadata(constants_1.KSlashCommands, target);
|
|
12
|
+
const params = Reflect.getMetadata('design:paramtypes', target, propertyKey);
|
|
13
|
+
const options = Reflect.getMetadata(constants_1.KSlashCommandOptions, target, propertyKey) || new discord_js_1.Collection();
|
|
14
|
+
const command = new SlashCommand_1.SlashCommand(opt.command, Reflect.get(target, propertyKey), target, params.map((x, i) => ({
|
|
15
|
+
type: x,
|
|
16
|
+
name: options.get(i),
|
|
17
|
+
})), opt.guild, propertyKey);
|
|
18
|
+
if (properties) {
|
|
19
|
+
properties.push(command);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
properties = [command];
|
|
23
|
+
Reflect.defineMetadata(constants_1.KSlashCommands, properties, target);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
exports.slashCommand = slashCommand;
|
|
28
|
+
const option = (key) => (target, propertyKey, parameterIndex) => {
|
|
29
|
+
utils_1.checkTarget(target);
|
|
30
|
+
let properties = Reflect.getMetadata(constants_1.KSlashCommandOptions, target, propertyKey);
|
|
31
|
+
if (!properties) {
|
|
32
|
+
properties = new discord_js_1.Collection();
|
|
33
|
+
Reflect.defineMetadata(constants_1.KSlashCommandOptions, properties, target, propertyKey);
|
|
34
|
+
}
|
|
35
|
+
properties.set(parameterIndex, key);
|
|
36
|
+
};
|
|
37
|
+
exports.option = option;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./decorator"), exports);
|
|
14
|
+
__exportStar(require("./SlashCommand"), exports);
|
|
@@ -1,25 +1,36 @@
|
|
|
1
1
|
import { Registry } from './Registry';
|
|
2
|
-
import { Client } from 'discord.js';
|
|
2
|
+
import { Client, Snowflake } from 'discord.js';
|
|
3
|
+
import { CoolDownAdapter } from '../command';
|
|
4
|
+
import { REST } from '@discordjs/rest';
|
|
3
5
|
export interface CommandOptions {
|
|
4
6
|
prefix: string | ((msg: any) => string | Promise<string | string[]> | string[]) | string[];
|
|
5
7
|
}
|
|
8
|
+
export interface SlashCommandOptions {
|
|
9
|
+
guild?: Snowflake | Snowflake[];
|
|
10
|
+
autoSync: boolean;
|
|
11
|
+
}
|
|
6
12
|
export interface CommandClientOptions {
|
|
7
13
|
command: CommandOptions;
|
|
8
|
-
owners: 'auto' |
|
|
14
|
+
owners: 'auto' | Snowflake[];
|
|
15
|
+
slashCommands: SlashCommandOptions;
|
|
9
16
|
}
|
|
10
17
|
export interface CommandClientOptionsParam {
|
|
11
18
|
command: Partial<CommandOptions>;
|
|
12
19
|
owners: 'auto' | string[];
|
|
20
|
+
slashCommands: Partial<SlashCommandOptions>;
|
|
13
21
|
}
|
|
14
22
|
export declare class CommandClient {
|
|
15
23
|
options: CommandClientOptions;
|
|
16
24
|
owners: string[];
|
|
17
25
|
registry: Registry;
|
|
18
26
|
client: Client;
|
|
27
|
+
coolDownAdapter: CoolDownAdapter;
|
|
28
|
+
rest: REST;
|
|
19
29
|
private _isReady;
|
|
20
30
|
private fetchOwners;
|
|
21
31
|
ready(): Promise<void>;
|
|
22
|
-
constructor({ client, ...options }: Partial<CommandClientOptionsParam> & {
|
|
32
|
+
constructor({ client, coolDownAdapter, ...options }: Partial<CommandClientOptionsParam> & {
|
|
23
33
|
client: Client;
|
|
34
|
+
coolDownAdapter?: CoolDownAdapter;
|
|
24
35
|
});
|
|
25
36
|
}
|
|
@@ -28,42 +28,57 @@ const lodash_1 = __importDefault(require("lodash"));
|
|
|
28
28
|
const Registry_1 = require("./Registry");
|
|
29
29
|
const discord_js_1 = require("discord.js");
|
|
30
30
|
const builtinModules_1 = require("../builtinModules");
|
|
31
|
+
const command_1 = require("../command");
|
|
32
|
+
const rest_1 = require("@discordjs/rest");
|
|
31
33
|
class CommandClient {
|
|
32
34
|
constructor(_a) {
|
|
33
|
-
var { client } = _a, options = __rest(_a, ["client"]);
|
|
35
|
+
var { client, coolDownAdapter } = _a, options = __rest(_a, ["client", "coolDownAdapter"]);
|
|
34
36
|
this.owners = [];
|
|
35
37
|
this.registry = new Registry_1.Registry(this);
|
|
38
|
+
this.rest = new rest_1.REST({
|
|
39
|
+
version: '9',
|
|
40
|
+
});
|
|
36
41
|
this._isReady = false;
|
|
37
42
|
this.client = client;
|
|
43
|
+
this.coolDownAdapter = coolDownAdapter || new command_1.DefaultCoolDownAdapter();
|
|
38
44
|
this.options = lodash_1.default.merge(options, {
|
|
39
45
|
command: {
|
|
40
46
|
prefix: '!',
|
|
41
47
|
},
|
|
42
48
|
owners: 'auto',
|
|
49
|
+
slashCommands: {
|
|
50
|
+
autoSync: true,
|
|
51
|
+
},
|
|
43
52
|
});
|
|
44
|
-
this.client.once('ready', this.ready);
|
|
53
|
+
this.client.once('ready', () => this.ready());
|
|
45
54
|
this.registry.registerModule(new builtinModules_1.CommandHandler(this.registry));
|
|
46
|
-
this.registry.registerModule(new builtinModules_1.BuiltinCommandConverters());
|
|
55
|
+
this.registry.registerModule(new builtinModules_1.BuiltinCommandConverters(this));
|
|
56
|
+
this.registry.registerModule(new builtinModules_1.BuiltinSlashCommandConverters(this));
|
|
47
57
|
}
|
|
48
58
|
fetchOwners() {
|
|
49
|
-
var _a;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
var _a, _b;
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
yield ((_a = this.client.application) === null || _a === void 0 ? void 0 : _a.fetch());
|
|
62
|
+
const o = (_b = this.client.application) === null || _b === void 0 ? void 0 : _b.owner;
|
|
63
|
+
if (!o)
|
|
64
|
+
return [];
|
|
65
|
+
if (o instanceof discord_js_1.User)
|
|
66
|
+
return [o.id];
|
|
67
|
+
else
|
|
68
|
+
return o.members.map((x) => x.id);
|
|
69
|
+
});
|
|
57
70
|
}
|
|
58
71
|
ready() {
|
|
59
72
|
return __awaiter(this, void 0, void 0, function* () {
|
|
60
73
|
if (this._isReady)
|
|
61
74
|
return;
|
|
75
|
+
this.rest.setToken(this.client.token);
|
|
62
76
|
this._isReady = true;
|
|
63
77
|
if (this.options.owners === 'auto') {
|
|
64
|
-
const owners = this.fetchOwners();
|
|
78
|
+
const owners = yield this.fetchOwners();
|
|
65
79
|
this.owners.push(...owners);
|
|
66
80
|
}
|
|
81
|
+
yield this.registry.syncCommands();
|
|
67
82
|
});
|
|
68
83
|
}
|
|
69
84
|
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { Command } from '../command';
|
|
2
2
|
import { Listener } from '../listener';
|
|
3
|
-
import { ArgumentConverter } from '../command';
|
|
3
|
+
import { ArgumentConverter, SlashArgumentConverter } from '../command';
|
|
4
|
+
import { SlashCommand } from '../slashCommand';
|
|
4
5
|
export declare abstract class Module {
|
|
5
6
|
get commands(): Command[];
|
|
6
7
|
get listeners(): Listener[];
|
|
7
8
|
get argumentConverters(): ArgumentConverter[];
|
|
9
|
+
get slashArgumentConverters(): SlashArgumentConverter[];
|
|
10
|
+
get slashCommands(): SlashCommand[];
|
|
11
|
+
get path(): string | undefined;
|
|
8
12
|
load(): void;
|
|
9
13
|
unload(): void;
|
|
10
14
|
beforeReload(): void;
|