trivious 1.3.21 → 1.3.22

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/index.cjs +1445 -67
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +973 -3
  4. package/dist/index.d.ts +973 -3
  5. package/dist/index.js +1434 -10
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/dist/core/client/trivious.client.cjs +0 -90
  9. package/dist/core/client/trivious.client.cjs.map +0 -1
  10. package/dist/core/client/trivious.client.d.cts +0 -3
  11. package/dist/core/client/trivious.client.d.ts +0 -3
  12. package/dist/core/client/trivious.client.js +0 -88
  13. package/dist/core/client/trivious.client.js.map +0 -1
  14. package/dist/core/commands/command.base.cjs +0 -224
  15. package/dist/core/commands/command.base.cjs.map +0 -1
  16. package/dist/core/commands/command.base.d.cts +0 -3
  17. package/dist/core/commands/command.base.d.ts +0 -3
  18. package/dist/core/commands/command.base.js +0 -214
  19. package/dist/core/commands/command.base.js.map +0 -1
  20. package/dist/core/commands/contextcommand.base.cjs +0 -98
  21. package/dist/core/commands/contextcommand.base.cjs.map +0 -1
  22. package/dist/core/commands/contextcommand.base.d.cts +0 -3
  23. package/dist/core/commands/contextcommand.base.d.ts +0 -3
  24. package/dist/core/commands/contextcommand.base.js +0 -93
  25. package/dist/core/commands/contextcommand.base.js.map +0 -1
  26. package/dist/core/commands/subcommand.base.cjs +0 -96
  27. package/dist/core/commands/subcommand.base.cjs.map +0 -1
  28. package/dist/core/commands/subcommand.base.d.cts +0 -3
  29. package/dist/core/commands/subcommand.base.d.ts +0 -3
  30. package/dist/core/commands/subcommand.base.js +0 -91
  31. package/dist/core/commands/subcommand.base.js.map +0 -1
  32. package/dist/core/components/component.base.cjs +0 -111
  33. package/dist/core/components/component.base.cjs.map +0 -1
  34. package/dist/core/components/component.base.d.cts +0 -3
  35. package/dist/core/components/component.base.d.ts +0 -3
  36. package/dist/core/components/component.base.js +0 -106
  37. package/dist/core/components/component.base.js.map +0 -1
  38. package/dist/core/events/interactionCreate.cjs +0 -68
  39. package/dist/core/events/interactionCreate.cjs.map +0 -1
  40. package/dist/core/events/interactionCreate.d.cts +0 -10
  41. package/dist/core/events/interactionCreate.d.ts +0 -10
  42. package/dist/core/events/interactionCreate.js +0 -66
  43. package/dist/core/events/interactionCreate.js.map +0 -1
  44. package/dist/core/registry/command.registry.cjs +0 -56
  45. package/dist/core/registry/command.registry.cjs.map +0 -1
  46. package/dist/core/registry/command.registry.d.cts +0 -3
  47. package/dist/core/registry/command.registry.d.ts +0 -3
  48. package/dist/core/registry/command.registry.js +0 -54
  49. package/dist/core/registry/command.registry.js.map +0 -1
  50. package/dist/core/registry/component.registry.cjs +0 -42
  51. package/dist/core/registry/component.registry.cjs.map +0 -1
  52. package/dist/core/registry/component.registry.d.cts +0 -3
  53. package/dist/core/registry/component.registry.d.ts +0 -3
  54. package/dist/core/registry/component.registry.js +0 -40
  55. package/dist/core/registry/component.registry.js.map +0 -1
  56. package/dist/core/registry/event.registry.cjs +0 -57
  57. package/dist/core/registry/event.registry.cjs.map +0 -1
  58. package/dist/core/registry/event.registry.d.cts +0 -3
  59. package/dist/core/registry/event.registry.d.ts +0 -3
  60. package/dist/core/registry/event.registry.js +0 -51
  61. package/dist/core/registry/event.registry.js.map +0 -1
  62. package/dist/core/registry/index.cjs +0 -49
  63. package/dist/core/registry/index.cjs.map +0 -1
  64. package/dist/core/registry/index.d.cts +0 -19
  65. package/dist/core/registry/index.d.ts +0 -19
  66. package/dist/core/registry/index.js +0 -39
  67. package/dist/core/registry/index.js.map +0 -1
  68. package/dist/core/registry/module.registry.cjs +0 -57
  69. package/dist/core/registry/module.registry.cjs.map +0 -1
  70. package/dist/core/registry/module.registry.d.cts +0 -3
  71. package/dist/core/registry/module.registry.d.ts +0 -3
  72. package/dist/core/registry/module.registry.js +0 -55
  73. package/dist/core/registry/module.registry.js.map +0 -1
  74. package/dist/index-BPaYmWRO.d.ts +0 -927
  75. package/dist/index-CU2Xl9Xo.d.cts +0 -927
  76. package/dist/shared/typings/client.cjs +0 -4
  77. package/dist/shared/typings/client.cjs.map +0 -1
  78. package/dist/shared/typings/client.d.cts +0 -3
  79. package/dist/shared/typings/client.d.ts +0 -3
  80. package/dist/shared/typings/client.js +0 -3
  81. package/dist/shared/typings/client.js.map +0 -1
  82. package/dist/shared/typings/commands.cjs +0 -4
  83. package/dist/shared/typings/commands.cjs.map +0 -1
  84. package/dist/shared/typings/commands.d.cts +0 -3
  85. package/dist/shared/typings/commands.d.ts +0 -3
  86. package/dist/shared/typings/commands.js +0 -3
  87. package/dist/shared/typings/commands.js.map +0 -1
  88. package/dist/shared/typings/components.cjs +0 -22
  89. package/dist/shared/typings/components.cjs.map +0 -1
  90. package/dist/shared/typings/components.d.cts +0 -3
  91. package/dist/shared/typings/components.d.ts +0 -3
  92. package/dist/shared/typings/components.js +0 -19
  93. package/dist/shared/typings/components.js.map +0 -1
  94. package/dist/shared/typings/events.cjs +0 -4
  95. package/dist/shared/typings/events.cjs.map +0 -1
  96. package/dist/shared/typings/events.d.cts +0 -3
  97. package/dist/shared/typings/events.d.ts +0 -3
  98. package/dist/shared/typings/events.js +0 -3
  99. package/dist/shared/typings/events.js.map +0 -1
  100. package/dist/shared/typings/index.cjs +0 -56
  101. package/dist/shared/typings/index.cjs.map +0 -1
  102. package/dist/shared/typings/index.d.cts +0 -3
  103. package/dist/shared/typings/index.d.ts +0 -3
  104. package/dist/shared/typings/index.js +0 -9
  105. package/dist/shared/typings/index.js.map +0 -1
  106. package/dist/shared/typings/module.cjs +0 -4
  107. package/dist/shared/typings/module.cjs.map +0 -1
  108. package/dist/shared/typings/module.d.cts +0 -3
  109. package/dist/shared/typings/module.d.ts +0 -3
  110. package/dist/shared/typings/module.js +0 -3
  111. package/dist/shared/typings/module.js.map +0 -1
  112. package/dist/shared/typings/permissions.cjs +0 -22
  113. package/dist/shared/typings/permissions.cjs.map +0 -1
  114. package/dist/shared/typings/permissions.d.cts +0 -3
  115. package/dist/shared/typings/permissions.d.ts +0 -3
  116. package/dist/shared/typings/permissions.js +0 -19
  117. package/dist/shared/typings/permissions.js.map +0 -1
  118. package/dist/shared/typings/registry.cjs +0 -63
  119. package/dist/shared/typings/registry.cjs.map +0 -1
  120. package/dist/shared/typings/registry.d.cts +0 -51
  121. package/dist/shared/typings/registry.d.ts +0 -51
  122. package/dist/shared/typings/registry.js +0 -61
  123. package/dist/shared/typings/registry.js.map +0 -1
  124. package/dist/shared/utility/functions.cjs +0 -81
  125. package/dist/shared/utility/functions.cjs.map +0 -1
  126. package/dist/shared/utility/functions.d.cts +0 -56
  127. package/dist/shared/utility/functions.d.ts +0 -56
  128. package/dist/shared/utility/functions.js +0 -74
  129. package/dist/shared/utility/functions.js.map +0 -1
