trivious 1.3.24 → 1.3.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/core/client/trivious.client.cjs +90 -0
  2. package/dist/core/client/trivious.client.cjs.map +1 -0
  3. package/dist/core/client/trivious.client.d.cts +3 -0
  4. package/dist/core/client/trivious.client.d.ts +3 -0
  5. package/dist/core/client/trivious.client.js +88 -0
  6. package/dist/core/client/trivious.client.js.map +1 -0
  7. package/dist/core/commands/command.base.cjs +307 -0
  8. package/dist/core/commands/command.base.cjs.map +1 -0
  9. package/dist/core/commands/command.base.d.cts +3 -0
  10. package/dist/core/commands/command.base.d.ts +3 -0
  11. package/dist/core/commands/command.base.js +299 -0
  12. package/dist/core/commands/command.base.js.map +1 -0
  13. package/dist/core/commands/subcommand.base.cjs +96 -0
  14. package/dist/core/commands/subcommand.base.cjs.map +1 -0
  15. package/dist/core/commands/subcommand.base.d.cts +3 -0
  16. package/dist/core/commands/subcommand.base.d.ts +3 -0
  17. package/dist/core/commands/subcommand.base.js +91 -0
  18. package/dist/core/commands/subcommand.base.js.map +1 -0
  19. package/dist/core/components/component.base.cjs +111 -0
  20. package/dist/core/components/component.base.cjs.map +1 -0
  21. package/dist/core/components/component.base.d.cts +3 -0
  22. package/dist/core/components/component.base.d.ts +3 -0
  23. package/dist/core/components/component.base.js +106 -0
  24. package/dist/core/components/component.base.js.map +1 -0
  25. package/dist/core/events/clientReady.cjs +12 -0
  26. package/dist/core/events/clientReady.cjs.map +1 -0
  27. package/dist/core/events/clientReady.d.cts +10 -0
  28. package/dist/core/events/clientReady.d.ts +10 -0
  29. package/dist/core/events/clientReady.js +10 -0
  30. package/dist/core/events/clientReady.js.map +1 -0
  31. package/dist/core/events/interactionCreate.cjs +70 -0
  32. package/dist/core/events/interactionCreate.cjs.map +1 -0
  33. package/dist/core/events/interactionCreate.d.cts +10 -0
  34. package/dist/core/events/interactionCreate.d.ts +10 -0
  35. package/dist/core/events/interactionCreate.js +68 -0
  36. package/dist/core/events/interactionCreate.js.map +1 -0
  37. package/dist/core/registry/command.registry.cjs +60 -0
  38. package/dist/core/registry/command.registry.cjs.map +1 -0
  39. package/dist/core/registry/command.registry.d.cts +3 -0
  40. package/dist/core/registry/command.registry.d.ts +3 -0
  41. package/dist/core/registry/command.registry.js +54 -0
  42. package/dist/core/registry/command.registry.js.map +1 -0
  43. package/dist/core/registry/component.registry.cjs +46 -0
  44. package/dist/core/registry/component.registry.cjs.map +1 -0
  45. package/dist/core/registry/component.registry.d.cts +3 -0
  46. package/dist/core/registry/component.registry.d.ts +3 -0
  47. package/dist/core/registry/component.registry.js +40 -0
  48. package/dist/core/registry/component.registry.js.map +1 -0
  49. package/dist/core/registry/event.registry.cjs +77 -0
  50. package/dist/core/registry/event.registry.cjs.map +1 -0
  51. package/dist/core/registry/event.registry.d.cts +3 -0
  52. package/dist/core/registry/event.registry.d.ts +3 -0
  53. package/dist/core/registry/event.registry.js +71 -0
  54. package/dist/core/registry/event.registry.js.map +1 -0
  55. package/dist/core/registry/index.cjs +49 -0
  56. package/dist/core/registry/index.cjs.map +1 -0
  57. package/dist/core/registry/index.d.cts +19 -0
  58. package/dist/core/registry/index.d.ts +19 -0
  59. package/dist/core/registry/index.js +39 -0
  60. package/dist/core/registry/index.js.map +1 -0
  61. package/dist/core/registry/module.registry.cjs +61 -0
  62. package/dist/core/registry/module.registry.cjs.map +1 -0
  63. package/dist/core/registry/module.registry.d.cts +3 -0
  64. package/dist/core/registry/module.registry.d.ts +3 -0
  65. package/dist/core/registry/module.registry.js +55 -0
  66. package/dist/core/registry/module.registry.js.map +1 -0
  67. package/dist/index-5IsAwOsi.d.ts +940 -0
  68. package/dist/index-BjPKCNAw.d.cts +940 -0
  69. package/dist/index.cjs +65 -1403
  70. package/dist/index.cjs.map +1 -1
  71. package/dist/index.d.cts +3 -987
  72. package/dist/index.d.ts +3 -987
  73. package/dist/index.js +9 -1392
  74. package/dist/index.js.map +1 -1
  75. package/dist/shared/typings/client.cjs +4 -0
  76. package/dist/shared/typings/client.cjs.map +1 -0
  77. package/dist/shared/typings/client.d.cts +3 -0
  78. package/dist/shared/typings/client.d.ts +3 -0
  79. package/dist/shared/typings/client.js +3 -0
  80. package/dist/shared/typings/client.js.map +1 -0
  81. package/dist/shared/typings/commands.cjs +4 -0
  82. package/dist/shared/typings/commands.cjs.map +1 -0
  83. package/dist/shared/typings/commands.d.cts +3 -0
  84. package/dist/shared/typings/commands.d.ts +3 -0
  85. package/dist/shared/typings/commands.js +3 -0
  86. package/dist/shared/typings/commands.js.map +1 -0
  87. package/dist/shared/typings/components.cjs +22 -0
  88. package/dist/shared/typings/components.cjs.map +1 -0
  89. package/dist/shared/typings/components.d.cts +3 -0
  90. package/dist/shared/typings/components.d.ts +3 -0
  91. package/dist/shared/typings/components.js +19 -0
  92. package/dist/shared/typings/components.js.map +1 -0
  93. package/dist/shared/typings/events.cjs +4 -0
  94. package/dist/shared/typings/events.cjs.map +1 -0
  95. package/dist/shared/typings/events.d.cts +3 -0
  96. package/dist/shared/typings/events.d.ts +3 -0
  97. package/dist/shared/typings/events.js +3 -0
  98. package/dist/shared/typings/events.js.map +1 -0
  99. package/dist/shared/typings/index.cjs +56 -0
  100. package/dist/shared/typings/index.cjs.map +1 -0
  101. package/dist/shared/typings/index.d.cts +3 -0
  102. package/dist/shared/typings/index.d.ts +3 -0
  103. package/dist/shared/typings/index.js +9 -0
  104. package/dist/shared/typings/index.js.map +1 -0
  105. package/dist/shared/typings/module.cjs +4 -0
  106. package/dist/shared/typings/module.cjs.map +1 -0
  107. package/dist/shared/typings/module.d.cts +3 -0
  108. package/dist/shared/typings/module.d.ts +3 -0
  109. package/dist/shared/typings/module.js +3 -0
  110. package/dist/shared/typings/module.js.map +1 -0
  111. package/dist/shared/typings/permissions.cjs +22 -0
  112. package/dist/shared/typings/permissions.cjs.map +1 -0
  113. package/dist/shared/typings/permissions.d.cts +3 -0
  114. package/dist/shared/typings/permissions.d.ts +3 -0
  115. package/dist/shared/typings/permissions.js +19 -0
  116. package/dist/shared/typings/permissions.js.map +1 -0
  117. package/dist/shared/typings/registry.cjs +63 -0
  118. package/dist/shared/typings/registry.cjs.map +1 -0
  119. package/dist/shared/typings/registry.d.cts +51 -0
  120. package/dist/shared/typings/registry.d.ts +51 -0
  121. package/dist/shared/typings/registry.js +61 -0
  122. package/dist/shared/typings/registry.js.map +1 -0
  123. package/dist/shared/utility/functions.cjs +80 -0
  124. package/dist/shared/utility/functions.cjs.map +1 -0
  125. package/dist/shared/utility/functions.d.cts +56 -0
  126. package/dist/shared/utility/functions.d.ts +56 -0
  127. package/dist/shared/utility/functions.js +73 -0
  128. package/dist/shared/utility/functions.js.map +1 -0
  129. package/package.json +1 -1
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ var discord_js = require('discord.js');
4
+ var index_js = require('../registry/index.js');
5
+
6
+ class TriviousClient extends discord_js.Client {
7
+ /**
8
+ * Client registries.
9
+ *
10
+ * @public
11
+ * @readonly
12
+ * @type {*}
13
+ */
14
+ registries = index_js.registries();
15
+ /**
16
+ * Client copy of the constructor options.
17
+ *
18
+ * @private
19
+ * @type {TriviousClientOptions}
20
+ */
21
+ _options;
22
+ /**
23
+ * Creates an instance of TriviousClient.
24
+ *
25
+ * @constructor
26
+ * @param {TriviousClientOptions} options
27
+ */
28
+ constructor(options) {
29
+ super(options);
30
+ this._options = options;
31
+ }
32
+ /**
33
+ * Load all registries.
34
+ *
35
+ * @async
36
+ * @returns {*}
37
+ */
38
+ async register() {
39
+ const { registries: registries2 } = this;
40
+ await registries2.loadAll(this._options);
41
+ console.log(
42
+ `[Trivious] Loaded all registries (${registries2.commands.get().size} commands, ${registries2.events.get().size} events, ${registries2.components.get().size} components, ${registries2.modules.get().size} modules)`
43
+ );
44
+ }
45
+ /**
46
+ * Login and start the bot.
47
+ *
48
+ * @async
49
+ * @returns {*}
50
+ */
51
+ async start() {
52
+ if (!process.env[this._options.tokenReference]) {
53
+ if (process.env.NODE_ENV !== "production") return;
54
+ else throw new Error("[Trivious] Invalid token reference");
55
+ }
56
+ this.registries.bind(this);
57
+ await this.login(process.env[this._options.tokenReference]);
58
+ }
59
+ /**
60
+ * Deploy all commands.
61
+ *
62
+ * @async
63
+ * @returns {*}
64
+ */
65
+ async deploy() {
66
+ const clientId = process.env[this._options.clientIdReference];
67
+ const token = process.env[this._options.tokenReference];
68
+ if (!clientId || !token) throw new Error("[Trivious] Invalid clientId or token reference");
69
+ const slashCommands = Array.from(this.registries.commands.get().values());
70
+ const body = [...slashCommands.map((command) => command.toJSON())];
71
+ const rest = new discord_js.REST({ version: "10" }).setToken(token);
72
+ await rest.put(discord_js.Routes.applicationCommands(clientId), { body });
73
+ console.log(`[Trivious] Deployed ${body.length} commands`);
74
+ }
75
+ /**
76
+ * Set the roles tied to a permission level.
77
+ *
78
+ * @param {Record<string, PermissionLevel>} roles
79
+ */
80
+ setRolePermissions(roles) {
81
+ this._options.rolePermissions = roles;
82
+ }
83
+ get rolePermissions() {
84
+ return this._options.rolePermissions ?? {};
85
+ }
86
+ }
87
+
88
+ module.exports = TriviousClient;
89
+ //# sourceMappingURL=trivious.client.cjs.map
90
+ //# sourceMappingURL=trivious.client.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/client/trivious.client.ts"],"names":["Client","registries","REST","Routes"],"mappings":"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","file":"trivious.client.cjs","sourcesContent":["import { Client, REST, Routes } from \"discord.js\";\nimport { registries } from \"../registry/index.js\";\nimport { TriviousClientOptions, PermissionLevel } from \"src/shared/typings/index.js\";\n\n/**\n * Trivious base client.\n *\n * @export\n * @class TriviousClient\n * @typedef {TriviousClient}\n * @extends {Client}\n */\nexport default class TriviousClient extends Client {\n\t/**\n\t * Client registries.\n\t *\n\t * @public\n\t * @readonly\n\t * @type {*}\n\t */\n\tpublic readonly registries = registries();\n\t/**\n\t * Client copy of the constructor options.\n\t *\n\t * @private\n\t * @type {TriviousClientOptions}\n\t */\n\tpublic readonly _options: TriviousClientOptions;\n\n\t/**\n\t * Creates an instance of TriviousClient.\n\t *\n\t * @constructor\n\t * @param {TriviousClientOptions} options\n\t */\n\tconstructor(options: TriviousClientOptions) {\n\t\tsuper(options);\n\t\tthis._options = options;\n\t}\n\n\t/**\n\t * Load all registries.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync register() {\n\t\tconst { registries } = this;\n\t\tawait registries.loadAll(this._options);\n\t\tconsole.log(\n\t\t\t`[Trivious] Loaded all registries (${registries.commands.get().size} commands, ${registries.events.get().size} events, ${registries.components.get().size} components, ${registries.modules.get().size} modules)`\n\t\t);\n\t}\n\n\t/**\n\t * Login and start the bot.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync start() {\n\t\tif (!process.env[this._options.tokenReference]) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") return;\n\t\t\telse throw new Error(\"[Trivious] Invalid token reference\");\n\t\t}\n\n\t\tthis.registries.bind(this);\n\t\tawait this.login(process.env[this._options.tokenReference]);\n\t}\n\n\t/**\n\t * Deploy all commands.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync deploy() {\n\t\tconst clientId = process.env[this._options.clientIdReference];\n\t\tconst token = process.env[this._options.tokenReference];\n\t\tif (!clientId || !token) throw new Error(\"[Trivious] Invalid clientId or token reference\");\n\n\t\tconst slashCommands = Array.from(this.registries.commands.get().values());\n\t\tconst body = [...slashCommands.map(command => command.toJSON())];\n\n\t\tconst rest = new REST({ version: \"10\" }).setToken(token);\n\t\tawait rest.put(Routes.applicationCommands(clientId), { body });\n\t\tconsole.log(`[Trivious] Deployed ${body.length} commands`);\n\t}\n\n\t/**\n\t * Set the roles tied to a permission level.\n\t *\n\t * @param {Record<string, PermissionLevel>} roles\n\t */\n\tsetRolePermissions(roles: Record<string, PermissionLevel>) {\n\t\tthis._options.rolePermissions = roles;\n\t}\n\n\tget rolePermissions() {\n\t\treturn this._options.rolePermissions ?? {};\n\t}\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { T as default } from '../../index-BjPKCNAw.cjs';
2
+ import 'discord.js';
3
+ import '../../shared/typings/registry.cjs';
@@ -0,0 +1,3 @@
1
+ export { T as default } from '../../index-5IsAwOsi.js';
2
+ import 'discord.js';
3
+ import '../../shared/typings/registry.js';
@@ -0,0 +1,88 @@
1
+ import { Client, REST, Routes } from 'discord.js';
2
+ import { registries } from '../registry/index.js';
3
+
4
+ class TriviousClient extends Client {
5
+ /**
6
+ * Client registries.
7
+ *
8
+ * @public
9
+ * @readonly
10
+ * @type {*}
11
+ */
12
+ registries = registries();
13
+ /**
14
+ * Client copy of the constructor options.
15
+ *
16
+ * @private
17
+ * @type {TriviousClientOptions}
18
+ */
19
+ _options;
20
+ /**
21
+ * Creates an instance of TriviousClient.
22
+ *
23
+ * @constructor
24
+ * @param {TriviousClientOptions} options
25
+ */
26
+ constructor(options) {
27
+ super(options);
28
+ this._options = options;
29
+ }
30
+ /**
31
+ * Load all registries.
32
+ *
33
+ * @async
34
+ * @returns {*}
35
+ */
36
+ async register() {
37
+ const { registries: registries2 } = this;
38
+ await registries2.loadAll(this._options);
39
+ console.log(
40
+ `[Trivious] Loaded all registries (${registries2.commands.get().size} commands, ${registries2.events.get().size} events, ${registries2.components.get().size} components, ${registries2.modules.get().size} modules)`
41
+ );
42
+ }
43
+ /**
44
+ * Login and start the bot.
45
+ *
46
+ * @async
47
+ * @returns {*}
48
+ */
49
+ async start() {
50
+ if (!process.env[this._options.tokenReference]) {
51
+ if (process.env.NODE_ENV !== "production") return;
52
+ else throw new Error("[Trivious] Invalid token reference");
53
+ }
54
+ this.registries.bind(this);
55
+ await this.login(process.env[this._options.tokenReference]);
56
+ }
57
+ /**
58
+ * Deploy all commands.
59
+ *
60
+ * @async
61
+ * @returns {*}
62
+ */
63
+ async deploy() {
64
+ const clientId = process.env[this._options.clientIdReference];
65
+ const token = process.env[this._options.tokenReference];
66
+ if (!clientId || !token) throw new Error("[Trivious] Invalid clientId or token reference");
67
+ const slashCommands = Array.from(this.registries.commands.get().values());
68
+ const body = [...slashCommands.map((command) => command.toJSON())];
69
+ const rest = new REST({ version: "10" }).setToken(token);
70
+ await rest.put(Routes.applicationCommands(clientId), { body });
71
+ console.log(`[Trivious] Deployed ${body.length} commands`);
72
+ }
73
+ /**
74
+ * Set the roles tied to a permission level.
75
+ *
76
+ * @param {Record<string, PermissionLevel>} roles
77
+ */
78
+ setRolePermissions(roles) {
79
+ this._options.rolePermissions = roles;
80
+ }
81
+ get rolePermissions() {
82
+ return this._options.rolePermissions ?? {};
83
+ }
84
+ }
85
+
86
+ export { TriviousClient as default };
87
+ //# sourceMappingURL=trivious.client.js.map
88
+ //# sourceMappingURL=trivious.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/client/trivious.client.ts"],"names":["registries"],"mappings":"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","file":"trivious.client.js","sourcesContent":["import { Client, REST, Routes } from \"discord.js\";\nimport { registries } from \"../registry/index.js\";\nimport { TriviousClientOptions, PermissionLevel } from \"src/shared/typings/index.js\";\n\n/**\n * Trivious base client.\n *\n * @export\n * @class TriviousClient\n * @typedef {TriviousClient}\n * @extends {Client}\n */\nexport default class TriviousClient extends Client {\n\t/**\n\t * Client registries.\n\t *\n\t * @public\n\t * @readonly\n\t * @type {*}\n\t */\n\tpublic readonly registries = registries();\n\t/**\n\t * Client copy of the constructor options.\n\t *\n\t * @private\n\t * @type {TriviousClientOptions}\n\t */\n\tpublic readonly _options: TriviousClientOptions;\n\n\t/**\n\t * Creates an instance of TriviousClient.\n\t *\n\t * @constructor\n\t * @param {TriviousClientOptions} options\n\t */\n\tconstructor(options: TriviousClientOptions) {\n\t\tsuper(options);\n\t\tthis._options = options;\n\t}\n\n\t/**\n\t * Load all registries.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync register() {\n\t\tconst { registries } = this;\n\t\tawait registries.loadAll(this._options);\n\t\tconsole.log(\n\t\t\t`[Trivious] Loaded all registries (${registries.commands.get().size} commands, ${registries.events.get().size} events, ${registries.components.get().size} components, ${registries.modules.get().size} modules)`\n\t\t);\n\t}\n\n\t/**\n\t * Login and start the bot.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync start() {\n\t\tif (!process.env[this._options.tokenReference]) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") return;\n\t\t\telse throw new Error(\"[Trivious] Invalid token reference\");\n\t\t}\n\n\t\tthis.registries.bind(this);\n\t\tawait this.login(process.env[this._options.tokenReference]);\n\t}\n\n\t/**\n\t * Deploy all commands.\n\t *\n\t * @async\n\t * @returns {*}\n\t */\n\tasync deploy() {\n\t\tconst clientId = process.env[this._options.clientIdReference];\n\t\tconst token = process.env[this._options.tokenReference];\n\t\tif (!clientId || !token) throw new Error(\"[Trivious] Invalid clientId or token reference\");\n\n\t\tconst slashCommands = Array.from(this.registries.commands.get().values());\n\t\tconst body = [...slashCommands.map(command => command.toJSON())];\n\n\t\tconst rest = new REST({ version: \"10\" }).setToken(token);\n\t\tawait rest.put(Routes.applicationCommands(clientId), { body });\n\t\tconsole.log(`[Trivious] Deployed ${body.length} commands`);\n\t}\n\n\t/**\n\t * Set the roles tied to a permission level.\n\t *\n\t * @param {Record<string, PermissionLevel>} roles\n\t */\n\tsetRolePermissions(roles: Record<string, PermissionLevel>) {\n\t\tthis._options.rolePermissions = roles;\n\t}\n\n\tget rolePermissions() {\n\t\treturn this._options.rolePermissions ?? {};\n\t}\n}\n"]}
@@ -0,0 +1,307 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var discord_js = require('discord.js');
6
+ var index_js = require('../../shared/typings/index.js');
7
+ var functions_js = require('../../shared/utility/functions.js');
8
+
9
+ class Command {
10
+ /**
11
+ * Returns whether the command is a SlashCommand.
12
+ *
13
+ * @public
14
+ * @param {Command} this
15
+ * @returns {this is SlashCommand}
16
+ */
17
+ isSlashCommand() {
18
+ return this.data instanceof discord_js.SlashCommandBuilder && this instanceof SlashCommand;
19
+ }
20
+ /**
21
+ * Returns whether the command is a ContextMenuCommand.
22
+ *
23
+ * @public
24
+ * @param {Command} this
25
+ * @returns {this is ContextMenuCommand}
26
+ */
27
+ isContextMenuCommand() {
28
+ return this.data instanceof discord_js.ContextMenuCommandBuilder && this instanceof ContextMenuCommand;
29
+ }
30
+ /**
31
+ * Returns JSON of the command builder.
32
+ *
33
+ * @public
34
+ * @returns {*}
35
+ */
36
+ toJSON() {
37
+ return this.data.toJSON();
38
+ }
39
+ /**
40
+ * Reply to the interaction respecting command metadata and if the interaction has already been replied to.
41
+ *
42
+ * @public
43
+ * @async
44
+ * @param {CommandInteraction} interaction
45
+ * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options
46
+ * @returns {*}
47
+ */
48
+ async reply(interaction, options) {
49
+ if (interaction.replied) {
50
+ await interaction.editReply(options);
51
+ return;
52
+ }
53
+ const newOptions = { ...options };
54
+ if (this.metadata.ephemeralReply) newOptions.flags = ["Ephemeral"];
55
+ await interaction.reply(newOptions);
56
+ }
57
+ /**
58
+ * Validate permissions for a user/member in a guild.
59
+ *
60
+ * @async
61
+ * @param {CommandInteraction} interaction
62
+ * @param {PermissionLevel} permission
63
+ * @param {boolean} [doReply=true]
64
+ * @returns {unknown}
65
+ */
66
+ async validateGuildPermission(client, interaction, permission, doReply = true) {
67
+ const isContextMenu = interaction.isContextMenuCommand();
68
+ const isChatInput = interaction.isChatInputCommand();
69
+ const requiresGuildCheck = isContextMenu || isChatInput && (this.isSlashCommand() ? this.metadata.guildOnly : false);
70
+ if (!requiresGuildCheck) return true;
71
+ const member = interaction.member;
72
+ const memberHasPermission = functions_js.hasPermission(client, { permission, member });
73
+ if (!memberHasPermission && doReply) {
74
+ await this.reply(interaction, {
75
+ content: `You do not have permission to run this command, required permission: \`${index_js.PermissionLevel[permission]}\``
76
+ });
77
+ }
78
+ return memberHasPermission;
79
+ }
80
+ }
81
+ class SlashCommand extends Command {
82
+ /**
83
+ * Optional function to run if the SlashCommand has no subcommands or for extra fuctionality.
84
+ *
85
+ * @abstract
86
+ * @type {?(
87
+ * client: TriviousClient,
88
+ * interaction: ChatInputCommandInteraction
89
+ * ) => Promise<void>}
90
+ */
91
+ run;
92
+ /**
93
+ * General handler for the command and its subcommand, if applicable.
94
+ *
95
+ * @public
96
+ * @async
97
+ * @param {TriviousClient} client
98
+ * @param {ChatInputCommandInteraction} interaction
99
+ * @returns {*}
100
+ */
101
+ async execute(client, interaction) {
102
+ const { run, reply, metadata } = this;
103
+ const { options } = interaction;
104
+ if (run) {
105
+ const memberHasPermission2 = await this.validateGuildPermission(
106
+ client,
107
+ interaction,
108
+ metadata.permission,
109
+ false
110
+ );
111
+ if (memberHasPermission2) await run(client, interaction);
112
+ }
113
+ const subcommands = metadata.subcommands;
114
+ if (subcommands.size <= 0) return;
115
+ const subcommand = metadata.subcommands.find(
116
+ (subcmd) => subcmd.data.name === options.getSubcommand()
117
+ );
118
+ if (!subcommand) {
119
+ await reply(interaction, {
120
+ content: "Ran subcommand is outdated or does not have a handler!"
121
+ });
122
+ return;
123
+ }
124
+ const memberHasPermission = await this.validateGuildPermission(
125
+ client,
126
+ interaction,
127
+ subcommand.metadata.permission
128
+ );
129
+ if (!memberHasPermission) return;
130
+ await subcommand.execute(client, interaction);
131
+ }
132
+ }
133
+ class CommandBuilder extends discord_js.SlashCommandBuilder {
134
+ _active = true;
135
+ _guildOnly = false;
136
+ _ownerOnly = false;
137
+ _permission = index_js.PermissionLevel.USER;
138
+ _subcommands = new discord_js.Collection();
139
+ _ephemeralReply = false;
140
+ /**
141
+ * Set the command as disabled.
142
+ *
143
+ * @public
144
+ * @returns {this}
145
+ */
146
+ disable() {
147
+ this._active = false;
148
+ return this;
149
+ }
150
+ /**
151
+ * Set the command as guild only.
152
+ *
153
+ * @public
154
+ * @returns {this}
155
+ */
156
+ setGuildOnly() {
157
+ this._guildOnly = true;
158
+ this._permission = index_js.PermissionLevel.USER;
159
+ this.setContexts(discord_js.InteractionContextType.Guild);
160
+ return this;
161
+ }
162
+ /**
163
+ * Set the command as public only.
164
+ *
165
+ * @public
166
+ * @returns {this}
167
+ */
168
+ setOwnerOnly() {
169
+ this._permission = index_js.PermissionLevel.BOT_OWNER;
170
+ return this;
171
+ }
172
+ /**
173
+ * Set the permission level required to run the command.
174
+ *
175
+ * @public
176
+ * @param {PermissionLevel} permission
177
+ * @returns {this}
178
+ */
179
+ setPermission(permission) {
180
+ if (!this._guildOnly) return this;
181
+ this._permission = permission;
182
+ return this;
183
+ }
184
+ /**
185
+ * Set the interaction as ephemeral.
186
+ *
187
+ * @public
188
+ * @returns {this}
189
+ */
190
+ setEphemeralReply() {
191
+ this._ephemeralReply = true;
192
+ return this;
193
+ }
194
+ /**
195
+ * Build the builder.
196
+ *
197
+ * @public
198
+ * @returns {{ data: CommandBuilder; metadata: CommandMetadata; }}
199
+ */
200
+ build() {
201
+ return {
202
+ data: this,
203
+ metadata: {
204
+ active: this._active,
205
+ guildOnly: this._guildOnly,
206
+ ownerOnly: this._ownerOnly,
207
+ permission: this._permission,
208
+ subcommands: this._subcommands,
209
+ ephemeralReply: this._ephemeralReply
210
+ }
211
+ };
212
+ }
213
+ }
214
+ class ContextMenuCommand extends Command {
215
+ /**
216
+ * Base command handler.
217
+ *
218
+ * @public
219
+ * @async
220
+ * @param {TriviousClient} client
221
+ * @param {ContextMenuCommandInteraction} interaction
222
+ * @returns {*}
223
+ */
224
+ async execute(client, interaction) {
225
+ const { run, metadata } = this;
226
+ const memberHasPermission = await this.validateGuildPermission(
227
+ client,
228
+ interaction,
229
+ metadata.permission,
230
+ false
231
+ );
232
+ if (memberHasPermission) await run(client, interaction);
233
+ }
234
+ }
235
+ class ContextMenuBuilder extends discord_js.ContextMenuCommandBuilder {
236
+ _active = true;
237
+ _ownerOnly = false;
238
+ _permission = index_js.PermissionLevel.USER;
239
+ _ephemeralReply = false;
240
+ /**
241
+ * Set the command as disabled.
242
+ *
243
+ * @public
244
+ * @returns {this}
245
+ */
246
+ disable() {
247
+ this._active = false;
248
+ return this;
249
+ }
250
+ /**
251
+ * Set the command as owner only.
252
+ *
253
+ * @public
254
+ * @returns {this}
255
+ */
256
+ setOwnerOnly() {
257
+ this._permission = index_js.PermissionLevel.BOT_OWNER;
258
+ this._ownerOnly = true;
259
+ return this;
260
+ }
261
+ /**
262
+ * Set the permission level required to run the command.
263
+ *
264
+ * @public
265
+ * @param {PermissionLevel} permission
266
+ * @returns {this}
267
+ */
268
+ setPermission(permission) {
269
+ this._permission = permission;
270
+ return this;
271
+ }
272
+ /**
273
+ * Set the interaction as ephemeral.
274
+ *
275
+ * @public
276
+ * @returns {this}
277
+ */
278
+ setEphemeralReply() {
279
+ this._ephemeralReply = true;
280
+ return this;
281
+ }
282
+ /**
283
+ * Build the builder
284
+ *
285
+ * @public
286
+ * @returns {{ data: ContextMenuBuilder; metadata: ContextMenuMetadata; }}
287
+ */
288
+ build() {
289
+ return {
290
+ data: this,
291
+ metadata: {
292
+ active: this._active,
293
+ ownerOnly: this._ownerOnly,
294
+ permission: this._permission,
295
+ ephemeralReply: this._ephemeralReply
296
+ }
297
+ };
298
+ }
299
+ }
300
+
301
+ exports.CommandBuilder = CommandBuilder;
302
+ exports.ContextMenuBuilder = ContextMenuBuilder;
303
+ exports.ContextMenuCommand = ContextMenuCommand;
304
+ exports.SlashCommand = SlashCommand;
305
+ exports.default = Command;
306
+ //# sourceMappingURL=command.base.cjs.map
307
+ //# sourceMappingURL=command.base.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/core/commands/command.base.ts"],"names":["SlashCommandBuilder","ContextMenuCommandBuilder","hasPermission","PermissionLevel","memberHasPermission","Collection","InteractionContextType"],"mappings":"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","file":"command.base.cjs","sourcesContent":["import {\n\tCollection,\n\tContextMenuCommandBuilder,\n\tGuildMember,\n\tInteractionContextType,\n\tInteractionEditReplyOptions,\n\tInteractionReplyOptions,\n\tMessagePayload,\n\tSlashCommandBuilder,\n} from \"discord.js\";\nimport {\n\tCommandInteraction,\n\tCommandMetadata,\n\tContextMenuMetadata,\n\tPermissionLevel,\n} from \"src/shared/typings/index.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\nimport {\n\tChatInputCommandInteraction,\n\tContextMenuCommandInteraction,\n\tSubcommand,\n} from \"src/index.js\";\n\n/**\n * Base class for a Command.\n *\n * @export\n * @abstract\n * @class Command\n * @typedef {Command}\n */\nexport default abstract class Command {\n\tabstract data: SlashCommandBuilder | ContextMenuCommandBuilder;\n\tabstract metadata: CommandMetadata | ContextMenuMetadata;\n\n\t/**\n\t * Returns whether the command is a SlashCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is SlashCommand}\n\t */\n\tpublic isSlashCommand(this: Command): this is SlashCommand {\n\t\treturn this.data instanceof SlashCommandBuilder && this instanceof SlashCommand;\n\t}\n\n\t/**\n\t * Returns whether the command is a ContextMenuCommand.\n\t *\n\t * @public\n\t * @param {Command} this\n\t * @returns {this is ContextMenuCommand}\n\t */\n\tpublic isContextMenuCommand(this: Command): this is ContextMenuCommand {\n\t\treturn this.data instanceof ContextMenuCommandBuilder && this instanceof ContextMenuCommand;\n\t}\n\n\t/**\n\t * Returns JSON of the command builder.\n\t *\n\t * @public\n\t * @returns {*}\n\t */\n\tpublic toJSON() {\n\t\treturn this.data.toJSON();\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 * @public\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options\n\t * @returns {*}\n\t */\n\tpublic async reply(\n\t\tinteraction: CommandInteraction,\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\t/**\n\t * Validate permissions for a user/member in a guild.\n\t *\n\t * @async\n\t * @param {CommandInteraction} interaction\n\t * @param {PermissionLevel} permission\n\t * @param {boolean} [doReply=true]\n\t * @returns {unknown}\n\t */\n\tasync validateGuildPermission(\n\t\tclient: TriviousClient,\n\t\tinteraction: CommandInteraction,\n\t\tpermission: PermissionLevel,\n\t\tdoReply: boolean = true\n\t) {\n\t\tconst isContextMenu = interaction.isContextMenuCommand();\n\t\tconst isChatInput = interaction.isChatInputCommand();\n\n\t\tconst requiresGuildCheck =\n\t\t\tisContextMenu || (isChatInput && (this.isSlashCommand() ? this.metadata.guildOnly : false));\n\t\tif (!requiresGuildCheck) return true;\n\n\t\tconst member = interaction.member as GuildMember;\n\t\tconst memberHasPermission = hasPermission(client, { permission, member });\n\n\t\tif (!memberHasPermission && doReply) {\n\t\t\tawait this.reply(interaction, {\n\t\t\t\tcontent: `You do not have permission to run this command, required permission: \\`${PermissionLevel[permission]}\\``,\n\t\t\t});\n\t\t}\n\n\t\treturn memberHasPermission;\n\t}\n}\n\n/**\n * Base SlashCommand.\n *\n * @export\n * @abstract\n * @class SlashCommand\n * @typedef {SlashCommand}\n * @extends {Command}\n */\nexport abstract class SlashCommand extends Command {\n\tabstract data: SlashCommandBuilder;\n\tabstract metadata: CommandMetadata;\n\t/**\n\t * Optional function to run if the SlashCommand has no subcommands or for extra fuctionality.\n\t *\n\t * @abstract\n\t * @type {?(\n\t * \t\tclient: TriviousClient,\n\t * \t\tinteraction: ChatInputCommandInteraction\n\t * \t) => Promise<void>}\n\t */\n\trun?: (client: TriviousClient, interaction: ChatInputCommandInteraction) => Promise<void>;\n\n\t/**\n\t * General handler for the command and its subcommand, if applicable.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ChatInputCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tpublic async execute(client: TriviousClient, interaction: ChatInputCommandInteraction) {\n\t\tconst { run, reply, metadata } = this;\n\t\tconst { options } = interaction;\n\n\t\tif (run) {\n\t\t\tconst memberHasPermission = await this.validateGuildPermission(\n\t\t\t\tclient,\n\t\t\t\tinteraction,\n\t\t\t\tmetadata.permission,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif (memberHasPermission) await run(client, interaction);\n\t\t}\n\n\t\tconst subcommands = metadata.subcommands;\n\t\tif (subcommands.size <= 0) return;\n\n\t\tconst subcommand = metadata.subcommands.find(\n\t\t\tsubcmd => subcmd.data.name === options.getSubcommand()\n\t\t);\n\t\tif (!subcommand) {\n\t\t\tawait reply(interaction, {\n\t\t\t\tcontent: \"Ran subcommand is outdated or does not have a handler!\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst memberHasPermission = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tsubcommand.metadata.permission\n\t\t);\n\t\tif (!memberHasPermission) return;\n\n\t\tawait subcommand.execute(client, interaction);\n\t}\n}\n\n/**\n * Base CommandBuilder.\n *\n * @export\n * @class CommandBuilder\n * @typedef {CommandBuilder}\n * @extends {SlashCommandBuilder}\n */\nexport class CommandBuilder extends SlashCommandBuilder {\n\tprivate _active = true;\n\tprivate _guildOnly = false;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _subcommands = new Collection<string, Subcommand>();\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic disable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as guild only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setGuildOnly(): this {\n\t\tthis._guildOnly = true;\n\t\tthis._permission = PermissionLevel.USER;\n\t\tthis.setContexts(InteractionContextType.Guild);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as public only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\n\t *\n\t * @public\n\t * @param {PermissionLevel} permission\n\t * @returns {this}\n\t */\n\tpublic setPermission(permission: PermissionLevel): this {\n\t\tif (!this._guildOnly) return this;\n\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 * Build the builder.\n\t *\n\t * @public\n\t * @returns {{ data: CommandBuilder; metadata: CommandMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tdata: this as CommandBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\tguildOnly: this._guildOnly,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tsubcommands: this._subcommands,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies CommandMetadata,\n\t\t};\n\t}\n}\n\n/**\n * Base ContextMenuCommand.\n *\n * @export\n * @abstract\n * @class ContextMenuCommand\n * @typedef {ContextMenuCommand}\n * @extends {Command}\n */\nexport abstract class ContextMenuCommand extends Command {\n\tabstract data: ContextMenuCommandBuilder;\n\tabstract metadata: ContextMenuMetadata;\n\t/**\n\t * Function to run when the command is used.\n\t *\n\t * @abstract\n\t * @type {(\n\t * \t\tclient: TriviousClient,\n\t * \t\tinteraction: ContextMenuCommandInteraction\n\t * \t) => Promise<void>}\n\t */\n\tabstract run: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ContextMenuCommandInteraction\n\t) => Promise<void>;\n\n\t/**\n\t * Base command handler.\n\t *\n\t * @public\n\t * @async\n\t * @param {TriviousClient} client\n\t * @param {ContextMenuCommandInteraction} interaction\n\t * @returns {*}\n\t */\n\tpublic async execute(client: TriviousClient, interaction: ContextMenuCommandInteraction) {\n\t\tconst { run, metadata } = this;\n\n\t\tconst memberHasPermission = await this.validateGuildPermission(\n\t\t\tclient,\n\t\t\tinteraction,\n\t\t\tmetadata.permission,\n\t\t\tfalse\n\t\t);\n\t\tif (memberHasPermission) await run(client, interaction);\n\t}\n}\n\n/**\n * Base ContextMenuBuilder.\n *\n * @export\n * @class ContextMenuBuilder\n * @typedef {ContextMenuBuilder}\n * @extends {ContextMenuCommandBuilder}\n */\nexport class ContextMenuBuilder extends ContextMenuCommandBuilder {\n\tprivate _active = true;\n\tprivate _ownerOnly = false;\n\tprivate _permission = PermissionLevel.USER;\n\tprivate _ephemeralReply = false;\n\n\t/**\n\t * Set the command as disabled.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic disable(): this {\n\t\tthis._active = false;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the command as owner only.\n\t *\n\t * @public\n\t * @returns {this}\n\t */\n\tpublic setOwnerOnly(): this {\n\t\tthis._permission = PermissionLevel.BOT_OWNER;\n\t\tthis._ownerOnly = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the permission level required to run the command.\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 * Build the builder\n\t *\n\t * @public\n\t * @returns {{ data: ContextMenuBuilder; metadata: ContextMenuMetadata; }}\n\t */\n\tpublic build() {\n\t\treturn {\n\t\t\tdata: this as ContextMenuBuilder,\n\t\t\tmetadata: {\n\t\t\t\tactive: this._active,\n\t\t\t\townerOnly: this._ownerOnly,\n\t\t\t\tpermission: this._permission,\n\t\t\t\tephemeralReply: this._ephemeralReply,\n\t\t\t} satisfies ContextMenuMetadata,\n\t\t};\n\t}\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import 'discord.js';
2
+ export { j as CommandBuilder, l as ContextMenuBuilder, k as ContextMenuCommand, S as SlashCommand, i as default } from '../../index-BjPKCNAw.cjs';
3
+ import '../../shared/typings/registry.cjs';
@@ -0,0 +1,3 @@
1
+ import 'discord.js';
2
+ export { j as CommandBuilder, l as ContextMenuBuilder, k as ContextMenuCommand, S as SlashCommand, i as default } from '../../index-5IsAwOsi.js';
3
+ import '../../shared/typings/registry.js';