xernerx 4.5.6 → 4.5.8

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/build/XernerxContextCommand.d.ts +46 -46
  2. package/dist/build/XernerxContextCommand.d.ts.map +1 -1
  3. package/dist/build/XernerxContextCommand.js +63 -63
  4. package/dist/build/XernerxContextCommand.js.map +1 -1
  5. package/dist/build/XernerxEvent.d.ts +16 -15
  6. package/dist/build/XernerxEvent.d.ts.map +1 -1
  7. package/dist/build/XernerxEvent.js +20 -20
  8. package/dist/build/XernerxEvent.js.map +1 -1
  9. package/dist/build/XernerxInhibitor.d.ts +19 -19
  10. package/dist/build/XernerxInhibitor.d.ts.map +1 -1
  11. package/dist/build/XernerxInhibitor.js +12 -12
  12. package/dist/build/XernerxInhibitor.js.map +1 -1
  13. package/dist/build/XernerxMessageCommand.d.ts +44 -44
  14. package/dist/build/XernerxMessageCommand.d.ts.map +1 -1
  15. package/dist/build/XernerxMessageCommand.js +57 -57
  16. package/dist/build/XernerxMessageCommand.js.map +1 -1
  17. package/dist/build/XernerxSlashCommand.d.ts +56 -56
  18. package/dist/build/XernerxSlashCommand.d.ts.map +1 -1
  19. package/dist/build/XernerxSlashCommand.js +109 -109
  20. package/dist/build/XernerxSlashCommand.js.map +1 -1
  21. package/dist/client/XernerxClient.d.ts +45 -44
  22. package/dist/client/XernerxClient.d.ts.map +1 -1
  23. package/dist/client/XernerxClient.js +74 -73
  24. package/dist/client/XernerxClient.js.map +1 -1
  25. package/dist/client/XernerxShardClient.d.ts +11 -10
  26. package/dist/client/XernerxShardClient.d.ts.map +1 -1
  27. package/dist/client/XernerxShardClient.js +49 -48
  28. package/dist/client/XernerxShardClient.js.map +1 -1
  29. package/dist/functions/deploy.d.ts +1 -0
  30. package/dist/functions/deploy.d.ts.map +1 -1
  31. package/dist/functions/deploy.js +31 -30
  32. package/dist/functions/deploy.js.map +1 -1
  33. package/dist/functions/load.d.ts +1 -0
  34. package/dist/functions/load.d.ts.map +1 -1
  35. package/dist/functions/load.js +28 -27
  36. package/dist/functions/load.js.map +1 -1
  37. package/dist/functions/reload.d.ts +1 -0
  38. package/dist/functions/reload.d.ts.map +1 -1
  39. package/dist/functions/reload.js +35 -34
  40. package/dist/functions/reload.js.map +1 -1
  41. package/dist/functions/sendWebhook.d.ts +1 -0
  42. package/dist/functions/sendWebhook.d.ts.map +1 -1
  43. package/dist/functions/sendWebhook.js +11 -10
  44. package/dist/functions/sendWebhook.js.map +1 -1
  45. package/dist/functions/setPresence.d.ts +1 -0
  46. package/dist/functions/setPresence.d.ts.map +1 -1
  47. package/dist/functions/setPresence.js +18 -17
  48. package/dist/functions/setPresence.js.map +1 -1
  49. package/dist/functions/xernerxUser.d.ts +1 -0
  50. package/dist/functions/xernerxUser.d.ts.map +1 -1
  51. package/dist/functions/xernerxUser.js +6 -8
  52. package/dist/functions/xernerxUser.js.map +1 -1
  53. package/dist/handlers/CommandHandler.d.ts +9 -8
  54. package/dist/handlers/CommandHandler.d.ts.map +1 -1
  55. package/dist/handlers/CommandHandler.js +240 -239
  56. package/dist/handlers/CommandHandler.js.map +1 -1
  57. package/dist/handlers/EventHandler.d.ts +3 -2
  58. package/dist/handlers/EventHandler.d.ts.map +1 -1
  59. package/dist/handlers/EventHandler.js +19 -18
  60. package/dist/handlers/EventHandler.js.map +1 -1
  61. package/dist/handlers/ExtensionHandler.d.ts +3 -2
  62. package/dist/handlers/ExtensionHandler.d.ts.map +1 -1
  63. package/dist/handlers/ExtensionHandler.js +18 -17
  64. package/dist/handlers/ExtensionHandler.js.map +1 -1
  65. package/dist/handlers/Handler.d.ts +8 -7
  66. package/dist/handlers/Handler.d.ts.map +1 -1
  67. package/dist/handlers/Handler.js +32 -31
  68. package/dist/handlers/Handler.js.map +1 -1
  69. package/dist/handlers/InhibitorHandler.d.ts +3 -2
  70. package/dist/handlers/InhibitorHandler.d.ts.map +1 -1
  71. package/dist/handlers/InhibitorHandler.js +19 -18
  72. package/dist/handlers/InhibitorHandler.js.map +1 -1
  73. package/dist/handlers/WebhookHandler.d.ts +4 -3
  74. package/dist/handlers/WebhookHandler.d.ts.map +1 -1
  75. package/dist/handlers/WebhookHandler.js +47 -46
  76. package/dist/handlers/WebhookHandler.js.map +1 -1
  77. package/dist/main.d.ts +27 -26
  78. package/dist/main.d.ts.map +1 -1
  79. package/dist/main.js +27 -26
  80. package/dist/main.js.map +1 -1
  81. package/dist/models/Arguments.d.ts +3 -2
  82. package/dist/models/Arguments.d.ts.map +1 -1
  83. package/dist/models/Arguments.js +135 -134
  84. package/dist/models/Arguments.js.map +1 -1
  85. package/dist/tools/XernerxError.d.ts +5 -4
  86. package/dist/tools/XernerxError.d.ts.map +1 -1
  87. package/dist/tools/XernerxError.js +9 -8
  88. package/dist/tools/XernerxError.js.map +1 -1
  89. package/dist/tools/XernerxLog.d.ts +13 -12
  90. package/dist/tools/XernerxLog.d.ts.map +1 -1
  91. package/dist/tools/XernerxLog.js +76 -80
  92. package/dist/tools/XernerxLog.js.map +1 -1
  93. package/dist/types/extenders.d.ts +43 -12
  94. package/dist/types/extenders.d.ts.map +1 -1
  95. package/dist/types/extenders.js +1 -0
  96. package/dist/types/extenders.js.map +1 -1
  97. package/dist/types/interfaces.d.ts +186 -172
  98. package/dist/types/interfaces.d.ts.map +1 -1
  99. package/dist/types/interfaces.js +1 -0
  100. package/dist/types/interfaces.js.map +1 -1
  101. package/dist/types/types.d.ts +172 -171
  102. package/dist/types/types.d.ts.map +1 -1
  103. package/dist/types/types.js +1 -0
  104. package/dist/types/types.js.map +1 -1
  105. package/dist/utils/ClientUtil.d.ts +13 -6
  106. package/dist/utils/ClientUtil.d.ts.map +1 -1
  107. package/dist/utils/ClientUtil.js +56 -26
  108. package/dist/utils/ClientUtil.js.map +1 -1
  109. package/dist/utils/InteractionUtil.d.ts +10 -5
  110. package/dist/utils/InteractionUtil.d.ts.map +1 -1
  111. package/dist/utils/InteractionUtil.js +97 -8
  112. package/dist/utils/InteractionUtil.js.map +1 -1
  113. package/dist/utils/MessageUtil.d.ts +13 -9
  114. package/dist/utils/MessageUtil.d.ts.map +1 -1
  115. package/dist/utils/MessageUtil.js +130 -37
  116. package/dist/utils/MessageUtil.js.map +1 -1
  117. package/dist/utils/Util.d.ts +4 -3
  118. package/dist/utils/Util.d.ts.map +1 -1
  119. package/dist/utils/Util.js +8 -7
  120. package/dist/utils/Util.js.map +1 -1
  121. package/dist/validators/commandValidation.d.ts +3 -2
  122. package/dist/validators/commandValidation.d.ts.map +1 -1
  123. package/dist/validators/commandValidation.js +43 -42
  124. package/dist/validators/commandValidation.js.map +1 -1
  125. package/dist/validators/inhibitorValidations.d.ts +15 -14
  126. package/dist/validators/inhibitorValidations.d.ts.map +1 -1
  127. package/dist/validators/inhibitorValidations.js +31 -30
  128. package/dist/validators/inhibitorValidations.js.map +1 -1
  129. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ /** @format */
