trivious 1.3.17 → 1.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/client/trivious.client.cjs +90 -0
- package/dist/core/client/trivious.client.cjs.map +1 -0
- package/dist/core/client/trivious.client.d.cts +3 -0
- package/dist/core/client/trivious.client.d.ts +3 -0
- package/dist/core/client/trivious.client.js +88 -0
- package/dist/core/client/trivious.client.js.map +1 -0
- package/dist/core/commands/command.base.cjs +224 -0
- package/dist/core/commands/command.base.cjs.map +1 -0
- package/dist/core/commands/command.base.d.cts +3 -0
- package/dist/core/commands/command.base.d.ts +3 -0
- package/dist/core/commands/command.base.js +214 -0
- package/dist/core/commands/command.base.js.map +1 -0
- package/dist/core/commands/contextcommand.base.cjs +98 -0
- package/dist/core/commands/contextcommand.base.cjs.map +1 -0
- package/dist/core/commands/contextcommand.base.d.cts +3 -0
- package/dist/core/commands/contextcommand.base.d.ts +3 -0
- package/dist/core/commands/contextcommand.base.js +93 -0
- package/dist/core/commands/contextcommand.base.js.map +1 -0
- package/dist/core/commands/subcommand.base.cjs +96 -0
- package/dist/core/commands/subcommand.base.cjs.map +1 -0
- package/dist/core/commands/subcommand.base.d.cts +3 -0
- package/dist/core/commands/subcommand.base.d.ts +3 -0
- package/dist/core/commands/subcommand.base.js +91 -0
- package/dist/core/commands/subcommand.base.js.map +1 -0
- package/dist/core/components/component.base.cjs +111 -0
- package/dist/core/components/component.base.cjs.map +1 -0
- package/dist/core/components/component.base.d.cts +3 -0
- package/dist/core/components/component.base.d.ts +3 -0
- package/dist/core/components/component.base.js +106 -0
- package/dist/core/components/component.base.js.map +1 -0
- package/dist/core/events/interactionCreate.cjs +68 -0
- package/dist/core/events/interactionCreate.cjs.map +1 -0
- package/dist/core/events/interactionCreate.d.cts +10 -0
- package/dist/core/events/interactionCreate.d.ts +10 -0
- package/dist/core/events/interactionCreate.js +66 -0
- package/dist/core/events/interactionCreate.js.map +1 -0
- package/dist/core/registry/command.registry.cjs +56 -0
- package/dist/core/registry/command.registry.cjs.map +1 -0
- package/dist/core/registry/command.registry.d.cts +3 -0
- package/dist/core/registry/command.registry.d.ts +3 -0
- package/dist/core/registry/command.registry.js +54 -0
- package/dist/core/registry/command.registry.js.map +1 -0
- package/dist/core/registry/component.registry.cjs +42 -0
- package/dist/core/registry/component.registry.cjs.map +1 -0
- package/dist/core/registry/component.registry.d.cts +3 -0
- package/dist/core/registry/component.registry.d.ts +3 -0
- package/dist/core/registry/component.registry.js +40 -0
- package/dist/core/registry/component.registry.js.map +1 -0
- package/dist/core/registry/event.registry.cjs +57 -0
- package/dist/core/registry/event.registry.cjs.map +1 -0
- package/dist/core/registry/event.registry.d.cts +3 -0
- package/dist/core/registry/event.registry.d.ts +3 -0
- package/dist/core/registry/event.registry.js +51 -0
- package/dist/core/registry/event.registry.js.map +1 -0
- package/dist/core/registry/index.cjs +49 -0
- package/dist/core/registry/index.cjs.map +1 -0
- package/dist/core/registry/index.d.cts +19 -0
- package/dist/core/registry/index.d.ts +19 -0
- package/dist/core/registry/index.js +39 -0
- package/dist/core/registry/index.js.map +1 -0
- package/dist/core/registry/module.registry.cjs +57 -0
- package/dist/core/registry/module.registry.cjs.map +1 -0
- package/dist/core/registry/module.registry.d.cts +3 -0
- package/dist/core/registry/module.registry.d.ts +3 -0
- package/dist/core/registry/module.registry.js +55 -0
- package/dist/core/registry/module.registry.js.map +1 -0
- package/dist/index-BCF4f686.d.cts +927 -0
- package/dist/index-uczj1Waw.d.ts +927 -0
- package/dist/index.cjs +67 -1446
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -974
- package/dist/index.d.ts +2 -974
- package/dist/index.js +10 -1436
- package/dist/index.js.map +1 -1
- package/dist/shared/typings/client.cjs +4 -0
- package/dist/shared/typings/client.cjs.map +1 -0
- package/dist/shared/typings/client.d.cts +3 -0
- package/dist/shared/typings/client.d.ts +3 -0
- package/dist/shared/typings/client.js +3 -0
- package/dist/shared/typings/client.js.map +1 -0
- package/dist/shared/typings/commands.cjs +4 -0
- package/dist/shared/typings/commands.cjs.map +1 -0
- package/dist/shared/typings/commands.d.cts +3 -0
- package/dist/shared/typings/commands.d.ts +3 -0
- package/dist/shared/typings/commands.js +3 -0
- package/dist/shared/typings/commands.js.map +1 -0
- package/dist/shared/typings/components.cjs +22 -0
- package/dist/shared/typings/components.cjs.map +1 -0
- package/dist/shared/typings/components.d.cts +3 -0
- package/dist/shared/typings/components.d.ts +3 -0
- package/dist/shared/typings/components.js +19 -0
- package/dist/shared/typings/components.js.map +1 -0
- package/dist/shared/typings/events.cjs +4 -0
- package/dist/shared/typings/events.cjs.map +1 -0
- package/dist/shared/typings/events.d.cts +3 -0
- package/dist/shared/typings/events.d.ts +3 -0
- package/dist/shared/typings/events.js +3 -0
- package/dist/shared/typings/events.js.map +1 -0
- package/dist/shared/typings/index.cjs +56 -0
- package/dist/shared/typings/index.cjs.map +1 -0
- package/dist/shared/typings/index.d.cts +3 -0
- package/dist/shared/typings/index.d.ts +3 -0
- package/dist/shared/typings/index.js +9 -0
- package/dist/shared/typings/index.js.map +1 -0
- package/dist/shared/typings/module.cjs +4 -0
- package/dist/shared/typings/module.cjs.map +1 -0
- package/dist/shared/typings/module.d.cts +3 -0
- package/dist/shared/typings/module.d.ts +3 -0
- package/dist/shared/typings/module.js +3 -0
- package/dist/shared/typings/module.js.map +1 -0
- package/dist/shared/typings/permissions.cjs +22 -0
- package/dist/shared/typings/permissions.cjs.map +1 -0
- package/dist/shared/typings/permissions.d.cts +3 -0
- package/dist/shared/typings/permissions.d.ts +3 -0
- package/dist/shared/typings/permissions.js +19 -0
- package/dist/shared/typings/permissions.js.map +1 -0
- package/dist/shared/typings/registry.cjs +63 -0
- package/dist/shared/typings/registry.cjs.map +1 -0
- package/dist/shared/typings/registry.d.cts +51 -0
- package/dist/shared/typings/registry.d.ts +51 -0
- package/dist/shared/typings/registry.js +61 -0
- package/dist/shared/typings/registry.js.map +1 -0
- package/dist/shared/utility/functions.cjs +81 -0
- package/dist/shared/utility/functions.cjs.map +1 -0
- package/dist/shared/utility/functions.d.cts +56 -0
- package/dist/shared/utility/functions.d.ts +56 -0
- package/dist/shared/utility/functions.js +74 -0
- package/dist/shared/utility/functions.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { PermissionLevel } from 'src/shared/typings/index.js';
|
|
2
|
+
import { hasPermission } from 'src/shared/utility/functions.js';
|
|
3
|
+
|
|
4
|
+
class ComponentBuilder {
|
|
5
|
+
_customId = "";
|
|
6
|
+
_permission = PermissionLevel.USER;
|
|
7
|
+
_ephemeralReply = false;
|
|
8
|
+
/**
|
|
9
|
+
* Set the customId for the component.
|
|
10
|
+
*
|
|
11
|
+
* @public
|
|
12
|
+
* @param {{
|
|
13
|
+
* type: ComponentType;
|
|
14
|
+
* data: string;
|
|
15
|
+
* tags?: ComponentCustomIdTag[];
|
|
16
|
+
* }} options
|
|
17
|
+
* @returns {this}
|
|
18
|
+
*/
|
|
19
|
+
setCustomId(options) {
|
|
20
|
+
const { data, type, tags } = options;
|
|
21
|
+
this._customId = `${type}:${data}${tags ? `.${tags.join(".")}` : ""}`;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Set the permission required to use the component.
|
|
26
|
+
*
|
|
27
|
+
* @public
|
|
28
|
+
* @param {PermissionLevel} permission
|
|
29
|
+
* @returns {this}
|
|
30
|
+
*/
|
|
31
|
+
setPermission(permission) {
|
|
32
|
+
this._permission = permission;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Set the interaction as ephemeral.
|
|
37
|
+
*
|
|
38
|
+
* @public
|
|
39
|
+
* @returns {this}
|
|
40
|
+
*/
|
|
41
|
+
setEphemeralReply() {
|
|
42
|
+
this._ephemeralReply = true;
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Builder the builder.
|
|
47
|
+
*
|
|
48
|
+
* @public
|
|
49
|
+
* @returns {{ metadata: ComponentMetadata; }}
|
|
50
|
+
*/
|
|
51
|
+
build() {
|
|
52
|
+
return {
|
|
53
|
+
metadata: {
|
|
54
|
+
customId: this._customId,
|
|
55
|
+
permission: this._permission,
|
|
56
|
+
ephemeralReply: this._ephemeralReply
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
class Component {
|
|
62
|
+
/**
|
|
63
|
+
* Validate permissions for a user/member in a guild.
|
|
64
|
+
*
|
|
65
|
+
* @async
|
|
66
|
+
* @param {ComponentInteraction} interaction
|
|
67
|
+
* @param {PermissionLevel} permission
|
|
68
|
+
* @param {boolean} [doReply=true] Defaults to `true`
|
|
69
|
+
* @returns {unknown}
|
|
70
|
+
*/
|
|
71
|
+
async validateGuildPermission(client, interaction, permission, doReply = true) {
|
|
72
|
+
if (interaction.guild) {
|
|
73
|
+
const member = interaction.member;
|
|
74
|
+
const memberHasPermission = hasPermission(client, { permission, member });
|
|
75
|
+
if (!memberHasPermission) {
|
|
76
|
+
if (doReply)
|
|
77
|
+
await this.reply(interaction, {
|
|
78
|
+
content: `You do not have permission to run this command, required permission: \`${PermissionLevel[permission]}\``
|
|
79
|
+
});
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Reply to the interaction respecting command metadata and if the interaction has already been replied to.
|
|
87
|
+
*
|
|
88
|
+
* @async
|
|
89
|
+
* @param {ComponentInteraction} interaction
|
|
90
|
+
* @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options
|
|
91
|
+
* @returns {*}
|
|
92
|
+
*/
|
|
93
|
+
async reply(interaction, options) {
|
|
94
|
+
if (interaction.replied) {
|
|
95
|
+
await interaction.editReply(options);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const newOptions = { ...options };
|
|
99
|
+
if (this.metadata.ephemeralReply) newOptions.flags = ["Ephemeral"];
|
|
100
|
+
await interaction.reply(newOptions);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export { ComponentBuilder, Component as default };
|
|
105
|
+
//# sourceMappingURL=component.base.js.map
|
|
106
|
+
//# sourceMappingURL=component.base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/components/component.base.ts"],"names":[],"mappings":";;;AAuBO,MAAM,gBAAA,CAAiB;AAAA,EACrB,SAAA,GAAY,EAAA;AAAA,EACZ,cAAc,eAAA,CAAgB,IAAA;AAAA,EAC9B,eAAA,GAAkB,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAanB,YAAY,OAAA,EAIV;AACR,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA;AAC7B,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,IAAA,GAAO,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,KAAK,EAAE,CAAA,CAAA;AACnE,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,cAAc,UAAA,EAAmC;AACvD,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,iBAAA,GAA0B;AAChC,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,KAAA,GAAQ;AACd,IAAA,OAAO;AAAA,MACN,QAAA,EAAU;AAAA,QACT,UAAU,IAAA,CAAK,SAAA;AAAA,QACf,YAAY,IAAA,CAAK,WAAA;AAAA,QACjB,gBAAgB,IAAA,CAAK;AAAA;AACtB,KACD;AAAA,EACD;AACD;AAUA,MAAO,SAAA,CAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBvC,MAAM,uBAAA,CACL,MAAA,EACA,WAAA,EACA,UAAA,EACA,UAAmB,IAAA,EAClB;AACD,IAAA,IAAI,YAAY,KAAA,EAAO;AACtB,MAAA,MAAM,SAAS,WAAA,CAAY,MAAA;AAC3B,MAAA,MAAM,sBAAsB,aAAA,CAAc,MAAA,EAAQ,EAAE,UAAA,EAAY,QAAQ,CAAA;AAExE,MAAA,IAAI,CAAC,mBAAA,EAAqB;AACzB,QAAA,IAAI,OAAA;AACH,UAAA,MAAM,IAAA,CAAK,MAAM,WAAA,EAAa;AAAA,YAC7B,OAAA,EAAS,CAAA,uEAAA,EAA0E,eAAA,CAAgB,UAAU,CAAC,CAAA,EAAA;AAAA,WAC9G,CAAA;AACF,QAAA,OAAO,KAAA;AAAA,MACR;AAAA,IACD;AAEA,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,KAAA,CACL,WAAA,EACA,OAAA,EACC;AACD,IAAA,IAAI,YAAY,OAAA,EAAS;AACxB,MAAA,MAAM,WAAA,CAAY,UAAU,OAAsC,CAAA;AAClE,MAAA;AAAA,IACD;AAEA,IAAA,MAAM,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAChC,IAAA,IAAI,KAAK,QAAA,CAAS,cAAA,EAAgB,UAAA,CAAW,KAAA,GAAQ,CAAC,WAAW,CAAA;AAEjE,IAAA,MAAM,WAAA,CAAY,MAAM,UAAU,CAAA;AAAA,EACnC;AACD","file":"component.base.js","sourcesContent":["import {\n\tComponentType,\n\tGuildMember,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n} from \"discord.js\";\nimport {\n\tComponentCustomIdTag,\n\tComponentInteraction,\n\tComponentMetadata,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\n\n/**\n * Base ComponentBuilder.\n *\n * @export\n * @class ComponentBuilder\n * @typedef {ComponentBuilder}\n */\nexport class ComponentBuilder {\n\tprivate _customId = \"\";\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the customId for the component.\n\t *\n\t * @public\n\t * @param {{\n\t * \t\ttype: ComponentType;\n\t * \t\tdata: string;\n\t * \t\ttags?: ComponentCustomIdTag[];\n\t * \t}} options\n\t * @returns {this}\n\t */\n\tpublic setCustomId(options: {\n\t\ttype: ComponentType;\n\t\tdata: string;\n\t\ttags?: ComponentCustomIdTag[];\n\t}): this {\n\t\tconst { data, type, tags } = options;\n\t\tthis._customId = `${type}:${data}${tags ? `.${tags.join(\".\")}` : \"\"}`;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission required to use the component.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tpublic setPermission(permission: PermissionLevel): this {\n\t\tthis._permission = permission;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the interaction as ephemeral.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setEphemeralReply(): this {\n\t\tthis._ephemeralReply = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Builder the builder.\n\t *\n\t * @public\n\t * @returns {{ metadata: ComponentMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tmetadata: {\n\t\t\t\tcustomId: this._customId,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies ComponentMetadata,\n\t\t};\n\t}\n}\n\n/**\n * Base Component.\n *\n * @export\n * @abstract\n * @class Component\n * @typedef {Component}\n */\nexport default abstract class Component {\n\tabstract metadata: ComponentMetadata;\n\t/**\n\t * Execute the component.\n\t *\n\t * @abstract\n\t * @type {(client: TriviousClient, interaction: ComponentInteraction) => Promise<void>}\n\t */\n\tabstract execute: (client: TriviousClient, interaction: ComponentInteraction) => Promise<void>;\n\n\t/**\n\t * Validate permissions for a user/member in a guild.\n\t *\n\t * @async\n\t * @param {ComponentInteraction} interaction\n\t * @param {PermissionLevel} permission\n\t * @param {boolean} [doReply=true] Defaults to `true`\n\t * @returns {unknown}\n\t */\n\tasync validateGuildPermission(\n\t\tclient: TriviousClient,\n\t\tinteraction: ComponentInteraction,\n\t\tpermission: PermissionLevel,\n\t\tdoReply: boolean = true\n\t) {\n\t\tif (interaction.guild) {\n\t\t\tconst member = interaction.member as GuildMember;\n\t\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\n\t\t\tif (!memberHasPermission) {\n\t\t\t\tif (doReply)\n\t\t\t\t\tawait this.reply(interaction, {\n\t\t\t\t\t\tcontent: `You do not have permission to run this command, required permission: \\`${PermissionLevel[permission]}\\``,\n\t\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Reply to the interaction respecting command metadata and if the interaction has already been replied to.\n\t *\n\t * @async\n\t * @param {ComponentInteraction} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tasync reply(\n\t\tinteraction: ComponentInteraction,\n\t\toptions: MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions\n\t) {\n\t\tif (interaction.replied) {\n\t\t\tawait interaction.editReply(options as InteractionEditReplyOptions);\n\t\t\treturn;\n\t\t}\n\n\t\tconst newOptions = { ...options } as InteractionReplyOptions;\n\t\tif (this.metadata.ephemeralReply) newOptions.flags = [\"Ephemeral\"];\n\n\t\tawait interaction.reply(newOptions);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var discord_js = require('discord.js');
|
|
4
|
+
var components_js = require('src/shared/typings/components.js');
|
|
5
|
+
|
|
6
|
+
var interactionCreate_default = {
|
|
7
|
+
name: "interactionCreate",
|
|
8
|
+
execute: async (client, interaction) => {
|
|
9
|
+
if (interaction.isChatInputCommand() || interaction.isContextMenuCommand()) {
|
|
10
|
+
const { commandName } = interaction;
|
|
11
|
+
const registeredCommands = client.registries.commands.get();
|
|
12
|
+
const command = registeredCommands.get(commandName);
|
|
13
|
+
if (!command) {
|
|
14
|
+
await interaction.reply({
|
|
15
|
+
content: `Command is outdated, inactive or does not have a handler!`,
|
|
16
|
+
flags: ["Ephemeral"]
|
|
17
|
+
});
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const requiredPermission = command.metadata.permission;
|
|
21
|
+
const hasPermission = await command.validateGuildPermission(
|
|
22
|
+
client,
|
|
23
|
+
interaction,
|
|
24
|
+
requiredPermission
|
|
25
|
+
);
|
|
26
|
+
if (!hasPermission) return;
|
|
27
|
+
if (!("execute" in command)) {
|
|
28
|
+
await command.reply(interaction, { content: "Command does not have a way to execute! Ensure the command is a SlashCommand or ContextMenuCommand!" });
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
await command.reply(interaction, { content: "Processing command..." });
|
|
32
|
+
if (interaction.isChatInputCommand() && command.isSlashCommand()) {
|
|
33
|
+
await command.execute(client, interaction);
|
|
34
|
+
} else if (interaction.isContextMenuCommand() && command.isContextMenuCommand()) {
|
|
35
|
+
await command.execute(client, interaction);
|
|
36
|
+
}
|
|
37
|
+
} else if (interaction.isMessageComponent() || interaction.isModalSubmit()) {
|
|
38
|
+
const { componentType, tags, data } = components_js.deconstructCustomId(interaction.customId);
|
|
39
|
+
if (componentType === components_js.ComponentType.Button && !(interaction instanceof discord_js.ButtonInteraction))
|
|
40
|
+
return;
|
|
41
|
+
if (componentType === components_js.ComponentType.Modal && !(interaction instanceof discord_js.ModalSubmitInteraction))
|
|
42
|
+
return;
|
|
43
|
+
if (tags.includes("awaited")) return;
|
|
44
|
+
const registeredComponents = client.registries.components.get();
|
|
45
|
+
const component = registeredComponents.get(data);
|
|
46
|
+
if (!component) {
|
|
47
|
+
await interaction.reply({
|
|
48
|
+
content: `Command is outdated, inactive or does not have a handler!`,
|
|
49
|
+
flags: ["Ephemeral"]
|
|
50
|
+
});
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const requiredPermission = component.metadata.permission;
|
|
54
|
+
const hasPermission = await component.validateGuildPermission(
|
|
55
|
+
client,
|
|
56
|
+
interaction,
|
|
57
|
+
requiredPermission
|
|
58
|
+
);
|
|
59
|
+
if (!hasPermission) return;
|
|
60
|
+
if (!interaction.isModalSubmit()) await interaction.deferUpdate();
|
|
61
|
+
await component.execute(client, interaction);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
module.exports = interactionCreate_default;
|
|
67
|
+
//# sourceMappingURL=interactionCreate.cjs.map
|
|
68
|
+
//# sourceMappingURL=interactionCreate.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/events/interactionCreate.ts"],"names":["deconstructCustomId","ComponentType","ButtonInteraction","ModalSubmitInteraction"],"mappings":"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","file":"interactionCreate.cjs","sourcesContent":["import { ButtonInteraction, ModalSubmitInteraction } from \"discord.js\";\nimport { ComponentType, deconstructCustomId } from \"src/shared/typings/components.js\";\nimport { Event } from \"src/shared/typings/events.js\";\nimport Command from \"../commands/command.base.js\";\n\nexport default {\n\tname: \"interactionCreate\",\n\texecute: async (client, interaction) => {\n\t\tif (interaction.isChatInputCommand() || interaction.isContextMenuCommand()) {\n\t\t\tconst { commandName } = interaction;\n\n\t\t\tconst registeredCommands = client.registries.commands.get();\n\t\t\tconst command = registeredCommands.get(commandName);\n\t\t\tif (!command) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = command.metadata.permission;\n\t\t\tconst hasPermission = await command.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!(\"execute\" in command)) {\n\t\t\t\tawait (command as Command).reply(interaction, { content: \"Command does not have a way to execute! Ensure the command is a SlashCommand or ContextMenuCommand!\" });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait command.reply(interaction, { content: \"Processing command...\" });\n\n\t\t\tif (interaction.isChatInputCommand() && command.isSlashCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t} else if (interaction.isContextMenuCommand() && command.isContextMenuCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t}\n\t\t} else if (interaction.isMessageComponent() || interaction.isModalSubmit()) {\n\t\t\tconst { componentType, tags, data } = deconstructCustomId(interaction.customId);\n\n\t\t\tif (componentType === ComponentType.Button && !(interaction instanceof ButtonInteraction))\n\t\t\t\treturn;\n\t\t\tif (componentType === ComponentType.Modal && !(interaction instanceof ModalSubmitInteraction))\n\t\t\t\treturn;\n\n\t\t\tif (tags.includes(\"awaited\")) return;\n\n\t\t\tconst registeredComponents = client.registries.components.get();\n\t\t\tconst component = registeredComponents.get(data);\n\t\t\tif (!component) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = component.metadata.permission;\n\t\t\tconst hasPermission = await component.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!interaction.isModalSubmit()) await interaction.deferUpdate();\n\t\t\tawait component.execute(client, interaction);\n\t\t}\n\t},\n} satisfies Event<\"interactionCreate\">;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as discord_js from 'discord.js';
|
|
2
|
+
import { T as TriviousClient } from '../../index-BCF4f686.cjs';
|
|
3
|
+
import '../../shared/typings/registry.cjs';
|
|
4
|
+
|
|
5
|
+
declare const _default: {
|
|
6
|
+
name: "interactionCreate";
|
|
7
|
+
execute: (client: TriviousClient, interaction: discord_js.Interaction<discord_js.CacheType>) => Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { _default as default };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as discord_js from 'discord.js';
|
|
2
|
+
import { T as TriviousClient } from '../../index-uczj1Waw.js';
|
|
3
|
+
import '../../shared/typings/registry.js';
|
|
4
|
+
|
|
5
|
+
declare const _default: {
|
|
6
|
+
name: "interactionCreate";
|
|
7
|
+
execute: (client: TriviousClient, interaction: discord_js.Interaction<discord_js.CacheType>) => Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { _default as default };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ButtonInteraction, ModalSubmitInteraction } from 'discord.js';
|
|
2
|
+
import { deconstructCustomId, ComponentType } from 'src/shared/typings/components.js';
|
|
3
|
+
|
|
4
|
+
var interactionCreate_default = {
|
|
5
|
+
name: "interactionCreate",
|
|
6
|
+
execute: async (client, interaction) => {
|
|
7
|
+
if (interaction.isChatInputCommand() || interaction.isContextMenuCommand()) {
|
|
8
|
+
const { commandName } = interaction;
|
|
9
|
+
const registeredCommands = client.registries.commands.get();
|
|
10
|
+
const command = registeredCommands.get(commandName);
|
|
11
|
+
if (!command) {
|
|
12
|
+
await interaction.reply({
|
|
13
|
+
content: `Command is outdated, inactive or does not have a handler!`,
|
|
14
|
+
flags: ["Ephemeral"]
|
|
15
|
+
});
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const requiredPermission = command.metadata.permission;
|
|
19
|
+
const hasPermission = await command.validateGuildPermission(
|
|
20
|
+
client,
|
|
21
|
+
interaction,
|
|
22
|
+
requiredPermission
|
|
23
|
+
);
|
|
24
|
+
if (!hasPermission) return;
|
|
25
|
+
if (!("execute" in command)) {
|
|
26
|
+
await command.reply(interaction, { content: "Command does not have a way to execute! Ensure the command is a SlashCommand or ContextMenuCommand!" });
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
await command.reply(interaction, { content: "Processing command..." });
|
|
30
|
+
if (interaction.isChatInputCommand() && command.isSlashCommand()) {
|
|
31
|
+
await command.execute(client, interaction);
|
|
32
|
+
} else if (interaction.isContextMenuCommand() && command.isContextMenuCommand()) {
|
|
33
|
+
await command.execute(client, interaction);
|
|
34
|
+
}
|
|
35
|
+
} else if (interaction.isMessageComponent() || interaction.isModalSubmit()) {
|
|
36
|
+
const { componentType, tags, data } = deconstructCustomId(interaction.customId);
|
|
37
|
+
if (componentType === ComponentType.Button && !(interaction instanceof ButtonInteraction))
|
|
38
|
+
return;
|
|
39
|
+
if (componentType === ComponentType.Modal && !(interaction instanceof ModalSubmitInteraction))
|
|
40
|
+
return;
|
|
41
|
+
if (tags.includes("awaited")) return;
|
|
42
|
+
const registeredComponents = client.registries.components.get();
|
|
43
|
+
const component = registeredComponents.get(data);
|
|
44
|
+
if (!component) {
|
|
45
|
+
await interaction.reply({
|
|
46
|
+
content: `Command is outdated, inactive or does not have a handler!`,
|
|
47
|
+
flags: ["Ephemeral"]
|
|
48
|
+
});
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const requiredPermission = component.metadata.permission;
|
|
52
|
+
const hasPermission = await component.validateGuildPermission(
|
|
53
|
+
client,
|
|
54
|
+
interaction,
|
|
55
|
+
requiredPermission
|
|
56
|
+
);
|
|
57
|
+
if (!hasPermission) return;
|
|
58
|
+
if (!interaction.isModalSubmit()) await interaction.deferUpdate();
|
|
59
|
+
await component.execute(client, interaction);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export { interactionCreate_default as default };
|
|
65
|
+
//# sourceMappingURL=interactionCreate.js.map
|
|
66
|
+
//# sourceMappingURL=interactionCreate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/events/interactionCreate.ts"],"names":[],"mappings":";;;AAKA,IAAO,yBAAA,GAAQ;AAAA,EACd,IAAA,EAAM,mBAAA;AAAA,EACN,OAAA,EAAS,OAAO,MAAA,EAAQ,WAAA,KAAgB;AACvC,IAAA,IAAI,WAAA,CAAY,kBAAA,EAAmB,IAAK,WAAA,CAAY,sBAAqB,EAAG;AAC3E,MAAA,MAAM,EAAE,aAAY,GAAI,WAAA;AAExB,MAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,UAAA,CAAW,QAAA,CAAS,GAAA,EAAI;AAC1D,MAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,GAAA,CAAI,WAAW,CAAA;AAClD,MAAA,IAAI,CAAC,OAAA,EAAS;AACb,QAAA,MAAM,YAAY,KAAA,CAAM;AAAA,UACvB,OAAA,EAAS,CAAA,yDAAA,CAAA;AAAA,UACT,KAAA,EAAO,CAAC,WAAW;AAAA,SACnB,CAAA;AACD,QAAA;AAAA,MACD;AAEA,MAAA,MAAM,kBAAA,GAAqB,QAAQ,QAAA,CAAS,UAAA;AAC5C,MAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,uBAAA;AAAA,QACnC,MAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACD;AACA,MAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,MAAA,IAAI,EAAE,aAAa,OAAA,CAAA,EAAU;AAC5B,QAAA,MAAO,QAAoB,KAAA,CAAM,WAAA,EAAa,EAAE,OAAA,EAAS,uGAAuG,CAAA;AAChK,QAAA;AAAA,MACD;AAEA,MAAA,MAAM,QAAQ,KAAA,CAAM,WAAA,EAAa,EAAE,OAAA,EAAS,yBAAyB,CAAA;AAErE,MAAA,IAAI,WAAA,CAAY,kBAAA,EAAmB,IAAK,OAAA,CAAQ,gBAAe,EAAG;AACjE,QAAA,MAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,WAAW,CAAA;AAAA,MAC1C,WAAW,WAAA,CAAY,oBAAA,EAAqB,IAAK,OAAA,CAAQ,sBAAqB,EAAG;AAChF,QAAA,MAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,WAAW,CAAA;AAAA,MAC1C;AAAA,IACD,WAAW,WAAA,CAAY,kBAAA,EAAmB,IAAK,WAAA,CAAY,eAAc,EAAG;AAC3E,MAAA,MAAM,EAAE,aAAA,EAAe,IAAA,EAAM,MAAK,GAAI,mBAAA,CAAoB,YAAY,QAAQ,CAAA;AAE9E,MAAA,IAAI,aAAA,KAAkB,aAAA,CAAc,MAAA,IAAU,EAAE,WAAA,YAAuB,iBAAA,CAAA;AACtE,QAAA;AACD,MAAA,IAAI,aAAA,KAAkB,aAAA,CAAc,KAAA,IAAS,EAAE,WAAA,YAAuB,sBAAA,CAAA;AACrE,QAAA;AAED,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAE9B,MAAA,MAAM,oBAAA,GAAuB,MAAA,CAAO,UAAA,CAAW,UAAA,CAAW,GAAA,EAAI;AAC9D,MAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,GAAA,CAAI,IAAI,CAAA;AAC/C,MAAA,IAAI,CAAC,SAAA,EAAW;AACf,QAAA,MAAM,YAAY,KAAA,CAAM;AAAA,UACvB,OAAA,EAAS,CAAA,yDAAA,CAAA;AAAA,UACT,KAAA,EAAO,CAAC,WAAW;AAAA,SACnB,CAAA;AACD,QAAA;AAAA,MACD;AAEA,MAAA,MAAM,kBAAA,GAAqB,UAAU,QAAA,CAAS,UAAA;AAC9C,MAAA,MAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,uBAAA;AAAA,QACrC,MAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACD;AACA,MAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,MAAA,IAAI,CAAC,WAAA,CAAY,aAAA,EAAc,EAAG,MAAM,YAAY,WAAA,EAAY;AAChE,MAAA,MAAM,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAQ,WAAW,CAAA;AAAA,IAC5C;AAAA,EACD;AACD","file":"interactionCreate.js","sourcesContent":["import { ButtonInteraction, ModalSubmitInteraction } from \"discord.js\";\nimport { ComponentType, deconstructCustomId } from \"src/shared/typings/components.js\";\nimport { Event } from \"src/shared/typings/events.js\";\nimport Command from \"../commands/command.base.js\";\n\nexport default {\n\tname: \"interactionCreate\",\n\texecute: async (client, interaction) => {\n\t\tif (interaction.isChatInputCommand() || interaction.isContextMenuCommand()) {\n\t\t\tconst { commandName } = interaction;\n\n\t\t\tconst registeredCommands = client.registries.commands.get();\n\t\t\tconst command = registeredCommands.get(commandName);\n\t\t\tif (!command) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = command.metadata.permission;\n\t\t\tconst hasPermission = await command.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!(\"execute\" in command)) {\n\t\t\t\tawait (command as Command).reply(interaction, { content: \"Command does not have a way to execute! Ensure the command is a SlashCommand or ContextMenuCommand!\" });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait command.reply(interaction, { content: \"Processing command...\" });\n\n\t\t\tif (interaction.isChatInputCommand() && command.isSlashCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t} else if (interaction.isContextMenuCommand() && command.isContextMenuCommand()) {\n\t\t\t\tawait command.execute(client, interaction);\n\t\t\t}\n\t\t} else if (interaction.isMessageComponent() || interaction.isModalSubmit()) {\n\t\t\tconst { componentType, tags, data } = deconstructCustomId(interaction.customId);\n\n\t\t\tif (componentType === ComponentType.Button && !(interaction instanceof ButtonInteraction))\n\t\t\t\treturn;\n\t\t\tif (componentType === ComponentType.Modal && !(interaction instanceof ModalSubmitInteraction))\n\t\t\t\treturn;\n\n\t\t\tif (tags.includes(\"awaited\")) return;\n\n\t\t\tconst registeredComponents = client.registries.components.get();\n\t\t\tconst component = registeredComponents.get(data);\n\t\t\tif (!component) {\n\t\t\t\tawait interaction.reply({\n\t\t\t\t\tcontent: `Command is outdated, inactive or does not have a handler!`,\n\t\t\t\t\tflags: [\"Ephemeral\"],\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst requiredPermission = component.metadata.permission;\n\t\t\tconst hasPermission = await component.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\trequiredPermission\n\t\t\t);\n\t\t\tif (!hasPermission) return;\n\n\t\t\tif (!interaction.isModalSubmit()) await interaction.deferUpdate();\n\t\t\tawait component.execute(client, interaction);\n\t\t}\n\t},\n} satisfies Event<\"interactionCreate\">;\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var discord_js = require('discord.js');
|
|
4
|
+
var functions_js = require('src/shared/utility/functions.js');
|
|
5
|
+
var index_js = require('src/shared/typings/index.js');
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var node_path = require('node:path');
|
|
8
|
+
|
|
9
|
+
class CommandRegistry extends index_js.BaseRegistry {
|
|
10
|
+
items = new discord_js.Collection();
|
|
11
|
+
/**
|
|
12
|
+
* Load all commands and their subcommands
|
|
13
|
+
*
|
|
14
|
+
* @async
|
|
15
|
+
* @param {string} [directory=getCorePath({ coreDirectory: "commands" })]
|
|
16
|
+
* @returns {unknown}
|
|
17
|
+
*/
|
|
18
|
+
async load(directory = functions_js.getCorePath({ coreDirectory: "commands" })) {
|
|
19
|
+
if (!await functions_js.exists(directory)) {
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
const entries = await fs.promises.readdir(directory, { withFileTypes: true });
|
|
23
|
+
for (const entry of entries) {
|
|
24
|
+
const fullPath = node_path.join(directory, entry.name);
|
|
25
|
+
if (!entry.isDirectory()) continue;
|
|
26
|
+
const indexFile = node_path.join(fullPath, "index.ts");
|
|
27
|
+
const indexJs = node_path.join(fullPath, "index.js");
|
|
28
|
+
let commandFile = "";
|
|
29
|
+
if (await functions_js.exists(indexFile)) commandFile = indexFile;
|
|
30
|
+
else if (await functions_js.exists(indexJs)) commandFile = indexJs;
|
|
31
|
+
else continue;
|
|
32
|
+
const command = await this.importFile(commandFile);
|
|
33
|
+
if (!command) continue;
|
|
34
|
+
if (!command.metadata.active) continue;
|
|
35
|
+
if (command.isSlashCommand()) {
|
|
36
|
+
const subcommandFiles = (await fs.promises.readdir(fullPath)).filter(
|
|
37
|
+
(file) => (file.endsWith(".ts") || file.endsWith(".js")) && !file.startsWith("index.") && !file.endsWith(".d.ts")
|
|
38
|
+
);
|
|
39
|
+
for (const file of subcommandFiles) {
|
|
40
|
+
const subcommand = await this.importFile(node_path.join(fullPath, file));
|
|
41
|
+
if (!subcommand) continue;
|
|
42
|
+
if (!subcommand.data.name || !(subcommand.data instanceof discord_js.SlashCommandSubcommandBuilder))
|
|
43
|
+
continue;
|
|
44
|
+
command.data.addSubcommand(subcommand.data);
|
|
45
|
+
command.metadata.subcommands.set(subcommand.data.name, subcommand);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
this.items.set(command.data.name, command);
|
|
49
|
+
}
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
module.exports = CommandRegistry;
|
|
55
|
+
//# sourceMappingURL=command.registry.cjs.map
|
|
56
|
+
//# sourceMappingURL=command.registry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/registry/command.registry.ts"],"names":["BaseRegistry","Collection","getCorePath","exists","fs","join","SlashCommandSubcommandBuilder"],"mappings":";;;;;;;;AAgBA,MAAO,wBAAsCA,qBAAA,CAAyB;AAAA,EAC3D,KAAA,GAAQ,IAAIC,qBAAA,EAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrD,MAAM,KAAK,SAAA,GAAoBC,wBAAA,CAAY,EAAE,aAAA,EAAe,UAAA,EAAY,CAAA,EAAG;AAC1E,IAAA,IAAI,CAAE,MAAMC,mBAAA,CAAO,SAAS,CAAA,EAAI;AAC/B,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,MAAM,OAAA,GAAU,MAAMC,WAAA,CAAG,OAAA,CAAQ,WAAW,EAAE,aAAA,EAAe,MAAM,CAAA;AAEnE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC5B,MAAA,MAAM,QAAA,GAAWC,cAAA,CAAK,SAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAC3C,MAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAY,EAAG;AAE1B,MAAA,MAAM,SAAA,GAAYA,cAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AAC3C,MAAA,MAAM,OAAA,GAAUA,cAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AAEzC,MAAA,IAAI,WAAA,GAAc,EAAA;AAClB,MAAA,IAAI,MAAMF,mBAAA,CAAO,SAAS,CAAA,EAAG,WAAA,GAAc,SAAA;AAAA,WAAA,IAClC,MAAMA,mBAAA,CAAO,OAAO,CAAA,EAAG,WAAA,GAAc,OAAA;AAAA,WACzC;AAEL,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAuB,WAAW,CAAA;AAC7D,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,MAAA,EAAQ;AAE9B,MAAA,IAAI,OAAA,CAAQ,gBAAe,EAAG;AAC7B,QAAA,MAAM,eAAA,GAAA,CAAmB,MAAMC,WAAA,CAAG,OAAA,CAAQ,QAAQ,CAAA,EAAG,MAAA;AAAA,UACpD,WACE,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAK,KAAK,QAAA,CAAS,KAAK,CAAA,KAC5C,CAAC,KAAK,UAAA,CAAW,QAAQ,KACzB,CAAC,IAAA,CAAK,SAAS,OAAO;AAAA,SACxB;AAEA,QAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AACnC,UAAA,MAAM,aAAa,MAAM,IAAA,CAAK,WAAuBC,cAAA,CAAK,QAAA,EAAU,IAAI,CAAC,CAAA;AACzE,UAAA,IAAI,CAAC,UAAA,EAAY;AACjB,UAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,IAAA,IAAQ,EAAE,WAAW,IAAA,YAAgBC,wCAAA,CAAA;AACzD,YAAA;AAED,UAAA,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAc,UAAA,CAAW,IAAI,CAAA;AAC1C,UAAA,OAAA,CAAQ,SAAS,WAAA,CAAY,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,QAClE;AAAA,MACD;AAEA,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,IAAA;AAAA,EACR;AACD","file":"command.registry.cjs","sourcesContent":["import { Collection, SlashCommandSubcommandBuilder } from \"discord.js\";\nimport { exists, getCorePath } from \"src/shared/utility/functions.js\";\nimport { AnyCommand, BaseRegistry } from \"src/shared/typings/index.js\";\nimport { promises as fs } from \"fs\";\nimport { join } from \"node:path\";\n\nimport Subcommand from \"../commands/subcommand.base.js\";\n\n/**\n * Registry to load and get all commands.\n *\n * @export\n * @class CommandRegistry\n * @typedef {CommandRegistry}\n * @extends {BaseRegistry<AnyCommand>}\n */\nexport default class CommandRegistry extends BaseRegistry<AnyCommand> {\n\tprotected items = new Collection<string, AnyCommand>();\n\n\t/**\n\t * Load all commands and their subcommands\n\t *\n\t * @async\n\t * @param {string} [directory=getCorePath({ coreDirectory: \"commands\" })]\n\t * @returns {unknown}\n\t */\n\tasync load(directory: string = getCorePath({ coreDirectory: \"commands\" })) {\n\t\tif (!(await exists(directory))) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst entries = await fs.readdir(directory, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(directory, entry.name);\n\t\t\tif (!entry.isDirectory()) continue;\n\n\t\t\tconst indexFile = join(fullPath, \"index.ts\");\n\t\t\tconst indexJs = join(fullPath, \"index.js\");\n\n\t\t\tlet commandFile = \"\";\n\t\t\tif (await exists(indexFile)) commandFile = indexFile;\n\t\t\telse if (await exists(indexJs)) commandFile = indexJs;\n\t\t\telse continue;\n\n\t\t\tconst command = await this.importFile<AnyCommand>(commandFile);\n\t\t\tif (!command) continue;\n\t\t\tif (!command.metadata.active) continue;\n\n\t\t\tif (command.isSlashCommand()) {\n\t\t\t\tconst subcommandFiles = (await fs.readdir(fullPath)).filter(\n\t\t\t\t\tfile =>\n\t\t\t\t\t\t(file.endsWith(\".ts\") || file.endsWith(\".js\")) &&\n\t\t\t\t\t\t!file.startsWith(\"index.\") &&\n\t\t\t\t\t\t!file.endsWith(\".d.ts\")\n\t\t\t\t);\n\n\t\t\t\tfor (const file of subcommandFiles) {\n\t\t\t\t\tconst subcommand = await this.importFile<Subcommand>(join(fullPath, file));\n\t\t\t\t\tif (!subcommand) continue;\n\t\t\t\t\tif (!subcommand.data.name || !(subcommand.data instanceof SlashCommandSubcommandBuilder))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tcommand.data.addSubcommand(subcommand.data);\n\t\t\t\t\tcommand.metadata.subcommands.set(subcommand.data.name, subcommand);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.items.set(command.data.name, command);\n\t\t}\n\n\t\treturn this;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Collection, SlashCommandSubcommandBuilder } from 'discord.js';
|
|
2
|
+
import { getCorePath, exists } from 'src/shared/utility/functions.js';
|
|
3
|
+
import { BaseRegistry } from 'src/shared/typings/index.js';
|
|
4
|
+
import { promises } from 'fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
|
|
7
|
+
class CommandRegistry extends BaseRegistry {
|
|
8
|
+
items = new Collection();
|
|
9
|
+
/**
|
|
10
|
+
* Load all commands and their subcommands
|
|
11
|
+
*
|
|
12
|
+
* @async
|
|
13
|
+
* @param {string} [directory=getCorePath({ coreDirectory: "commands" })]
|
|
14
|
+
* @returns {unknown}
|
|
15
|
+
*/
|
|
16
|
+
async load(directory = getCorePath({ coreDirectory: "commands" })) {
|
|
17
|
+
if (!await exists(directory)) {
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
const entries = await promises.readdir(directory, { withFileTypes: true });
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
const fullPath = join(directory, entry.name);
|
|
23
|
+
if (!entry.isDirectory()) continue;
|
|
24
|
+
const indexFile = join(fullPath, "index.ts");
|
|
25
|
+
const indexJs = join(fullPath, "index.js");
|
|
26
|
+
let commandFile = "";
|
|
27
|
+
if (await exists(indexFile)) commandFile = indexFile;
|
|
28
|
+
else if (await exists(indexJs)) commandFile = indexJs;
|
|
29
|
+
else continue;
|
|
30
|
+
const command = await this.importFile(commandFile);
|
|
31
|
+
if (!command) continue;
|
|
32
|
+
if (!command.metadata.active) continue;
|
|
33
|
+
if (command.isSlashCommand()) {
|
|
34
|
+
const subcommandFiles = (await promises.readdir(fullPath)).filter(
|
|
35
|
+
(file) => (file.endsWith(".ts") || file.endsWith(".js")) && !file.startsWith("index.") && !file.endsWith(".d.ts")
|
|
36
|
+
);
|
|
37
|
+
for (const file of subcommandFiles) {
|
|
38
|
+
const subcommand = await this.importFile(join(fullPath, file));
|
|
39
|
+
if (!subcommand) continue;
|
|
40
|
+
if (!subcommand.data.name || !(subcommand.data instanceof SlashCommandSubcommandBuilder))
|
|
41
|
+
continue;
|
|
42
|
+
command.data.addSubcommand(subcommand.data);
|
|
43
|
+
command.metadata.subcommands.set(subcommand.data.name, subcommand);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
this.items.set(command.data.name, command);
|
|
47
|
+
}
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { CommandRegistry as default };
|
|
53
|
+
//# sourceMappingURL=command.registry.js.map
|
|
54
|
+
//# sourceMappingURL=command.registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/registry/command.registry.ts"],"names":["fs"],"mappings":";;;;;;AAgBA,MAAO,wBAAsC,YAAA,CAAyB;AAAA,EAC3D,KAAA,GAAQ,IAAI,UAAA,EAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrD,MAAM,KAAK,SAAA,GAAoB,WAAA,CAAY,EAAE,aAAA,EAAe,UAAA,EAAY,CAAA,EAAG;AAC1E,IAAA,IAAI,CAAE,MAAM,MAAA,CAAO,SAAS,CAAA,EAAI;AAC/B,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,OAAA,CAAQ,WAAW,EAAE,aAAA,EAAe,MAAM,CAAA;AAEnE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC5B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAC3C,MAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAY,EAAG;AAE1B,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AAC3C,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AAEzC,MAAA,IAAI,WAAA,GAAc,EAAA;AAClB,MAAA,IAAI,MAAM,MAAA,CAAO,SAAS,CAAA,EAAG,WAAA,GAAc,SAAA;AAAA,WAAA,IAClC,MAAM,MAAA,CAAO,OAAO,CAAA,EAAG,WAAA,GAAc,OAAA;AAAA,WACzC;AAEL,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,CAAuB,WAAW,CAAA;AAC7D,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,MAAA,EAAQ;AAE9B,MAAA,IAAI,OAAA,CAAQ,gBAAe,EAAG;AAC7B,QAAA,MAAM,eAAA,GAAA,CAAmB,MAAMA,QAAA,CAAG,OAAA,CAAQ,QAAQ,CAAA,EAAG,MAAA;AAAA,UACpD,WACE,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAK,KAAK,QAAA,CAAS,KAAK,CAAA,KAC5C,CAAC,KAAK,UAAA,CAAW,QAAQ,KACzB,CAAC,IAAA,CAAK,SAAS,OAAO;AAAA,SACxB;AAEA,QAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AACnC,UAAA,MAAM,aAAa,MAAM,IAAA,CAAK,WAAuB,IAAA,CAAK,QAAA,EAAU,IAAI,CAAC,CAAA;AACzE,UAAA,IAAI,CAAC,UAAA,EAAY;AACjB,UAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,IAAA,IAAQ,EAAE,WAAW,IAAA,YAAgB,6BAAA,CAAA;AACzD,YAAA;AAED,UAAA,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAc,UAAA,CAAW,IAAI,CAAA;AAC1C,UAAA,OAAA,CAAQ,SAAS,WAAA,CAAY,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,QAClE;AAAA,MACD;AAEA,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,IAAA;AAAA,EACR;AACD","file":"command.registry.js","sourcesContent":["import { Collection, SlashCommandSubcommandBuilder } from \"discord.js\";\nimport { exists, getCorePath } from \"src/shared/utility/functions.js\";\nimport { AnyCommand, BaseRegistry } from \"src/shared/typings/index.js\";\nimport { promises as fs } from \"fs\";\nimport { join } from \"node:path\";\n\nimport Subcommand from \"../commands/subcommand.base.js\";\n\n/**\n * Registry to load and get all commands.\n *\n * @export\n * @class CommandRegistry\n * @typedef {CommandRegistry}\n * @extends {BaseRegistry<AnyCommand>}\n */\nexport default class CommandRegistry extends BaseRegistry<AnyCommand> {\n\tprotected items = new Collection<string, AnyCommand>();\n\n\t/**\n\t * Load all commands and their subcommands\n\t *\n\t * @async\n\t * @param {string} [directory=getCorePath({ coreDirectory: \"commands\" })]\n\t * @returns {unknown}\n\t */\n\tasync load(directory: string = getCorePath({ coreDirectory: \"commands\" })) {\n\t\tif (!(await exists(directory))) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst entries = await fs.readdir(directory, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(directory, entry.name);\n\t\t\tif (!entry.isDirectory()) continue;\n\n\t\t\tconst indexFile = join(fullPath, \"index.ts\");\n\t\t\tconst indexJs = join(fullPath, \"index.js\");\n\n\t\t\tlet commandFile = \"\";\n\t\t\tif (await exists(indexFile)) commandFile = indexFile;\n\t\t\telse if (await exists(indexJs)) commandFile = indexJs;\n\t\t\telse continue;\n\n\t\t\tconst command = await this.importFile<AnyCommand>(commandFile);\n\t\t\tif (!command) continue;\n\t\t\tif (!command.metadata.active) continue;\n\n\t\t\tif (command.isSlashCommand()) {\n\t\t\t\tconst subcommandFiles = (await fs.readdir(fullPath)).filter(\n\t\t\t\t\tfile =>\n\t\t\t\t\t\t(file.endsWith(\".ts\") || file.endsWith(\".js\")) &&\n\t\t\t\t\t\t!file.startsWith(\"index.\") &&\n\t\t\t\t\t\t!file.endsWith(\".d.ts\")\n\t\t\t\t);\n\n\t\t\t\tfor (const file of subcommandFiles) {\n\t\t\t\t\tconst subcommand = await this.importFile<Subcommand>(join(fullPath, file));\n\t\t\t\t\tif (!subcommand) continue;\n\t\t\t\t\tif (!subcommand.data.name || !(subcommand.data instanceof SlashCommandSubcommandBuilder))\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tcommand.data.addSubcommand(subcommand.data);\n\t\t\t\t\tcommand.metadata.subcommands.set(subcommand.data.name, subcommand);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.items.set(command.data.name, command);\n\t\t}\n\n\t\treturn this;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var discord_js = require('discord.js');
|
|
4
|
+
var functions_js = require('src/shared/utility/functions.js');
|
|
5
|
+
var index_js = require('src/shared/typings/index.js');
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var node_path = require('node:path');
|
|
8
|
+
|
|
9
|
+
class ComponentRegistry extends index_js.BaseRegistry {
|
|
10
|
+
items = new discord_js.Collection();
|
|
11
|
+
/**
|
|
12
|
+
* Load all components.
|
|
13
|
+
*
|
|
14
|
+
* @async
|
|
15
|
+
* @param {string} [directory=getCorePath({ coreDirectory: "components" })]
|
|
16
|
+
* @returns {Promise<this>}
|
|
17
|
+
*/
|
|
18
|
+
async load(directory = functions_js.getCorePath({ coreDirectory: "components" })) {
|
|
19
|
+
if (!await functions_js.exists(directory)) {
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
const entries = await fs.promises.readdir(directory, { withFileTypes: true });
|
|
23
|
+
for (const entry of entries) {
|
|
24
|
+
const fullPath = node_path.join(directory, entry.name);
|
|
25
|
+
if (!entry.isDirectory()) continue;
|
|
26
|
+
const componentFiles = (await fs.promises.readdir(fullPath)).filter(
|
|
27
|
+
(file) => (file.endsWith(".ts") || file.endsWith(".js")) && !file.startsWith("index.") && !file.endsWith(".d.ts")
|
|
28
|
+
);
|
|
29
|
+
for (const file of componentFiles) {
|
|
30
|
+
const component = await this.importFile(node_path.join(fullPath, file));
|
|
31
|
+
if (!component) continue;
|
|
32
|
+
const { data } = index_js.deconstructCustomId(component.metadata.customId);
|
|
33
|
+
this.items.set(data, component);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
module.exports = ComponentRegistry;
|
|
41
|
+
//# sourceMappingURL=component.registry.cjs.map
|
|
42
|
+
//# sourceMappingURL=component.registry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/registry/component.registry.ts"],"names":["BaseRegistry","Collection","getCorePath","exists","fs","join","deconstructCustomId"],"mappings":";;;;;;;;AAeA,MAAO,0BAAwCA,qBAAA,CAAwB;AAAA,EAC5D,KAAA,GAAQ,IAAIC,qBAAA,EAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASpD,MAAM,KAAK,SAAA,GAAoBC,wBAAA,CAAY,EAAE,aAAA,EAAe,YAAA,EAAc,CAAA,EAAkB;AAC3F,IAAA,IAAI,CAAE,MAAMC,mBAAA,CAAO,SAAS,CAAA,EAAI;AAC/B,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,MAAM,OAAA,GAAU,MAAMC,WAAA,CAAG,OAAA,CAAQ,WAAW,EAAE,aAAA,EAAe,MAAM,CAAA;AAEnE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC5B,MAAA,MAAM,QAAA,GAAWC,cAAA,CAAK,SAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAC3C,MAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAY,EAAG;AAE1B,MAAA,MAAM,cAAA,GAAA,CAAkB,MAAMD,WAAA,CAAG,OAAA,CAAQ,QAAQ,CAAA,EAAG,MAAA;AAAA,QACnD,WACE,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAK,KAAK,QAAA,CAAS,KAAK,CAAA,KAC5C,CAAC,KAAK,UAAA,CAAW,QAAQ,KACzB,CAAC,IAAA,CAAK,SAAS,OAAO;AAAA,OACxB;AAEA,MAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB;AAClC,QAAA,MAAM,YAAY,MAAM,IAAA,CAAK,WAAsBC,cAAA,CAAK,QAAA,EAAU,IAAI,CAAC,CAAA;AACvE,QAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,QAAA,MAAM,EAAE,IAAA,EAAK,GAAIC,4BAAA,CAAoB,SAAA,CAAU,SAAS,QAAQ,CAAA;AAChE,QAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,SAAS,CAAA;AAAA,MAC/B;AAAA,IACD;AAEA,IAAA,OAAO,IAAA;AAAA,EACR;AACD","file":"component.registry.cjs","sourcesContent":["import { Collection } from \"discord.js\";\nimport { exists, getCorePath } from \"src/shared/utility/functions.js\";\nimport { BaseRegistry, deconstructCustomId } from \"src/shared/typings/index.js\";\nimport { promises as fs } from \"fs\";\nimport { join } from \"node:path\";\nimport Component from \"../components/component.base.js\";\n\n/**\n * Registry to load and get all components.\n *\n * @export\n * @class ComponentRegistry\n * @typedef {ComponentRegistry}\n * @extends {BaseRegistry<Component>}\n */\nexport default class ComponentRegistry extends BaseRegistry<Component> {\n\tprotected items = new Collection<string, Component>();\n\n\t/**\n\t * Load all components.\n\t *\n\t * @async\n\t * @param {string} [directory=getCorePath({ coreDirectory: \"components\" })]\n\t * @returns {Promise<this>}\n\t */\n\tasync load(directory: string = getCorePath({ coreDirectory: \"components\" })): Promise<this> {\n\t\tif (!(await exists(directory))) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst entries = await fs.readdir(directory, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(directory, entry.name);\n\t\t\tif (!entry.isDirectory()) continue;\n\n\t\t\tconst componentFiles = (await fs.readdir(fullPath)).filter(\n\t\t\t\tfile =>\n\t\t\t\t\t(file.endsWith(\".ts\") || file.endsWith(\".js\")) &&\n\t\t\t\t\t!file.startsWith(\"index.\") &&\n\t\t\t\t\t!file.endsWith(\".d.ts\")\n\t\t\t);\n\n\t\t\tfor (const file of componentFiles) {\n\t\t\t\tconst component = await this.importFile<Component>(join(fullPath, file));\n\t\t\t\tif (!component) continue;\n\n\t\t\t\tconst { data } = deconstructCustomId(component.metadata.customId);\n\t\t\t\tthis.items.set(data, component);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Collection } from 'discord.js';
|
|
2
|
+
import { getCorePath, exists } from 'src/shared/utility/functions.js';
|
|
3
|
+
import { BaseRegistry, deconstructCustomId } from 'src/shared/typings/index.js';
|
|
4
|
+
import { promises } from 'fs';
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
|
|
7
|
+
class ComponentRegistry extends BaseRegistry {
|
|
8
|
+
items = new Collection();
|
|
9
|
+
/**
|
|
10
|
+
* Load all components.
|
|
11
|
+
*
|
|
12
|
+
* @async
|
|
13
|
+
* @param {string} [directory=getCorePath({ coreDirectory: "components" })]
|
|
14
|
+
* @returns {Promise<this>}
|
|
15
|
+
*/
|
|
16
|
+
async load(directory = getCorePath({ coreDirectory: "components" })) {
|
|
17
|
+
if (!await exists(directory)) {
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
const entries = await promises.readdir(directory, { withFileTypes: true });
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
const fullPath = join(directory, entry.name);
|
|
23
|
+
if (!entry.isDirectory()) continue;
|
|
24
|
+
const componentFiles = (await promises.readdir(fullPath)).filter(
|
|
25
|
+
(file) => (file.endsWith(".ts") || file.endsWith(".js")) && !file.startsWith("index.") && !file.endsWith(".d.ts")
|
|
26
|
+
);
|
|
27
|
+
for (const file of componentFiles) {
|
|
28
|
+
const component = await this.importFile(join(fullPath, file));
|
|
29
|
+
if (!component) continue;
|
|
30
|
+
const { data } = deconstructCustomId(component.metadata.customId);
|
|
31
|
+
this.items.set(data, component);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { ComponentRegistry as default };
|
|
39
|
+
//# sourceMappingURL=component.registry.js.map
|
|
40
|
+
//# sourceMappingURL=component.registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/registry/component.registry.ts"],"names":["fs"],"mappings":";;;;;;AAeA,MAAO,0BAAwC,YAAA,CAAwB;AAAA,EAC5D,KAAA,GAAQ,IAAI,UAAA,EAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASpD,MAAM,KAAK,SAAA,GAAoB,WAAA,CAAY,EAAE,aAAA,EAAe,YAAA,EAAc,CAAA,EAAkB;AAC3F,IAAA,IAAI,CAAE,MAAM,MAAA,CAAO,SAAS,CAAA,EAAI;AAC/B,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,OAAA,CAAQ,WAAW,EAAE,aAAA,EAAe,MAAM,CAAA;AAEnE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC5B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAC3C,MAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAY,EAAG;AAE1B,MAAA,MAAM,cAAA,GAAA,CAAkB,MAAMA,QAAA,CAAG,OAAA,CAAQ,QAAQ,CAAA,EAAG,MAAA;AAAA,QACnD,WACE,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,IAAK,KAAK,QAAA,CAAS,KAAK,CAAA,KAC5C,CAAC,KAAK,UAAA,CAAW,QAAQ,KACzB,CAAC,IAAA,CAAK,SAAS,OAAO;AAAA,OACxB;AAEA,MAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB;AAClC,QAAA,MAAM,YAAY,MAAM,IAAA,CAAK,WAAsB,IAAA,CAAK,QAAA,EAAU,IAAI,CAAC,CAAA;AACvE,QAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,QAAA,MAAM,EAAE,IAAA,EAAK,GAAI,mBAAA,CAAoB,SAAA,CAAU,SAAS,QAAQ,CAAA;AAChE,QAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,EAAM,SAAS,CAAA;AAAA,MAC/B;AAAA,IACD;AAEA,IAAA,OAAO,IAAA;AAAA,EACR;AACD","file":"component.registry.js","sourcesContent":["import { Collection } from \"discord.js\";\nimport { exists, getCorePath } from \"src/shared/utility/functions.js\";\nimport { BaseRegistry, deconstructCustomId } from \"src/shared/typings/index.js\";\nimport { promises as fs } from \"fs\";\nimport { join } from \"node:path\";\nimport Component from \"../components/component.base.js\";\n\n/**\n * Registry to load and get all components.\n *\n * @export\n * @class ComponentRegistry\n * @typedef {ComponentRegistry}\n * @extends {BaseRegistry<Component>}\n */\nexport default class ComponentRegistry extends BaseRegistry<Component> {\n\tprotected items = new Collection<string, Component>();\n\n\t/**\n\t * Load all components.\n\t *\n\t * @async\n\t * @param {string} [directory=getCorePath({ coreDirectory: \"components\" })]\n\t * @returns {Promise<this>}\n\t */\n\tasync load(directory: string = getCorePath({ coreDirectory: \"components\" })): Promise<this> {\n\t\tif (!(await exists(directory))) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst entries = await fs.readdir(directory, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(directory, entry.name);\n\t\t\tif (!entry.isDirectory()) continue;\n\n\t\t\tconst componentFiles = (await fs.readdir(fullPath)).filter(\n\t\t\t\tfile =>\n\t\t\t\t\t(file.endsWith(\".ts\") || file.endsWith(\".js\")) &&\n\t\t\t\t\t!file.startsWith(\"index.\") &&\n\t\t\t\t\t!file.endsWith(\".d.ts\")\n\t\t\t);\n\n\t\t\tfor (const file of componentFiles) {\n\t\t\t\tconst component = await this.importFile<Component>(join(fullPath, file));\n\t\t\t\tif (!component) continue;\n\n\t\t\t\tconst { data } = deconstructCustomId(component.metadata.customId);\n\t\t\t\tthis.items.set(data, component);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var discord_js = require('discord.js');
|
|
4
|
+
var functions_js = require('src/shared/utility/functions.js');
|
|
5
|
+
var index_js = require('src/shared/typings/index.js');
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var node_path = require('node:path');
|
|
8
|
+
var interactionCreate = require('../events/interactionCreate.js');
|
|
9
|
+
|
|
10
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
|
|
12
|
+
var interactionCreate__default = /*#__PURE__*/_interopDefault(interactionCreate);
|
|
13
|
+
|
|
14
|
+
class EventRegistry extends index_js.BaseRegistry {
|
|
15
|
+
items = new discord_js.Collection();
|
|
16
|
+
/**
|
|
17
|
+
* Load all events.
|
|
18
|
+
*
|
|
19
|
+
* @async
|
|
20
|
+
* @param {string} [directory=getCorePath({ coreDirectory: "events" })]
|
|
21
|
+
* @returns {Promise<this>}
|
|
22
|
+
*/
|
|
23
|
+
async load(directory = functions_js.getCorePath({ coreDirectory: "events" })) {
|
|
24
|
+
if (!await functions_js.exists(directory)) return this;
|
|
25
|
+
const entries = await fs.promises.readdir(directory, { withFileTypes: true });
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
const fullPath = node_path.join(directory, entry.name);
|
|
28
|
+
if (entry.isDirectory()) {
|
|
29
|
+
await this.load(fullPath);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (entry.isFile() && entry.name.endsWith(".js")) {
|
|
33
|
+
const event = await this.importFile(fullPath);
|
|
34
|
+
if (!event) continue;
|
|
35
|
+
this.items.set(event.name, event);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
this.items.set(interactionCreate__default.default.name, interactionCreate__default.default);
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Bind loaded events to their client events respectively.
|
|
43
|
+
*
|
|
44
|
+
* @param {TriviousClient} client
|
|
45
|
+
*/
|
|
46
|
+
bind(client) {
|
|
47
|
+
for (const event of this.items.values()) {
|
|
48
|
+
const handler = (...args) => void event.execute(client, ...args);
|
|
49
|
+
if (event.once) client.once(event.name, handler);
|
|
50
|
+
else client.on(event.name, handler);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
module.exports = EventRegistry;
|
|
56
|
+
//# sourceMappingURL=event.registry.cjs.map
|
|
57
|
+
//# sourceMappingURL=event.registry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/registry/event.registry.ts"],"names":["BaseRegistry","Collection","getCorePath","exists","fs","join","interactionCreate"],"mappings":";;;;;;;;;;;;;AAgBA,MAAO,sBAAoCA,qBAAA,CAAoB;AAAA,EACpD,KAAA,GAAQ,IAAIC,qBAAA,EAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAShD,MAAM,KAAK,SAAA,GAAoBC,wBAAA,CAAY,EAAE,aAAA,EAAe,QAAA,EAAU,CAAA,EAAkB;AACvF,IAAA,IAAI,CAAE,MAAMC,mBAAA,CAAO,SAAS,GAAI,OAAO,IAAA;AAEvC,IAAA,MAAM,OAAA,GAAU,MAAMC,WAAA,CAAG,OAAA,CAAQ,WAAW,EAAE,aAAA,EAAe,MAAM,CAAA;AACnE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC5B,MAAA,MAAM,QAAA,GAAWC,cAAA,CAAK,SAAA,EAAW,KAAA,CAAM,IAAI,CAAA;AAE3C,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACxB,QAAA,MAAM,IAAA,CAAK,KAAK,QAAQ,CAAA;AACxB,QAAA;AAAA,MACD;AAEA,MAAA,IAAI,MAAM,MAAA,EAAO,IAAK,MAAM,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,EAAG;AACjD,QAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,UAAA,CAAkB,QAAQ,CAAA;AACnD,QAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,QAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAAA,MACjC;AAAA,IACD;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIC,kCAAA,CAAkB,IAAA,EAAMA,kCAA0B,CAAA;AACjE,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,MAAA,EAAwB;AAC5B,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AACxC,MAAA,MAAM,OAAA,GAAU,IAAI,IAAA,KACnB,KAAK,MAAM,OAAA,CAAQ,MAAA,EAAQ,GAAG,IAAI,CAAA;AAEnC,MAAA,IAAI,MAAM,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,WAC1C,MAAA,CAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAAA,IACnC;AAAA,EACD;AACD","file":"event.registry.cjs","sourcesContent":["import { ClientEvents, Collection } from \"discord.js\";\nimport { exists, getCorePath } from \"src/shared/utility/functions.js\";\nimport { BaseRegistry, Event } from \"src/shared/typings/index.js\";\nimport { promises as fs } from \"fs\";\nimport { join } from \"node:path\";\nimport TriviousClient from \"../client/trivious.client.js\";\nimport interactionCreate from \"../events/interactionCreate.js\";\n\n/**\n * Registry to load, get and bind events.\n *\n * @export\n * @class EventRegistry\n * @typedef {EventRegistry}\n * @extends {BaseRegistry<Event>}\n */\nexport default class EventRegistry extends BaseRegistry<Event> {\n\tprotected items = new Collection<string, Event>();\n\n\t/**\n\t * Load all events.\n\t *\n\t * @async\n\t * @param {string} [directory=getCorePath({ coreDirectory: \"events\" })]\n\t * @returns {Promise<this>}\n\t */\n\tasync load(directory: string = getCorePath({ coreDirectory: \"events\" })): Promise<this> {\n\t\tif (!(await exists(directory))) return this;\n\n\t\tconst entries = await fs.readdir(directory, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(directory, entry.name);\n\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tawait this.load(fullPath);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (entry.isFile() && entry.name.endsWith(\".js\")) {\n\t\t\t\tconst event = await this.importFile<Event>(fullPath);\n\t\t\t\tif (!event) continue;\n\n\t\t\t\tthis.items.set(event.name, event);\n\t\t\t}\n\t\t}\n\n\t\tthis.items.set(interactionCreate.name, interactionCreate as Event);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Bind loaded events to their client events respectively.\n\t *\n\t * @param {TriviousClient} client\n\t */\n\tbind(client: TriviousClient) {\n\t\tfor (const event of this.items.values()) {\n\t\t\tconst handler = (...args: ClientEvents[typeof event.name]) =>\n\t\t\t\tvoid event.execute(client, ...args);\n\n\t\t\tif (event.once) client.once(event.name, handler);\n\t\t\telse client.on(event.name, handler);\n\t\t}\n\t}\n}\n"]}
|