@@ -1,224 +0,0 @@
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 ContextMenuCommand = require('./contextcommand.base.js');
8
- var functions_js = require('../../shared/utility/functions.js');
9
-
10
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
-
12
- var ContextMenuCommand__default = /*#__PURE__*/_interopDefault(ContextMenuCommand);
13
-
14
- class Command {
15
- /**
16
- * Returns whether the command is a SlashCommand.
17
- *
18
- * @public
19
- * @param {Command} this
20
- * @returns {this is SlashCommand}
21
- */
22
- isSlashCommand() {
23
- return this.data instanceof discord_js.SlashCommandBuilder && this instanceof SlashCommand;
24
- }
25
- /**
26
- * Returns whether the command is a ContextMenuCommand.
27
- *
28
- * @public
29
- * @param {Command} this
30
- * @returns {this is ContextMenuCommand}
31
- */
32
- isContextMenuCommand() {
33
- return this.data instanceof discord_js.ContextMenuCommandBuilder && this instanceof ContextMenuCommand__default.default;
34
- }
35
- /**
36
- * Returns JSON of the command builder.
37
- *
38
- * @public
39
- * @returns {*}
40
- */
41
- toJSON() {
42
- return this.data.toJSON();
43
- }
44
- /**
45
- * Reply to the interaction respecting command metadata and if the interaction has already been replied to.
46
- *
47
- * @public
48
- * @async
49
- * @param {CommandInteraction} interaction
50
- * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options
51
- * @returns {*}
52
- */
53
- async reply(interaction, options) {
54
- if (interaction.replied) {
55
- await interaction.editReply(options);
56
- return;
57
- }
58
- const newOptions = { ...options };
59
- if (this.metadata.ephemeralReply) newOptions.flags = ["Ephemeral"];
60
- await interaction.reply(newOptions);
61
- }
62
- /**
63
- * Validate permissions for a user/member in a guild.
64
- *
65
- * @async
66
- * @param {CommandInteraction} interaction
67
- * @param {PermissionLevel} permission
68
- * @param {boolean} [doReply=true]
69
- * @returns {unknown}
70
- */
71
- async validateGuildPermission(client, interaction, permission, doReply = true) {
72
- const isContextMenu = interaction.isContextMenuCommand();
73
- const isChatInput = interaction.isChatInputCommand();
74
- const requiresGuildCheck = isContextMenu || isChatInput && (this.isSlashCommand() ? this.metadata.guildOnly : false);
75
- if (!requiresGuildCheck) return true;
76
- const member = interaction.member;
77
- const memberHasPermission = functions_js.hasPermission(client, { permission, member });
78
- if (!memberHasPermission && doReply) {
79
- await this.reply(interaction, {
80
- content: `You do not have permission to run this command, required permission: \`${index_js.PermissionLevel[permission]}\``
81
- });
82
- }
83
- return memberHasPermission;
84
- }
85
- }
86
- class SlashCommand extends Command {
87
- /**
88
- * Optional function to run if the SlashCommand has no subcommands or for extra fuctionality.
89
- *
90
- * @abstract
91
- * @type {?(
92
- * client: TriviousClient,
93
- * interaction: ChatInputCommandInteraction
94
- * ) => Promise<void>}
95
- */
96
- run;
97
- /**
98
- * General handler for the command and its subcommand, if applicable.
99
- *
100
- * @public
101
- * @async
102
- * @param {TriviousClient} client
103
- * @param {ChatInputCommandInteraction} interaction
104
- * @returns {*}
105
- */
106
- async execute(client, interaction) {
107
- const { run, reply, metadata } = this;
108
- const { options } = interaction;
109
- if (run) {
110
- const memberHasPermission2 = await this.validateGuildPermission(
111
- client,
112
- interaction,
113
- metadata.permission,
114
- false
115
- );
116
- if (memberHasPermission2) await run(client, interaction);
117
- }
118
- const subcommands = metadata.subcommands;
119
- if (subcommands.size <= 0) return;
120
- const subcommand = metadata.subcommands.find(
121
- (subcmd) => subcmd.data.name === options.getSubcommand()
122
- );
123
- if (!subcommand) {
124
- await reply(interaction, {
125
- content: "Ran subcommand is outdated or does not have a handler!"
126
- });
127
- return;
128
- }
129
- const memberHasPermission = await this.validateGuildPermission(
130
- client,
131
- interaction,
132
- subcommand.metadata.permission
133
- );
134
- if (!memberHasPermission) return;
135
- await subcommand.execute(client, interaction);
136
- }
137
- }
138
- class CommandBuilder extends discord_js.SlashCommandBuilder {
139
- _active = true;
140
- _guildOnly = false;
141
- _ownerOnly = false;
142
- _permission = index_js.PermissionLevel.USER;
143
- _subcommands = new discord_js.Collection();
144
- _ephemeralReply = false;
145
- /**
146
- * Set the command as disabled.
147
- *
148
- * @public
149
- * @returns {this}
150
- */
151
- disable() {
152
- this._active = false;
153
- return this;
154
- }
155
- /**
156
- * Set the command as guild only.
157
- *
158
- * @public
159
- * @returns {this}
160
- */
161
- setGuildOnly() {
162
- this._guildOnly = true;
163
- this._permission = index_js.PermissionLevel.USER;
164
- this.setContexts(discord_js.InteractionContextType.Guild);
165
- return this;
166
- }
167
- /**
168
- * Set the command as public only.
169
- *
170
- * @public
171
- * @returns {this}
172
- */
173
- setOwnerOnly() {
174
- this._permission = index_js.PermissionLevel.BOT_OWNER;
175
- return this;
176
- }
177
- /**
178
- * Set the permission level required to run the command.
179
- *
180
- * @public
181
- * @param {PermissionLevel} permission
182
- * @returns {this}
183
- */
184
- setPermission(permission) {
185
- if (!this._guildOnly) return this;
186
- this._permission = permission;
187
- return this;
188
- }
189
- /**
190
- * Set the interaction as ephemeral.
191
- *
192
- * @public
193
- * @returns {this}
194
- */
195
- setEphemeralReply() {
196
- this._ephemeralReply = true;
197
- return this;
198
- }
199
- /**
200
- * Build the builder.
201
- *
202
- * @public
203
- * @returns {{ data: CommandBuilder; metadata: CommandMetadata; }}
204
- */
205
- build() {
206
- return {
207
- data: this,
208
- metadata: {
209
- active: this._active,
210
- guildOnly: this._guildOnly,
211
- ownerOnly: this._ownerOnly,
212
- permission: this._permission,
213
- subcommands: this._subcommands,
214
- ephemeralReply: this._ephemeralReply
215
- }
216
- };
217
- }
218
- }
219
-
220
- exports.CommandBuilder = CommandBuilder;
221
- exports.SlashCommand = SlashCommand;
222
- exports.default = Command;
223
- //# sourceMappingURL=command.base.cjs.map
224
- //# sourceMappingURL=command.base.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/commands/command.base.ts"],"names":["SlashCommandBuilder","ContextMenuCommandBuilder","ContextMenuCommand","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 ContextMenuCommand from \"./contextcommand.base.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\nimport { ChatInputCommandInteraction, Subcommand } 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?: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ChatInputCommandInteraction\n\t) => 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"]}
@@ -1,3 +0,0 @@
1
- import 'discord.js';
2
- export { l as CommandBuilder, S as SlashCommand, k as default } from '../../index-CU2Xl9Xo.cjs';
3
- import '../../shared/typings/registry.cjs';
@@ -1,3 +0,0 @@
1
- import 'discord.js';
2
- export { l as CommandBuilder, S as SlashCommand, k as default } from '../../index-BPaYmWRO.js';
3
- import '../../shared/typings/registry.js';
@@ -1,214 +0,0 @@
1
- import { SlashCommandBuilder, ContextMenuCommandBuilder, Collection, InteractionContextType } from 'discord.js';
2
- import { PermissionLevel } from '../../shared/typings/index.js';
3
- import ContextMenuCommand from './contextcommand.base.js';
4
- import { hasPermission } from '../../shared/utility/functions.js';
5
-
6
- class Command {
7
- /**
8
- * Returns whether the command is a SlashCommand.
9
- *
10
- * @public
11
- * @param {Command} this
12
- * @returns {this is SlashCommand}
13
- */
14
- isSlashCommand() {
15
- return this.data instanceof SlashCommandBuilder && this instanceof SlashCommand;
16
- }
17
- /**
18
- * Returns whether the command is a ContextMenuCommand.
19
- *
20
- * @public
21
- * @param {Command} this
22
- * @returns {this is ContextMenuCommand}
23
- */
24
- isContextMenuCommand() {
25
- return this.data instanceof ContextMenuCommandBuilder && this instanceof ContextMenuCommand;
26
- }
27
- /**
28
- * Returns JSON of the command builder.
29
- *
30
- * @public
31
- * @returns {*}
32
- */
33
- toJSON() {
34
- return this.data.toJSON();
35
- }
36
- /**
37
- * Reply to the interaction respecting command metadata and if the interaction has already been replied to.
38
- *
39
- * @public
40
- * @async
41
- * @param {CommandInteraction} interaction
42
- * @param {(MessagePayload | InteractionEditReplyOptions | InteractionReplyOptions)} options
43
- * @returns {*}
44
- */
45
- async reply(interaction, options) {
46
- if (interaction.replied) {
47
- await interaction.editReply(options);
48
- return;
49
- }
50
- const newOptions = { ...options };
51
- if (this.metadata.ephemeralReply) newOptions.flags = ["Ephemeral"];
52
- await interaction.reply(newOptions);
53
- }
54
- /**
55
- * Validate permissions for a user/member in a guild.
56
- *
57
- * @async
58
- * @param {CommandInteraction} interaction
59
- * @param {PermissionLevel} permission
60
- * @param {boolean} [doReply=true]
61
- * @returns {unknown}
62
- */
63
- async validateGuildPermission(client, interaction, permission, doReply = true) {
64
- const isContextMenu = interaction.isContextMenuCommand();
65
- const isChatInput = interaction.isChatInputCommand();
66
- const requiresGuildCheck = isContextMenu || isChatInput && (this.isSlashCommand() ? this.metadata.guildOnly : false);
67
- if (!requiresGuildCheck) return true;
68
- const member = interaction.member;
69
- const memberHasPermission = hasPermission(client, { permission, member });
70
- if (!memberHasPermission && doReply) {
71
- await this.reply(interaction, {
72
- content: `You do not have permission to run this command, required permission: \`${PermissionLevel[permission]}\``
73
- });
74
- }
75
- return memberHasPermission;
76
- }
77
- }
78
- class SlashCommand extends Command {
79
- /**
80
- * Optional function to run if the SlashCommand has no subcommands or for extra fuctionality.
81
- *
82
- * @abstract
83
- * @type {?(
84
- * client: TriviousClient,
85
- * interaction: ChatInputCommandInteraction
86
- * ) => Promise<void>}
87
- */
88
- run;
89
- /**
90
- * General handler for the command and its subcommand, if applicable.
91
- *
92
- * @public
93
- * @async
94
- * @param {TriviousClient} client
95
- * @param {ChatInputCommandInteraction} interaction
96
- * @returns {*}
97
- */
98
- async execute(client, interaction) {
99
- const { run, reply, metadata } = this;
100
- const { options } = interaction;
101
- if (run) {
102
- const memberHasPermission2 = await this.validateGuildPermission(
103
- client,
104
- interaction,
105
- metadata.permission,
106
- false
107
- );
108
- if (memberHasPermission2) await run(client, interaction);
109
- }
110
- const subcommands = metadata.subcommands;
111
- if (subcommands.size <= 0) return;
112
- const subcommand = metadata.subcommands.find(
113
- (subcmd) => subcmd.data.name === options.getSubcommand()
114
- );
115
- if (!subcommand) {
116
- await reply(interaction, {
117
- content: "Ran subcommand is outdated or does not have a handler!"
118
- });
119
- return;
120
- }
121
- const memberHasPermission = await this.validateGuildPermission(
122
- client,
123
- interaction,
124
- subcommand.metadata.permission
125
- );
126
- if (!memberHasPermission) return;
127
- await subcommand.execute(client, interaction);
128
- }
129
- }
130
- class CommandBuilder extends SlashCommandBuilder {
131
- _active = true;
132
- _guildOnly = false;
133
- _ownerOnly = false;
134
- _permission = PermissionLevel.USER;
135
- _subcommands = new Collection();
136
- _ephemeralReply = false;
137
- /**
138
- * Set the command as disabled.
139
- *
140
- * @public
141
- * @returns {this}
142
- */
143
- disable() {
144
- this._active = false;
145
- return this;
146
- }
147
- /**
148
- * Set the command as guild only.
149
- *
150
- * @public
151
- * @returns {this}
152
- */
153
- setGuildOnly() {
154
- this._guildOnly = true;
155
- this._permission = PermissionLevel.USER;
156
- this.setContexts(InteractionContextType.Guild);
157
- return this;
158
- }
159
- /**
160
- * Set the command as public only.
161
- *
162
- * @public
163
- * @returns {this}
164
- */
165
- setOwnerOnly() {
166
- this._permission = PermissionLevel.BOT_OWNER;
167
- return this;
168
- }
169
- /**
170
- * Set the permission level required to run the command.
171
- *
172
- * @public
173
- * @param {PermissionLevel} permission
174
- * @returns {this}
175
- */
176
- setPermission(permission) {
177
- if (!this._guildOnly) return this;
178
- this._permission = permission;
179
- return this;
180
- }
181
- /**
182
- * Set the interaction as ephemeral.
183
- *
184
- * @public
185
- * @returns {this}
186
- */
187
- setEphemeralReply() {
188
- this._ephemeralReply = true;
189
- return this;
190
- }
191
- /**
192
- * Build the builder.
193
- *
194
- * @public
195
- * @returns {{ data: CommandBuilder; metadata: CommandMetadata; }}
196
- */
197
- build() {
198
- return {
199
- data: this,
200
- metadata: {
201
- active: this._active,
202
- guildOnly: this._guildOnly,
203
- ownerOnly: this._ownerOnly,
204
- permission: this._permission,
205
- subcommands: this._subcommands,
206
- ephemeralReply: this._ephemeralReply
207
- }
208
- };
209
- }
210
- }
211
-
212
- export { CommandBuilder, SlashCommand, Command as default };
213
- //# sourceMappingURL=command.base.js.map
214
- //# sourceMappingURL=command.base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/commands/command.base.ts"],"names":["memberHasPermission"],"mappings":"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","file":"command.base.js","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 ContextMenuCommand from \"./contextcommand.base.js\";\nimport TriviousClient from \"../client/trivious.client.js\";\nimport { hasPermission } from \"src/shared/utility/functions.js\";\nimport { ChatInputCommandInteraction, Subcommand } 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?: (\n\t\tclient: TriviousClient,\n\t\tinteraction: ChatInputCommandInteraction\n\t) => 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"]}
@@ -1,98 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var discord_js = require('discord.js');
6
- var index_js = require('../../index.js');
7
-
8
- class ContextMenuCommand extends index_js.Command {
9
- /**
10
- * Base command handler.
11
- *
12
- * @public
13
- * @async
14
- * @param {TriviousClient} client
15
- * @param {ContextMenuCommandInteraction} interaction
16
- * @returns {*}
17
- */
18
- async execute(client, interaction) {
19
- const { run, metadata } = this;
20
- const memberHasPermission = await this.validateGuildPermission(
21
- client,
22
- interaction,
23
- metadata.permission,
24
- false
25
- );
26
- if (memberHasPermission) await run(client, interaction);
27
- }
28
- }
29
- class ContextMenuBuilder extends discord_js.ContextMenuCommandBuilder {
30
- _active = true;
31
- _ownerOnly = false;
32
- _permission = index_js.PermissionLevel.USER;
33
- _ephemeralReply = false;
34
- /**
35
- * Set the command as disabled.
36
- *
37
- * @public
38
- * @returns {this}
39
- */
40
- disable() {
41
- this._active = false;
42
- return this;
43
- }
44
- /**
45
- * Set the command as owner only.
46
- *
47
- * @public
48
- * @returns {this}
49
- */
50
- setOwnerOnly() {
51
- this._permission = index_js.PermissionLevel.BOT_OWNER;
52
- this._ownerOnly = true;
53
- return this;
54
- }
55
- /**
56
- * Set the permission level required to run the command.
57
- *
58
- * @public
59
- * @param {PermissionLevel} permission
60
- * @returns {this}
61
- */
62
- setPermission(permission) {
63
- this._permission = permission;
64
- return this;
65
- }
66
- /**
67
- * Set the interaction as ephemeral.
68
- *
69
- * @public
70
- * @returns {this}
71
- */
72
- setEphemeralReply() {
73
- this._ephemeralReply = true;
74
- return this;
75
- }
76
- /**
77
- * Build the builder
78
- *
79
- * @public
80
- * @returns {{ data: ContextMenuBuilder; metadata: ContextMenuMetadata; }}
81
- */
82
- build() {
83
- return {
84
- data: this,
85
- metadata: {
86
- active: this._active,
87
- ownerOnly: this._ownerOnly,
88
- permission: this._permission,
89
- ephemeralReply: this._ephemeralReply
90
- }
91
- };
92
- }
93
- }
94
-
95
- exports.ContextMenuBuilder = ContextMenuBuilder;
96
- exports.default = ContextMenuCommand;
97
- //# sourceMappingURL=contextcommand.base.cjs.map
98
- //# sourceMappingURL=contextcommand.base.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/commands/contextcommand.base.ts"],"names":["Command","ContextMenuCommandBuilder","PermissionLevel"],"mappings":";;;;;;;AAaA,MAAO,2BAAkDA,gBAAA,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BhE,MAAa,OAAA,CAAQ,MAAA,EAAwB,WAAA,EAA4C;AACxF,IAAA,MAAM,EAAE,GAAA,EAAK,QAAA,EAAS,GAAI,IAAA;AAE1B,IAAA,MAAM,mBAAA,GAAsB,MAAM,IAAA,CAAK,uBAAA;AAAA,MACtC,MAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,CAAS,UAAA;AAAA,MACT;AAAA,KACD;AACA,IAAA,IAAI,mBAAA,EAAqB,MAAM,GAAA,CAAI,MAAA,EAAQ,WAAW,CAAA;AAAA,EACvD;AACD;AAUO,MAAM,2BAA2BC,oCAAA,CAA0B;AAAA,EACzD,OAAA,GAAU,IAAA;AAAA,EACV,UAAA,GAAa,KAAA;AAAA,EACb,cAAcC,wBAAA,CAAgB,IAAA;AAAA,EAC9B,eAAA,GAAkB,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQnB,OAAA,GAAgB;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,YAAA,GAAqB;AAC3B,IAAA,IAAA,CAAK,cAAcA,wBAAA,CAAgB,SAAA;AACnC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,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,IAAA,EAAM,IAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACT,QAAQ,IAAA,CAAK,OAAA;AAAA,QACb,WAAW,IAAA,CAAK,UAAA;AAAA,QAChB,YAAY,IAAA,CAAK,WAAA;AAAA,QACjB,gBAAgB,IAAA,CAAK;AAAA;AACtB,KACD;AAAA,EACD;AACD","file":"contextcommand.base.cjs","sourcesContent":["import { ContextMenuCommandBuilder } from \"discord.js\";\nimport { ContextMenuMetadata } from \"src/shared/typings/commands.js\";\nimport { Command, ContextMenuCommandInteraction, PermissionLevel, TriviousClient } from \"src/index.js\";\n\n/**\n * Base ContextMenuCommand.\n *\n * @export\n * @abstract\n * @class ContextMenuCommand\n * @typedef {ContextMenuCommand}\n * @extends {Command}\n */\nexport default 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"]}
@@ -1,3 +0,0 @@
1
- import 'discord.js';
2
- export { j as ContextMenuBuilder, i as default } from '../../index-CU2Xl9Xo.cjs';
3
- import '../../shared/typings/registry.cjs';
@@ -1,3 +0,0 @@
1
- import 'discord.js';
2
- export { j as ContextMenuBuilder, i as default } from '../../index-BPaYmWRO.js';
3
- import '../../shared/typings/registry.js';