1
2
  import { z } from 'zod';
2
3
  import * as path from 'path';
3
4
  import { GatewayIntentBits } from 'discord.js';
@@ -11,244 +12,244 @@ import { interactionArguments, messageArguments } from '../models/Arguments.js';
11
12
  import { inhibitorValidation } from '../validators/inhibitorValidations.js';
12
13
  import { Style } from 'dumfunctions';
13
14
  export default class CommandHandler extends Handler {
14
- constructor(client) {
15
- super(client);
16
- }
17
- loadMessageCommands(options) {
18
- if (!this.client.options.intents.has(GatewayIntentBits.MessageContent)) new XernerxLog(this.client).warn(`Message commands might not work as you're missing the intent MessageContent!`);
19
- if (!this.client.options.intents.has(GatewayIntentBits.GuildMessages)) new XernerxLog(this.client).warn(`Message commands might not work as you're missing the intent GuildMessages!`);
20
- options = z
21
- .object({
22
- directory: z.string(),
23
- prefix: z.string().or(z.array(z.string())),
24
- allowMention: z.boolean().default(false),
25
- cooldown: z.number().default(0),
26
- permissions: z
27
- .object({
28
- user: z.array(z.string()).default([]),
29
- client: z.array(z.string()).default([]),
30
- dm: z.boolean().default(true),
31
- })
32
- .default({}),
33
- handleEdits: z.boolean().default(false),
34
- handleDeletes: z.boolean().default(false),
35
- handleTyping: z.boolean().default(false),
36
- logging: z.boolean().default(false),
37
- })
38
- .parse(options);
39
- this.client.modules.options.message = options;
40
- const files = this.readdir(options.directory);
41
- for (const file of files) {
42
- const filePath = `${path.resolve(options.directory)}\\${file}`;
43
- this.load(filePath, 'MessageCommand');
44
- }
45
- new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Message Commands.`);
46
- this.emit({
47
- name: 'messageCreate',
48
- fileType: 'MessageCommand',
49
- run: (message) => this.messageCommandRun(message),
50
- });
51
- this.emit({
52
- name: 'messageUpdate',
53
- fileType: 'MessageCommand',
54
- run: (message, message2) => this.messageCommandRun(message, message2),
55
- });
56
- this.emit({
57
- name: 'messageDelete',
58
- fileType: 'MessageCommand',
59
- run: (message) => this.messageCommandRun(message, 'delete'),
60
- });
61
- }
62
- // public reloadMessageCommands() {
63
- // return reload(this.client, 'message');
64
- // }
65
- loadSlashCommands(options) {
66
- if (!this.client.settings.local) new XernerxLog(this.client).warn(`Slash commands might not work as you haven't specified a local guild ID.`);
67
- options = z
68
- .object({
69
- directory: z.string(),
70
- cooldown: z.number().default(0),
71
- permissions: z
72
- .object({
73
- user: z.array(z.string()).default([]),
74
- client: z.array(z.string()).default([]),
75
- dm: z.boolean().default(true),
76
- })
77
- .default({}),
78
- logging: z.boolean().default(false),
79
- defer: z
80
- .object({
81
- reply: z.boolean().default(false),
82
- ephemeral: z.boolean().default(false),
83
- fetchReply: z.boolean().default(false),
84
- })
85
- .default({}),
86
- })
87
- .parse(options);
88
- this.client.modules.options.slash = options;
89
- const files = this.readdir(options.directory);
90
- for (const file of files) {
91
- const filePath = `${path.resolve(options.directory)}\\${file}`;
92
- this.load(filePath, 'SlashCommand');
93
- }
94
- new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Slash Commands.`);
95
- this.emit({
96
- name: 'interactionCreate',
97
- fileType: 'SlashCommand',
98
- run: (interaction) => this.slashCommandRun(interaction),
99
- });
100
- }
101
- loadContextCommands(options) {
102
- if (!this.client.settings.local) new XernerxLog(this.client).warn(`Context commands might not work as you haven't specified a local guild ID.`);
103
- options = z
104
- .object({
105
- directory: z.string(),
106
- cooldown: z.number().default(0),
107
- permissions: z
108
- .object({
109
- user: z.array(z.string()).default([]),
110
- client: z.array(z.string()).default([]),
111
- dm: z.boolean().default(true),
112
- })
113
- .default({}),
114
- logging: z.boolean().default(false),
115
- defer: z
116
- .object({
117
- reply: z.boolean().default(false),
118
- ephemeral: z.boolean().default(false),
119
- fetchReply: z.boolean().default(false),
120
- })
121
- .default({}),
122
- })
123
- .parse(options);
124
- this.client.modules.options.context = options;
125
- const files = this.readdir(options.directory);
126
- for (const file of files) {
127
- const filePath = `${path.resolve(options.directory)}\\${file}`;
128
- this.load(filePath, 'ContextCommand');
129
- }
130
- new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Context Commands.`);
131
- this.emit({
132
- name: 'interactionCreate',
133
- fileType: 'ContextCommand',
134
- run: (interaction) => this.contextCommandRun(interaction),
135
- });
136
- }
137
- async messageCommandRun(message, message2) {
138
- const filetype = 'MessageCommand';
139
- if (message.author.bot) return;
140
- message.util = new MessageUtil(this.client, message);
141
- message.user = await xernerxUser(message, this.client);
142
- if (typeof message2 === 'object') message = message2;
143
- if (message2 === 'delete') {
144
- if (!this.client.cache.messages.has(message.id)) return;
145
- const id = this.client.cache.messages.get(message.id);
146
- if (!id) return;
147
- (async () => {
148
- const msg = await message.channel.messages.fetch(id);
149
- await msg.delete();
150
- this.client.cache.messages.delete(message.id);
151
- })();
152
- return;
153
- }
154
- if (message.content && this.client.modules.options.message) {
155
- const commands = this.client.commands.message;
156
- const prefixes = Array.isArray(this.client.modules.options.message.prefix) ? this.client.modules.options.message.prefix : [this.client.modules.options.message.prefix];
157
- let commandName = null,
158
- cmd,
159
- commandAlias = null,
160
- commandPrefix = null;
161
- commands.map((command) => {
162
- let prefix = null;
163
- if (command.regex && message.content.match(command.regex)) {
164
- const [match] = message.content.match(command.regex) || [null];
165
- if (match) commandName = command.name;
166
- }
167
- const cp = Array.isArray(command.prefix) ? command.prefix : [command.prefix];
168
- prefixes.map((p) => {
169
- if (message.content.startsWith(p)) prefix = p;
170
- });
171
- cp.map((p) => {
172
- if (message.content.startsWith(p)) prefix = p;
173
- });
174
- if (!prefix) return;
175
- if (!commandName)
176
- commandName =
177
- message.content
178
- .replace(prefix, '')
179
- .split(command.separator || / +/)
180
- .shift()
181
- ?.trim()
182
- ?.toLowerCase() || '';
183
- if (!this.client.commands.message.has(commandName) && command.aliases?.includes(commandName)) {
184
- commandAlias = commandName;
185
- commandName = command.name;
186
- }
187
- commandAlias = commandAlias ? commandAlias : commandName;
188
- commandPrefix = prefix;
189
- });
190
- if (!cmd && this.client.modules.options.message.allowMention) {
191
- if (message.mentions.users.has(this.client.user?.id) || message.mentions.repliedUser?.id === this.client.user?.id) {
192
- commandName = message.content.replace(`<@${this.client.user?.id}>`, '').trim().split(/ +/).shift()?.toLowerCase() || null;
193
- commandPrefix = `<@${this.client.user?.id}>`;
194
- }
195
- }
196
- if (this.client.commands.message.has(commandName)) {
197
- if (this.client.modules.options.message?.handleTyping) message.channel.sendTyping();
198
- cmd = this.client.commands.message.get(commandName);
199
- }
200
- if (!cmd) return this.client.emit('commandNotFound', message, filetype);
201
- if (await inhibitorValidation(message, cmd)) return;
202
- message.util.parsed = {
203
- alias: commandAlias,
204
- prefix: commandPrefix,
205
- };
206
- this.client.emit('commandStart', message, cmd, filetype);
207
- return await this.exec(cmd, message, await messageArguments(message, cmd, commandPrefix), filetype);
208
- }
209
- }
210
- async slashCommandRun(interaction) {
211
- const filetype = 'SlashCommand';
212
- interaction.util = new InteractionUtil(this.client, interaction);
213
- interaction.user = await xernerxUser(interaction, this.client);
214
- let cmd = null;
215
- if (this.client.commands.slash.has(interaction.commandName)) cmd = this.client.commands.slash.get(interaction.commandName);
216
- if (await inhibitorValidation(interaction, cmd)) return;
217
- if (!cmd) return this.client.emit('commandNotFound', interaction);
218
- new Promise(async (resolve) => {
219
- if (interaction.isAutocomplete()) {
220
- const focused = interaction.options.getFocused(true);
221
- const options = interaction.options;
222
- await cmd.autocomplete(interaction, focused, options);
223
- } else resolve(true);
224
- })
225
- .then(async () => {
226
- this.client.emit('commandStart', interaction, filetype);
227
- return await this.exec(cmd, interaction, await interactionArguments(interaction, cmd), filetype);
228
- })
229
- .catch((error) => this.client.emit('commandError', interaction, error, cmd, filetype));
230
- }
231
- async contextCommandRun(interaction) {
232
- const filetype = 'ContextCommand';
233
- interaction.util = new InteractionUtil(this.client, interaction);
234
- interaction.user = await xernerxUser(interaction, this.client);
235
- let cmd;
236
- if (this.client.commands.context.has(interaction.commandName)) cmd = this.client.commands.context.get(interaction.commandName);
237
- if (await inhibitorValidation(interaction, cmd)) return;
238
- if (!cmd) return this.client.emit('commandNotFound', interaction, filetype);
239
- this.client.emit('commandStart', interaction, filetype);
240
- return await this.exec(cmd, interaction, await interactionArguments(interaction, cmd), filetype);
241
- }
242
- async exec(cmd, event, args, type) {
243
- try {
244
- if (await commandValidation(event, cmd)) return;
245
- if (cmd.conditions && (await cmd.conditions(event, args))) return;
246
- await cmd.exec(event, args);
247
- return await this.client.emit('commandFinish', event, type);
248
- } catch (error) {
249
- new XernerxLog(this.client).error(`An error occurred executing ${Style.log(cmd.name, { color: Style.TextColor.Blue })}`, error);
250
- return await this.client.emit('commandError', event, error, cmd, type);
251
- }
252
- }
15
+ constructor(client) {
16
+ super(client);
17
+ }
18
+ loadMessageCommands(options) {
19
+ if (!this.client.options.intents.has(GatewayIntentBits.MessageContent)) new XernerxLog(this.client).warn(`Message commands might not work as you're missing the intent MessageContent!`);
20
+ if (!this.client.options.intents.has(GatewayIntentBits.GuildMessages)) new XernerxLog(this.client).warn(`Message commands might not work as you're missing the intent GuildMessages!`);
21
+ options = z
22
+ .object({
23
+ directory: z.string(),
24
+ prefix: z.string().or(z.array(z.string())),
25
+ allowMention: z.boolean().default(false),
26
+ cooldown: z.number().default(0),
27
+ permissions: z
28
+ .object({
29
+ user: z.array(z.string()).default([]),
30
+ client: z.array(z.string()).default([]),
31
+ dm: z.boolean().default(true),
32
+ })
33
+ .default({}),
34
+ handleEdits: z.boolean().default(false),
35
+ handleDeletes: z.boolean().default(false),
36
+ handleTyping: z.boolean().default(false),
37
+ logging: z.boolean().default(false),
38
+ })
39
+ .parse(options);
40
+ this.client.modules.options.message = options;
41
+ const files = this.readdir(options.directory);
42
+ for (const file of files) {
43
+ const filePath = `${path.resolve(options.directory)}\\${file}`;
44
+ this.load(filePath, 'MessageCommand');
45
+ }
46
+ new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Message Commands.`);
47
+ this.emit({
48
+ name: 'messageCreate',
49
+ fileType: 'MessageCommand',
50
+ run: (message) => this.messageCommandRun(message),
51
+ });
52
+ this.emit({
53
+ name: 'messageUpdate',
54
+ fileType: 'MessageCommand',
55
+ run: (message, message2) => this.messageCommandRun(message, message2),
56
+ });
57
+ this.emit({
58
+ name: 'messageDelete',
59
+ fileType: 'MessageCommand',
60
+ run: (message) => this.messageCommandRun(message, 'delete'),
61
+ });
62
+ }
63
+ // public reloadMessageCommands() {
64
+ // return reload(this.client, 'message');
65
+ // }
66
+ loadSlashCommands(options) {
67
+ if (!this.client.settings.local) new XernerxLog(this.client).warn(`Slash commands might not work as you haven't specified a local guild ID.`);
68
+ options = z
69
+ .object({
70
+ directory: z.string(),
71
+ cooldown: z.number().default(0),
72
+ permissions: z
73
+ .object({
74
+ user: z.array(z.string()).default([]),
75
+ client: z.array(z.string()).default([]),
76
+ dm: z.boolean().default(true),
77
+ })
78
+ .default({}),
79
+ logging: z.boolean().default(false),
80
+ defer: z
81
+ .object({
82
+ reply: z.boolean().default(false),
83
+ ephemeral: z.boolean().default(false),
84
+ fetchReply: z.boolean().default(false),
85
+ })
86
+ .default({}),
87
+ })
88
+ .parse(options);
89
+ this.client.modules.options.slash = options;
90
+ const files = this.readdir(options.directory);
91
+ for (const file of files) {
92
+ const filePath = `${path.resolve(options.directory)}\\${file}`;
93
+ this.load(filePath, 'SlashCommand');
94
+ }
95
+ new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Slash Commands.`);
96
+ this.emit({
97
+ name: 'interactionCreate',
98
+ fileType: 'SlashCommand',
99
+ run: (interaction) => this.slashCommandRun(interaction),
100
+ });
101
+ }
102
+ loadContextCommands(options) {
103
+ if (!this.client.settings.local) new XernerxLog(this.client).warn(`Context commands might not work as you haven't specified a local guild ID.`);
104
+ options = z
105
+ .object({
106
+ directory: z.string(),
107
+ cooldown: z.number().default(0),
108
+ permissions: z
109
+ .object({
110
+ user: z.array(z.string()).default([]),
111
+ client: z.array(z.string()).default([]),
112
+ dm: z.boolean().default(true),
113
+ })
114
+ .default({}),
115
+ logging: z.boolean().default(false),
116
+ defer: z
117
+ .object({
118
+ reply: z.boolean().default(false),
119
+ ephemeral: z.boolean().default(false),
120
+ fetchReply: z.boolean().default(false),
121
+ })
122
+ .default({}),
123
+ })
124
+ .parse(options);
125
+ this.client.modules.options.context = options;
126
+ const files = this.readdir(options.directory);
127
+ for (const file of files) {
128
+ const filePath = `${path.resolve(options.directory)}\\${file}`;
129
+ this.load(filePath, 'ContextCommand');
130
+ }
131
+ new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Context Commands.`);
132
+ this.emit({
133
+ name: 'interactionCreate',
134
+ fileType: 'ContextCommand',
135
+ run: (interaction) => this.contextCommandRun(interaction),
136
+ });
137
+ }
138
+ async messageCommandRun(message, message2) {
139
+ const filetype = 'MessageCommand';
140
+ if (message.author.bot) return;
141
+ message.util = new MessageUtil(this.client, message);
142
+ message.user = await xernerxUser(message, this.client);
143
+ if (typeof message2 === 'object') message = message2;
144
+ if (message2 === 'delete' && this.client.modules.options.message?.handleDeletes) {
145
+ if (!this.client.cache.messages.has(message.id)) return;
146
+ const id = this.client.cache.messages.get(message.id);
147
+ if (!id) return;
148
+ (async () => {
149
+ const msg = await message.channel.messages.fetch(id);
150
+ await msg.delete();
151
+ this.client.cache.messages.delete(message.id);
152
+ })();
153
+ return;
154
+ }
155
+ if (message.content && this.client.modules.options.message) {
156
+ const commands = this.client.commands.message;
157
+ const prefixes = Array.isArray(this.client.modules.options.message.prefix) ? this.client.modules.options.message.prefix : [this.client.modules.options.message.prefix];
158
+ let commandName = null,
159
+ cmd,
160
+ commandAlias = null,
161
+ commandPrefix = null;
162
+ commands.map((command) => {
163
+ let prefix = null;
164
+ if (command.regex && message.content.match(command.regex)) {
165
+ const [match] = message.content.match(command.regex) || [null];
166
+ if (match) commandName = command.name;
167
+ }
168
+ const cp = Array.isArray(command.prefix) ? command.prefix : [command.prefix];
169
+ prefixes.map((p) => {
170
+ if (message.content.startsWith(p)) prefix = p;
171
+ });
172
+ cp.map((p) => {
173
+ if (message.content.startsWith(p)) prefix = p;
174
+ });
175
+ if (!prefix) return;
176
+ if (!commandName)
177
+ commandName =
178
+ message.content
179
+ .replace(prefix, '')
180
+ .split(command.separator || / +/)
181
+ .shift()
182
+ ?.trim()
183
+ ?.toLowerCase() || '';
184
+ if (!this.client.commands.message.has(commandName) && command.aliases?.includes(commandName)) {
185
+ commandAlias = commandName;
186
+ commandName = command.name;
187
+ }
188
+ commandAlias = commandAlias ? commandAlias : commandName;
189
+ commandPrefix = prefix;
190
+ });
191
+ if (!cmd && this.client.modules.options.message.allowMention) {
192
+ if (message.mentions.users.has(this.client.user?.id) || message.mentions.repliedUser?.id === this.client.user?.id) {
193
+ commandName = message.content.replace(`<@${this.client.user?.id}>`, '').trim().split(/ +/).shift()?.toLowerCase() || null;
194
+ commandPrefix = `<@${this.client.user?.id}>`;
195
+ }
196
+ }
197
+ if (this.client.commands.message.has(commandName)) {
198
+ if (this.client.modules.options.message?.handleTyping) message.channel.sendTyping();
199
+ cmd = this.client.commands.message.get(commandName);
200
+ }
201
+ if (!cmd) return this.client.emit('commandNotFound', message, filetype);
202
+ if (await inhibitorValidation(message, cmd)) return;
203
+ message.util.parsed = {
204
+ alias: commandAlias,
205
+ prefix: commandPrefix,
206
+ };
207
+ this.client.emit('commandStart', message, cmd, filetype);
208
+ return await this.exec(cmd, message, await messageArguments(message, cmd, commandPrefix), filetype);
209
+ }
210
+ }
211
+ async slashCommandRun(interaction) {
212
+ const filetype = 'SlashCommand';
213
+ interaction.util = new InteractionUtil(this.client, interaction);
214
+ interaction.user = await xernerxUser(interaction, this.client);
215
+ let cmd = null;
216
+ if (this.client.commands.slash.has(interaction.commandName)) cmd = this.client.commands.slash.get(interaction.commandName);
217
+ if (await inhibitorValidation(interaction, cmd)) return;
218
+ if (!cmd) return this.client.emit('commandNotFound', interaction);
219
+ new Promise(async (resolve) => {
220
+ if (interaction.isAutocomplete()) {
221
+ const focused = interaction.options.getFocused(true);
222
+ const options = interaction.options;
223
+ await cmd.autocomplete(interaction, focused, options);
224
+ } else resolve(true);
225
+ })
226
+ .then(async () => {
227
+ this.client.emit('commandStart', interaction, filetype);
228
+ return await this.exec(cmd, interaction, await interactionArguments(interaction, cmd), filetype);
229
+ })
230
+ .catch((error) => this.client.emit('commandError', interaction, error, cmd, filetype));
231
+ }
232
+ async contextCommandRun(interaction) {
233
+ const filetype = 'ContextCommand';
234
+ interaction.util = new InteractionUtil(this.client, interaction);
235
+ interaction.user = await xernerxUser(interaction, this.client);
236
+ let cmd;
237
+ if (this.client.commands.context.has(interaction.commandName)) cmd = this.client.commands.context.get(interaction.commandName);
238
+ if (await inhibitorValidation(interaction, cmd)) return;
239
+ if (!cmd) return this.client.emit('commandNotFound', interaction, filetype);
240
+ this.client.emit('commandStart', interaction, filetype);
241
+ return await this.exec(cmd, interaction, await interactionArguments(interaction, cmd), filetype);
242
+ }
243
+ async exec(cmd, event, args, type) {
244
+ try {
245
+ if (await commandValidation(event, cmd)) return;
246
+ if (cmd.conditions && (await cmd.conditions(event, args))) return;
247
+ await cmd.exec(event, args);
248
+ return await this.client.emit('commandFinish', event, type);
249
+ } catch (error) {
250
+ new XernerxLog(this.client).error(`An error occurred executing ${Style.log(cmd.name, { color: Style.TextColor.Blue })}`, error);
251
+ return await this.client.emit('commandError', event, error, cmd, type);
252
+ }
253
+ }
253
254
  }
254
255
  //# sourceMappingURL=CommandHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandHandler.js","sourceRoot":"","sources":["../../src/handlers/CommandHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport * as path from 'path';\nimport { GatewayIntentBits } from 'discord.js';\n\nimport XernerxClient from '../client/XernerxClient.js';\nimport { ContextHandlerOptions, MessageHandlerOptions, SlashHandlerOptions } from '../types/interfaces.js';\nimport Handler from './Handler.js';\nimport { XernerxMessage, XernerxMessageContextInteraction, XernerxSlashInteraction, XernerxUserContextInteraction } from '../types/extenders.js';\nimport MessageUtil from '../utils/MessageUtil.js';\nimport XernerxContextCommand from '../build/XernerxContextCommand.js';\nimport MessageCommandBuilder from '../build/XernerxMessageCommand.js';\nimport XernerxSlashCommand from '../build/XernerxSlashCommand.js';\nimport { FileType } from '../types/types.js';\nimport { xernerxUser } from '../functions/xernerxUser.js';\nimport InteractionUtil from '../utils/InteractionUtil.js';\nimport commandValidation from '../validators/commandValidation.js';\nimport XernerxLog from '../tools/XernerxLog.js';\nimport { interactionArguments, messageArguments } from '../models/Arguments.js';\nimport { inhibitorValidation } from '../validators/inhibitorValidations.js';\nimport { Style } from 'dumfunctions';\n\nexport default class CommandHandler extends Handler {\n constructor(client: XernerxClient) {\n super(client);\n }\n\n public loadMessageCommands(options: MessageHandlerOptions) {\n if (!this.client.options.intents.has(GatewayIntentBits.MessageContent)) new XernerxLog(this.client).warn(`Message commands might not work as you're missing the intent MessageContent!`);\n if (!this.client.options.intents.has(GatewayIntentBits.GuildMessages)) new XernerxLog(this.client).warn(`Message commands might not work as you're missing the intent GuildMessages!`);\n\n options = z\n .object({\n directory: z.string(),\n prefix: z.string().or(z.array(z.string())),\n allowMention: z.boolean().default(false),\n cooldown: z.number().default(0),\n permissions: z\n .object({\n user: z.array(z.string()).default([]),\n client: z.array(z.string()).default([]),\n dm: z.boolean().default(true),\n })\n .default({}),\n handleEdits: z.boolean().default(false),\n handleDeletes: z.boolean().default(false),\n handleTyping: z.boolean().default(false),\n logging: z.boolean().default(false),\n })\n .parse(options);\n\n this.client.modules.options.message = options;\n\n const files = this.readdir(options.directory);\n\n for (const file of files) {\n const filePath = `${path.resolve(options.directory)}\\\\${file}`;\n\n this.load(filePath, 'MessageCommand');\n }\n\n new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Message Commands.`);\n\n this.emit({\n name: 'messageCreate',\n fileType: 'MessageCommand',\n run: (message: XernerxMessage) => this.messageCommandRun(message),\n });\n\n this.emit({\n name: 'messageUpdate',\n fileType: 'MessageCommand',\n run: (message: XernerxMessage, message2: XernerxMessage) => this.messageCommandRun(message, message2),\n });\n\n this.emit({\n name: 'messageDelete',\n fileType: 'MessageCommand',\n run: (message: XernerxMessage) => this.messageCommandRun(message, 'delete'),\n });\n }\n\n // public reloadMessageCommands() {\n // return reload(this.client, 'message');\n // }\n\n public loadSlashCommands(options: SlashHandlerOptions) {\n if (!this.client.settings.local) new XernerxLog(this.client).warn(`Slash commands might not work as you haven't specified a local guild ID.`);\n\n options = z\n .object({\n directory: z.string(),\n cooldown: z.number().default(0),\n permissions: z\n .object({\n user: z.array(z.string()).default([]),\n client: z.array(z.string()).default([]),\n dm: z.boolean().default(true),\n })\n .default({}),\n logging: z.boolean().default(false),\n defer: z\n .object({\n reply: z.boolean().default(false),\n ephemeral: z.boolean().default(false),\n fetchReply: z.boolean().default(false),\n })\n .default({}),\n })\n .parse(options);\n\n this.client.modules.options.slash = options;\n\n const files = this.readdir(options.directory);\n\n for (const file of files) {\n const filePath = `${path.resolve(options.directory)}\\\\${file}`;\n\n this.load(filePath, 'SlashCommand');\n }\n\n new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Slash Commands.`);\n\n this.emit({\n name: 'interactionCreate',\n fileType: 'SlashCommand',\n run: (interaction: XernerxSlashInteraction) => this.slashCommandRun(interaction),\n });\n }\n public loadContextCommands(options: ContextHandlerOptions) {\n if (!this.client.settings.local) new XernerxLog(this.client).warn(`Context commands might not work as you haven't specified a local guild ID.`);\n\n options = z\n .object({\n directory: z.string(),\n cooldown: z.number().default(0),\n permissions: z\n .object({\n user: z.array(z.string()).default([]),\n client: z.array(z.string()).default([]),\n dm: z.boolean().default(true),\n })\n .default({}),\n logging: z.boolean().default(false),\n defer: z\n .object({\n reply: z.boolean().default(false),\n ephemeral: z.boolean().default(false),\n fetchReply: z.boolean().default(false),\n })\n .default({}),\n })\n .parse(options);\n\n this.client.modules.options.context = options;\n\n const files = this.readdir(options.directory);\n\n for (const file of files) {\n const filePath = `${path.resolve(options.directory)}\\\\${file}`;\n\n this.load(filePath, 'ContextCommand');\n }\n\n new XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Context Commands.`);\n\n this.emit({\n name: 'interactionCreate',\n fileType: 'ContextCommand',\n run: (interaction: XernerxMessageContextInteraction | XernerxUserContextInteraction) => this.contextCommandRun(interaction),\n });\n }\n\n private async messageCommandRun<T extends XernerxMessage>(message: T, message2?: T | 'delete') {\n const filetype = 'MessageCommand';\n\n if (message.author.bot) return;\n\n message.util = new MessageUtil(this.client, message);\n\n message.user = await xernerxUser(message, this.client);\n\n if (typeof message2 === 'object') message = message2;\n\n if (message2 === 'delete') {\n if (!this.client.cache.messages.has(message.id)) return;\n\n const id = this.client.cache.messages.get(message.id);\n\n if (!id) return;\n\n (async () => {\n const msg = await message.channel.messages.fetch(id);\n\n await msg.delete();\n\n this.client.cache.messages.delete(message.id);\n })();\n\n return;\n }\n\n if (message.content && this.client.modules.options.message) {\n const commands = this.client.commands.message;\n\n const prefixes = Array.isArray(this.client.modules.options.message.prefix) ? this.client.modules.options.message.prefix : [this.client.modules.options.message.prefix];\n\n let commandName: string | null = null,\n cmd,\n commandAlias: string | null = null,\n commandPrefix: string | null = null;\n\n commands.map((command) => {\n let prefix: string | null = null;\n\n if (command.regex && message.content.match(command.regex)) {\n const [match] = message.content.match(command.regex) || [null];\n\n if (match) commandName = command.name;\n }\n\n const cp = Array.isArray(command.prefix) ? command.prefix : [command.prefix as string];\n\n prefixes.map((p) => {\n if (message.content.startsWith(p)) prefix = p;\n });\n\n cp.map((p) => {\n if (message.content.startsWith(p)) prefix = p;\n });\n\n if (!prefix) return;\n\n if (!commandName)\n commandName =\n message.content\n .replace(prefix, '')\n .split(command.separator || / +/)\n .shift()\n ?.trim()\n ?.toLowerCase() || '';\n\n if (!this.client.commands.message.has(commandName) && command.aliases?.includes(commandName)) {\n commandAlias = commandName;\n\n commandName = command.name;\n }\n\n commandAlias = commandAlias ? commandAlias : commandName;\n\n commandPrefix = prefix;\n });\n\n if (!cmd && this.client.modules.options.message.allowMention) {\n if (message.mentions.users.has(this.client.user?.id as string) || message.mentions.repliedUser?.id === this.client.user?.id) {\n commandName = message.content.replace(`<@${this.client.user?.id}>`, '').trim().split(/ +/).shift()?.toLowerCase() || null;\n\n commandPrefix = `<@${this.client.user?.id}>`;\n }\n }\n\n if (this.client.commands.message.has(commandName as string)) {\n if (this.client.modules.options.message?.handleTyping) message.channel.sendTyping();\n\n cmd = this.client.commands.message.get(commandName as string);\n }\n\n if (!cmd) return this.client.emit('commandNotFound', message, filetype);\n\n if (await inhibitorValidation(message, cmd)) return;\n\n message.util.parsed = {\n alias: commandAlias,\n prefix: commandPrefix,\n };\n\n this.client.emit('commandStart', message, cmd, filetype);\n\n return await this.exec(cmd, message, await messageArguments(message, cmd, commandPrefix as string), filetype);\n }\n }\n\n private async slashCommandRun<T extends Record<string, any>>(interaction: XernerxSlashInteraction) {\n const filetype = 'SlashCommand';\n\n interaction.util = new InteractionUtil(this.client, interaction);\n\n interaction.user = await xernerxUser(interaction, this.client);\n\n let cmd: XernerxSlashCommand | null | undefined = null;\n\n if (this.client.commands.slash.has(interaction.commandName)) cmd = this.client.commands.slash.get(interaction.commandName);\n\n if (await inhibitorValidation(interaction, cmd as XernerxSlashCommand)) return;\n\n if (!cmd) return this.client.emit('commandNotFound', interaction);\n\n new Promise(async (resolve) => {\n if (interaction.isAutocomplete()) {\n const focused = (interaction as T).options.getFocused(true);\n const options = (interaction as T).options;\n\n await (cmd as XernerxSlashCommand).autocomplete(interaction, focused, options);\n } else resolve(true);\n })\n .then(async () => {\n this.client.emit('commandStart', interaction, filetype);\n\n return await this.exec(cmd as XernerxSlashCommand, interaction, await interactionArguments(interaction, cmd as XernerxSlashCommand), filetype);\n })\n .catch((error) => this.client.emit('commandError', interaction, error, cmd, filetype));\n }\n\n private async contextCommandRun(interaction: XernerxUserContextInteraction | XernerxMessageContextInteraction) {\n const filetype = 'ContextCommand';\n\n interaction.util = new InteractionUtil(this.client, interaction);\n\n interaction.user = await xernerxUser(interaction as XernerxUserContextInteraction, this.client);\n\n let cmd;\n\n if (this.client.commands.context.has(interaction.commandName)) cmd = this.client.commands.context.get(interaction.commandName);\n\n if (await inhibitorValidation(interaction, cmd)) return;\n\n if (!cmd) return this.client.emit('commandNotFound', interaction, filetype);\n\n this.client.emit('commandStart', interaction, filetype);\n\n return await this.exec(cmd as unknown as XernerxSlashCommand, interaction, await interactionArguments(interaction, cmd), filetype);\n }\n\n private async exec(\n cmd: MessageCommandBuilder | XernerxSlashCommand | XernerxContextCommand,\n event: XernerxMessage | XernerxSlashInteraction | XernerxMessageContextInteraction | XernerxUserContextInteraction,\n args: any,\n type: FileType\n ) {\n try {\n if (await commandValidation(event as XernerxMessage, cmd)) return;\n\n if (((cmd as MessageCommandBuilder).conditions as unknown) && (await ((cmd as MessageCommandBuilder).conditions(event as never, args) as unknown))) return;\n\n await cmd.exec(event as never, args);\n\n return await this.client.emit('commandFinish', event, type);\n } catch (error) {\n new XernerxLog(this.client).error(`An error occurred executing ${Style.log(cmd.name, { color: Style.TextColor.Blue })}`, error);\n\n return await this.client.emit('commandError', event, error, cmd, type);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"CommandHandler.js","sourceRoot":"","sources":["../../src/handlers/CommandHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/** @format */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport { GatewayIntentBits } from 'discord.js';\n\nimport XernerxClient from '../client/XernerxClient.js';\nimport { ContextHandlerOptions, MessageHandlerOptions, SlashHandlerOptions } from '../types/interfaces.js';\nimport Handler from './Handler.js';\nimport { XernerxMessage, XernerxMessageContextInteraction, XernerxSlashInteraction, XernerxUserContextInteraction } from '../types/extenders.js';\nimport MessageUtil from '../utils/MessageUtil.js';\nimport XernerxContextCommand from '../build/XernerxContextCommand.js';\nimport MessageCommandBuilder from '../build/XernerxMessageCommand.js';\nimport XernerxSlashCommand from '../build/XernerxSlashCommand.js';\nimport { FileType } from '../types/types.js';\nimport { xernerxUser } from '../functions/xernerxUser.js';\nimport InteractionUtil from '../utils/InteractionUtil.js';\nimport commandValidation from '../validators/commandValidation.js';\nimport XernerxLog from '../tools/XernerxLog.js';\nimport { interactionArguments, messageArguments } from '../models/Arguments.js';\nimport { inhibitorValidation } from '../validators/inhibitorValidations.js';\nimport { Style } from 'dumfunctions';\n\nexport default class CommandHandler extends Handler {\n\tconstructor(client: XernerxClient) {\n\t\tsuper(client);\n\t}\n\n\tpublic loadMessageCommands(options: MessageHandlerOptions) {\n\t\tif (!this.client.options.intents.has(GatewayIntentBits.MessageContent)) new XernerxLog(this.client).warn(`Message commands might not work as you're missing the intent MessageContent!`);\n\t\tif (!this.client.options.intents.has(GatewayIntentBits.GuildMessages)) new XernerxLog(this.client).warn(`Message commands might not work as you're missing the intent GuildMessages!`);\n\n\t\toptions = z\n\t\t\t.object({\n\t\t\t\tdirectory: z.string(),\n\t\t\t\tprefix: z.string().or(z.array(z.string())),\n\t\t\t\tallowMention: z.boolean().default(false),\n\t\t\t\tcooldown: z.number().default(0),\n\t\t\t\tpermissions: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tuser: z.array(z.string()).default([]),\n\t\t\t\t\t\tclient: z.array(z.string()).default([]),\n\t\t\t\t\t\tdm: z.boolean().default(true),\n\t\t\t\t\t})\n\t\t\t\t\t.default({}),\n\t\t\t\thandleEdits: z.boolean().default(false),\n\t\t\t\thandleDeletes: z.boolean().default(false),\n\t\t\t\thandleTyping: z.boolean().default(false),\n\t\t\t\tlogging: z.boolean().default(false),\n\t\t\t})\n\t\t\t.parse(options);\n\n\t\tthis.client.modules.options.message = options;\n\n\t\tconst files = this.readdir(options.directory);\n\n\t\tfor (const file of files) {\n\t\t\tconst filePath = `${path.resolve(options.directory)}\\\\${file}`;\n\n\t\t\tthis.load(filePath, 'MessageCommand');\n\t\t}\n\n\t\tnew XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Message Commands.`);\n\n\t\tthis.emit({\n\t\t\tname: 'messageCreate',\n\t\t\tfileType: 'MessageCommand',\n\t\t\trun: (message: XernerxMessage) => this.messageCommandRun(message),\n\t\t});\n\n\t\tthis.emit({\n\t\t\tname: 'messageUpdate',\n\t\t\tfileType: 'MessageCommand',\n\t\t\trun: (message: XernerxMessage, message2: XernerxMessage) => this.messageCommandRun(message, message2),\n\t\t});\n\n\t\tthis.emit({\n\t\t\tname: 'messageDelete',\n\t\t\tfileType: 'MessageCommand',\n\t\t\trun: (message: XernerxMessage) => this.messageCommandRun(message, 'delete'),\n\t\t});\n\t}\n\n\t// public reloadMessageCommands() {\n\t// return reload(this.client, 'message');\n\t// }\n\n\tpublic loadSlashCommands(options: SlashHandlerOptions) {\n\t\tif (!this.client.settings.local) new XernerxLog(this.client).warn(`Slash commands might not work as you haven't specified a local guild ID.`);\n\n\t\toptions = z\n\t\t\t.object({\n\t\t\t\tdirectory: z.string(),\n\t\t\t\tcooldown: z.number().default(0),\n\t\t\t\tpermissions: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tuser: z.array(z.string()).default([]),\n\t\t\t\t\t\tclient: z.array(z.string()).default([]),\n\t\t\t\t\t\tdm: z.boolean().default(true),\n\t\t\t\t\t})\n\t\t\t\t\t.default({}),\n\t\t\t\tlogging: z.boolean().default(false),\n\t\t\t\tdefer: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\treply: z.boolean().default(false),\n\t\t\t\t\t\tephemeral: z.boolean().default(false),\n\t\t\t\t\t\tfetchReply: z.boolean().default(false),\n\t\t\t\t\t})\n\t\t\t\t\t.default({}),\n\t\t\t})\n\t\t\t.parse(options);\n\n\t\tthis.client.modules.options.slash = options;\n\n\t\tconst files = this.readdir(options.directory);\n\n\t\tfor (const file of files) {\n\t\t\tconst filePath = `${path.resolve(options.directory)}\\\\${file}`;\n\n\t\t\tthis.load(filePath, 'SlashCommand');\n\t\t}\n\n\t\tnew XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Slash Commands.`);\n\n\t\tthis.emit({\n\t\t\tname: 'interactionCreate',\n\t\t\tfileType: 'SlashCommand',\n\t\t\trun: (interaction: XernerxSlashInteraction) => this.slashCommandRun(interaction),\n\t\t});\n\t}\n\tpublic loadContextCommands(options: ContextHandlerOptions) {\n\t\tif (!this.client.settings.local) new XernerxLog(this.client).warn(`Context commands might not work as you haven't specified a local guild ID.`);\n\n\t\toptions = z\n\t\t\t.object({\n\t\t\t\tdirectory: z.string(),\n\t\t\t\tcooldown: z.number().default(0),\n\t\t\t\tpermissions: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tuser: z.array(z.string()).default([]),\n\t\t\t\t\t\tclient: z.array(z.string()).default([]),\n\t\t\t\t\t\tdm: z.boolean().default(true),\n\t\t\t\t\t})\n\t\t\t\t\t.default({}),\n\t\t\t\tlogging: z.boolean().default(false),\n\t\t\t\tdefer: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\treply: z.boolean().default(false),\n\t\t\t\t\t\tephemeral: z.boolean().default(false),\n\t\t\t\t\t\tfetchReply: z.boolean().default(false),\n\t\t\t\t\t})\n\t\t\t\t\t.default({}),\n\t\t\t})\n\t\t\t.parse(options);\n\n\t\tthis.client.modules.options.context = options;\n\n\t\tconst files = this.readdir(options.directory);\n\n\t\tfor (const file of files) {\n\t\t\tconst filePath = `${path.resolve(options.directory)}\\\\${file}`;\n\n\t\t\tthis.load(filePath, 'ContextCommand');\n\t\t}\n\n\t\tnew XernerxLog(this.client).info(`Loaded ${Style.log(String(files.length), { color: Style.TextColor.Cyan })} Context Commands.`);\n\n\t\tthis.emit({\n\t\t\tname: 'interactionCreate',\n\t\t\tfileType: 'ContextCommand',\n\t\t\trun: (interaction: XernerxMessageContextInteraction | XernerxUserContextInteraction) => this.contextCommandRun(interaction),\n\t\t});\n\t}\n\n\tprivate async messageCommandRun<T extends XernerxMessage>(message: T, message2?: T | 'delete') {\n\t\tconst filetype = 'MessageCommand';\n\n\t\tif (message.author.bot) return;\n\n\t\tmessage.util = new MessageUtil(this.client, message);\n\n\t\tmessage.user = await xernerxUser(message, this.client);\n\n\t\tif (typeof message2 === 'object') message = message2;\n\n\t\tif (message2 === 'delete' && this.client.modules.options.message?.handleDeletes) {\n\t\t\tif (!this.client.cache.messages.has(message.id)) return;\n\n\t\t\tconst id = this.client.cache.messages.get(message.id);\n\n\t\t\tif (!id) return;\n\n\t\t\t(async () => {\n\t\t\t\tconst msg = await message.channel.messages.fetch(id);\n\n\t\t\t\tawait msg.delete();\n\n\t\t\t\tthis.client.cache.messages.delete(message.id);\n\t\t\t})();\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (message.content && this.client.modules.options.message) {\n\t\t\tconst commands = this.client.commands.message;\n\n\t\t\tconst prefixes = Array.isArray(this.client.modules.options.message.prefix) ? this.client.modules.options.message.prefix : [this.client.modules.options.message.prefix];\n\n\t\t\tlet commandName: string | null = null,\n\t\t\t\tcmd,\n\t\t\t\tcommandAlias: string | null = null,\n\t\t\t\tcommandPrefix: string | null = null;\n\n\t\t\tcommands.map((command) => {\n\t\t\t\tlet prefix: string | null = null;\n\n\t\t\t\tif (command.regex && message.content.match(command.regex)) {\n\t\t\t\t\tconst [match] = message.content.match(command.regex) || [null];\n\n\t\t\t\t\tif (match) commandName = command.name;\n\t\t\t\t}\n\n\t\t\t\tconst cp = Array.isArray(command.prefix) ? command.prefix : [command.prefix as string];\n\n\t\t\t\tprefixes.map((p) => {\n\t\t\t\t\tif (message.content.startsWith(p)) prefix = p;\n\t\t\t\t});\n\n\t\t\t\tcp.map((p) => {\n\t\t\t\t\tif (message.content.startsWith(p)) prefix = p;\n\t\t\t\t});\n\n\t\t\t\tif (!prefix) return;\n\n\t\t\t\tif (!commandName)\n\t\t\t\t\tcommandName =\n\t\t\t\t\t\tmessage.content\n\t\t\t\t\t\t\t.replace(prefix, '')\n\t\t\t\t\t\t\t.split(command.separator || / +/)\n\t\t\t\t\t\t\t.shift()\n\t\t\t\t\t\t\t?.trim()\n\t\t\t\t\t\t\t?.toLowerCase() || '';\n\n\t\t\t\tif (!this.client.commands.message.has(commandName) && command.aliases?.includes(commandName)) {\n\t\t\t\t\tcommandAlias = commandName;\n\n\t\t\t\t\tcommandName = command.name;\n\t\t\t\t}\n\n\t\t\t\tcommandAlias = commandAlias ? commandAlias : commandName;\n\n\t\t\t\tcommandPrefix = prefix;\n\t\t\t});\n\n\t\t\tif (!cmd && this.client.modules.options.message.allowMention) {\n\t\t\t\tif (message.mentions.users.has(this.client.user?.id as string) || message.mentions.repliedUser?.id === this.client.user?.id) {\n\t\t\t\t\tcommandName = message.content.replace(`<@${this.client.user?.id}>`, '').trim().split(/ +/).shift()?.toLowerCase() || null;\n\n\t\t\t\t\tcommandPrefix = `<@${this.client.user?.id}>`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.client.commands.message.has(commandName as string)) {\n\t\t\t\tif (this.client.modules.options.message?.handleTyping) message.channel.sendTyping();\n\n\t\t\t\tcmd = this.client.commands.message.get(commandName as string);\n\t\t\t}\n\n\t\t\tif (!cmd) return this.client.emit('commandNotFound', message, filetype);\n\n\t\t\tif (await inhibitorValidation(message, cmd)) return;\n\n\t\t\tmessage.util.parsed = {\n\t\t\t\talias: commandAlias,\n\t\t\t\tprefix: commandPrefix,\n\t\t\t};\n\n\t\t\tthis.client.emit('commandStart', message, cmd, filetype);\n\n\t\t\treturn await this.exec(cmd, message, await messageArguments(message, cmd, commandPrefix as string), filetype);\n\t\t}\n\t}\n\n\tprivate async slashCommandRun<T extends Record<string, any>>(interaction: XernerxSlashInteraction) {\n\t\tconst filetype = 'SlashCommand';\n\n\t\tinteraction.util = new InteractionUtil(this.client, interaction);\n\n\t\tinteraction.user = await xernerxUser(interaction, this.client);\n\n\t\tlet cmd: XernerxSlashCommand | null | undefined = null;\n\n\t\tif (this.client.commands.slash.has(interaction.commandName)) cmd = this.client.commands.slash.get(interaction.commandName);\n\n\t\tif (await inhibitorValidation(interaction, cmd as XernerxSlashCommand)) return;\n\n\t\tif (!cmd) return this.client.emit('commandNotFound', interaction);\n\n\t\tnew Promise(async (resolve) => {\n\t\t\tif (interaction.isAutocomplete()) {\n\t\t\t\tconst focused = (interaction as T).options.getFocused(true);\n\t\t\t\tconst options = (interaction as T).options;\n\n\t\t\t\tawait (cmd as XernerxSlashCommand).autocomplete(interaction, focused, options);\n\t\t\t} else resolve(true);\n\t\t})\n\t\t\t.then(async () => {\n\t\t\t\tthis.client.emit('commandStart', interaction, filetype);\n\n\t\t\t\treturn await this.exec(cmd as XernerxSlashCommand, interaction, await interactionArguments(interaction, cmd as XernerxSlashCommand), filetype);\n\t\t\t})\n\t\t\t.catch((error) => this.client.emit('commandError', interaction, error, cmd, filetype));\n\t}\n\n\tprivate async contextCommandRun(interaction: XernerxUserContextInteraction | XernerxMessageContextInteraction) {\n\t\tconst filetype = 'ContextCommand';\n\n\t\tinteraction.util = new InteractionUtil(this.client, interaction);\n\n\t\tinteraction.user = await xernerxUser(interaction as XernerxUserContextInteraction, this.client);\n\n\t\tlet cmd;\n\n\t\tif (this.client.commands.context.has(interaction.commandName)) cmd = this.client.commands.context.get(interaction.commandName);\n\n\t\tif (await inhibitorValidation(interaction, cmd)) return;\n\n\t\tif (!cmd) return this.client.emit('commandNotFound', interaction, filetype);\n\n\t\tthis.client.emit('commandStart', interaction, filetype);\n\n\t\treturn await this.exec(cmd as unknown as XernerxSlashCommand, interaction, await interactionArguments(interaction, cmd), filetype);\n\t}\n\n\tprivate async exec(\n\t\tcmd: MessageCommandBuilder | XernerxSlashCommand | XernerxContextCommand,\n\t\tevent: XernerxMessage | XernerxSlashInteraction | XernerxMessageContextInteraction | XernerxUserContextInteraction,\n\t\targs: any,\n\t\ttype: FileType\n\t) {\n\t\ttry {\n\t\t\tif (await commandValidation(event as XernerxMessage, cmd)) return;\n\n\t\t\tif (((cmd as MessageCommandBuilder).conditions as unknown) && (await ((cmd as MessageCommandBuilder).conditions(event as never, args) as unknown))) return;\n\n\t\t\tawait cmd.exec(event as never, args);\n\n\t\t\treturn await this.client.emit('commandFinish', event, type);\n\t\t} catch (error) {\n\t\t\tnew XernerxLog(this.client).error(`An error occurred executing ${Style.log(cmd.name, { color: Style.TextColor.Blue })}`, error);\n\n\t\t\treturn await this.client.emit('commandError', event, error, cmd, type);\n\t\t}\n\t}\n}\n"]}