reciple 6.0.0-dev.27 → 6.0.0-dev.29

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 (85) hide show
  1. package/dist/lib/bin.mjs +68 -67
  2. package/dist/lib/bin.mjs.map +1 -0
  3. package/dist/lib/esm.mjs +2 -1
  4. package/dist/lib/esm.mjs.map +1 -0
  5. package/dist/lib/index.js +34 -33
  6. package/dist/lib/index.js.map +1 -0
  7. package/dist/lib/reciple/classes/RecipleClient.js +308 -307
  8. package/dist/lib/reciple/classes/RecipleClient.js.map +1 -0
  9. package/dist/lib/reciple/classes/RecipleConfig.js +107 -106
  10. package/dist/lib/reciple/classes/RecipleConfig.js.map +1 -0
  11. package/dist/lib/reciple/classes/RecipleModule.js +137 -94
  12. package/dist/lib/reciple/classes/RecipleModule.js.map +1 -0
  13. package/dist/lib/reciple/classes/builders/MessageCommandBuilder.js +310 -309
  14. package/dist/lib/reciple/classes/builders/MessageCommandBuilder.js.map +1 -0
  15. package/dist/lib/reciple/classes/builders/MessageCommandOptionBuilder.js +127 -126
  16. package/dist/lib/reciple/classes/builders/MessageCommandOptionBuilder.js.map +1 -0
  17. package/dist/lib/reciple/classes/builders/SlashCommandBuilder.js +247 -246
  18. package/dist/lib/reciple/classes/builders/SlashCommandBuilder.js.map +1 -0
  19. package/dist/lib/reciple/classes/managers/ApplicationCommandManager.js +179 -178
  20. package/dist/lib/reciple/classes/managers/ApplicationCommandManager.js.map +1 -0
  21. package/dist/lib/reciple/classes/managers/CommandCooldownManager.js +100 -99
  22. package/dist/lib/reciple/classes/managers/CommandCooldownManager.js.map +1 -0
  23. package/dist/lib/reciple/classes/managers/CommandManager.js +65 -60
  24. package/dist/lib/reciple/classes/managers/CommandManager.js.map +1 -0
  25. package/dist/lib/reciple/classes/managers/MessageCommandOptionManager.js +26 -25
  26. package/dist/lib/reciple/classes/managers/MessageCommandOptionManager.js.map +1 -0
  27. package/dist/lib/reciple/classes/managers/ModuleManager.js +181 -180
  28. package/dist/lib/reciple/classes/managers/ModuleManager.js.map +1 -0
  29. package/dist/lib/reciple/flags.js +32 -31
  30. package/dist/lib/reciple/flags.js.map +1 -0
  31. package/dist/lib/reciple/permissions.js +31 -30
  32. package/dist/lib/reciple/permissions.js.map +1 -0
  33. package/dist/lib/reciple/types/builders.js +12 -11
  34. package/dist/lib/reciple/types/builders.js.map +1 -0
  35. package/dist/lib/reciple/types/commands.js +16 -15
  36. package/dist/lib/reciple/types/commands.js.map +1 -0
  37. package/dist/lib/reciple/types/paramOptions.js +3 -2
  38. package/dist/lib/reciple/types/paramOptions.js.map +1 -0
  39. package/dist/lib/reciple/util.js +72 -71
  40. package/dist/lib/reciple/util.js.map +1 -0
  41. package/dist/lib/reciple/version.js +48 -47
  42. package/dist/lib/reciple/version.js.map +1 -0
  43. package/dist/types/bin.d.mts +3 -2
  44. package/dist/types/bin.d.mts.map +1 -0
  45. package/dist/types/esm.d.mts +2 -1
  46. package/dist/types/esm.d.mts.map +1 -0
  47. package/dist/types/index.d.ts +18 -17
  48. package/dist/types/index.d.ts.map +1 -0
  49. package/dist/types/reciple/classes/RecipleClient.d.ts +115 -114
  50. package/dist/types/reciple/classes/RecipleClient.d.ts.map +1 -0
  51. package/dist/types/reciple/classes/RecipleConfig.d.ts +101 -100
  52. package/dist/types/reciple/classes/RecipleConfig.d.ts.map +1 -0
  53. package/dist/types/reciple/classes/RecipleModule.d.ts +88 -56
  54. package/dist/types/reciple/classes/RecipleModule.d.ts.map +1 -0
  55. package/dist/types/reciple/classes/builders/MessageCommandBuilder.d.ts +190 -189
  56. package/dist/types/reciple/classes/builders/MessageCommandBuilder.d.ts.map +1 -0
  57. package/dist/types/reciple/classes/builders/MessageCommandOptionBuilder.d.ts +54 -53
  58. package/dist/types/reciple/classes/builders/MessageCommandOptionBuilder.d.ts.map +1 -0
  59. package/dist/types/reciple/classes/builders/SlashCommandBuilder.d.ts +99 -98
  60. package/dist/types/reciple/classes/builders/SlashCommandBuilder.d.ts.map +1 -0
  61. package/dist/types/reciple/classes/managers/ApplicationCommandManager.d.ts +54 -53
  62. package/dist/types/reciple/classes/managers/ApplicationCommandManager.d.ts.map +1 -0
  63. package/dist/types/reciple/classes/managers/CommandCooldownManager.d.ts +71 -70
  64. package/dist/types/reciple/classes/managers/CommandCooldownManager.d.ts.map +1 -0
  65. package/dist/types/reciple/classes/managers/CommandManager.d.ts +35 -34
  66. package/dist/types/reciple/classes/managers/CommandManager.d.ts.map +1 -0
  67. package/dist/types/reciple/classes/managers/MessageCommandOptionManager.d.ts +23 -22
  68. package/dist/types/reciple/classes/managers/MessageCommandOptionManager.d.ts.map +1 -0
  69. package/dist/types/reciple/classes/managers/ModuleManager.d.ts +50 -49
  70. package/dist/types/reciple/classes/managers/ModuleManager.d.ts.map +1 -0
  71. package/dist/types/reciple/flags.d.ts +18 -17
  72. package/dist/types/reciple/flags.d.ts.map +1 -0
  73. package/dist/types/reciple/permissions.d.ts +16 -15
  74. package/dist/types/reciple/permissions.d.ts.map +1 -0
  75. package/dist/types/reciple/types/builders.d.ts +206 -205
  76. package/dist/types/reciple/types/builders.d.ts.map +1 -0
  77. package/dist/types/reciple/types/commands.d.ts +82 -81
  78. package/dist/types/reciple/types/commands.d.ts.map +1 -0
  79. package/dist/types/reciple/types/paramOptions.d.ts +102 -101
  80. package/dist/types/reciple/types/paramOptions.d.ts.map +1 -0
  81. package/dist/types/reciple/util.d.ts +27 -26
  82. package/dist/types/reciple/util.d.ts.map +1 -0
  83. package/dist/types/reciple/version.d.ts +26 -25
  84. package/dist/types/reciple/version.d.ts.map +1 -0
  85. package/package.json +8 -6
@@ -1,307 +1,308 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RecipleClient = exports.RecipleEvents = void 0;
4
- const discord_js_1 = require("discord.js");
5
- const MessageCommandBuilder_1 = require("./builders/MessageCommandBuilder");
6
- const SlashCommandBuilder_1 = require("./builders/SlashCommandBuilder");
7
- const commands_1 = require("../types/commands");
8
- const CommandCooldownManager_1 = require("./managers/CommandCooldownManager");
9
- const builders_1 = require("../types/builders");
10
- const permissions_1 = require("../permissions");
11
- const MessageCommandOptionManager_1 = require("./managers/MessageCommandOptionManager");
12
- const ApplicationCommandManager_1 = require("./managers/ApplicationCommandManager");
13
- const CommandManager_1 = require("./managers/CommandManager");
14
- const ModuleManager_1 = require("./managers/ModuleManager");
15
- const RecipleConfig_1 = require("./RecipleConfig");
16
- const fallout_utility_1 = require("fallout-utility");
17
- const util_1 = require("../util");
18
- const version_js_1 = require("../version.js");
19
- const flags_1 = require("../flags");
20
- var RecipleEvents;
21
- (function (RecipleEvents) {
22
- RecipleEvents["RecipleCommandExecute"] = "recipleCommandExecute";
23
- RecipleEvents["RecipleCommandHalt"] = "recipleCommandHalt";
24
- RecipleEvents["RecipleRegisterApplicationCommands"] = "recipleRegisterApplicationCommands";
25
- RecipleEvents["RecipleReplyError"] = "recipleReplyError";
26
- RecipleEvents["CommandExecute"] = "recipleCommandExecute";
27
- RecipleEvents["CommandHalt"] = "recipleCommandHalt";
28
- RecipleEvents["RegisterApplicationCommands"] = "recipleRegisterApplicationCommands";
29
- RecipleEvents["ReplyError"] = "recipleReplyError";
30
- })(RecipleEvents = exports.RecipleEvents || (exports.RecipleEvents = {}));
31
- class RecipleClient extends discord_js_1.Client {
32
- /**
33
- * @param options Client options
34
- */
35
- constructor(options) {
36
- super(options);
37
- this.config = RecipleConfig_1.RecipleConfig.getDefaultConfig();
38
- this.commands = new CommandManager_1.CommandManager({
39
- client: this,
40
- });
41
- this.cooldowns = new CommandCooldownManager_1.CommandCooldownManager();
42
- this.modules = new ModuleManager_1.ModuleManager({
43
- client: this,
44
- });
45
- this.version = version_js_1.version;
46
- this.logger = (0, util_1.createLogger)(!!options.config?.fileLogging.stringifyLoggedJSON, options.config?.fileLogging.debugmode);
47
- this.config = { ...this.config, ...(options.config ?? {}) };
48
- if (this.config.fileLogging.enabled)
49
- this.logger.logFile(util_1.path.join(flags_1.cwd, this.config.fileLogging.logFilePath ?? 'logs/latest.log'), false);
50
- this.cwd = options.cwd ?? process.cwd();
51
- this.applicationCommands = new ApplicationCommandManager_1.ApplicationCommandManager(this);
52
- }
53
- get isClientLogsSilent() {
54
- return !this.config.fileLogging.clientLogs;
55
- }
56
- /**
57
- * Listed to command executions
58
- */
59
- addCommandListeners() {
60
- this.on(discord_js_1.Events.MessageCreate, message => {
61
- if (this.config.commands.messageCommand.enabled)
62
- this.messageCommandExecute(message);
63
- });
64
- this.on(discord_js_1.Events.InteractionCreate, interaction => {
65
- if (this.config.commands.slashCommand.enabled)
66
- this.slashCommandExecute(interaction);
67
- });
68
- return this;
69
- }
70
- /**
71
- * Execute a slash command
72
- * @param interaction Slash command interaction
73
- */
74
- async slashCommandExecute(interaction) {
75
- if (!interaction || !interaction.isChatInputCommand() || !this.isReady())
76
- return;
77
- if (!this.config.commands.slashCommand.acceptRepliedInteractions && (interaction.replied || interaction.deferred))
78
- return;
79
- const command = this.commands.get(interaction.commandName, builders_1.CommandType.SlashCommand);
80
- if (!command)
81
- return;
82
- const executeData = {
83
- interaction,
84
- builder: command,
85
- client: this,
86
- };
87
- if ((0, permissions_1.userHasCommandPermissions)({
88
- builder: command,
89
- memberPermissions: interaction.memberPermissions ?? undefined,
90
- commandPermissions: this.config.commands.slashCommand.permissions,
91
- })) {
92
- if (!command)
93
- return;
94
- if (interaction.inCachedGuild() && !(0, permissions_1.botHasExecutePermissions)(interaction.channel || interaction.guild, command.requiredBotPermissions)) {
95
- if (!(await this._haltCommand(command, {
96
- executeData,
97
- reason: commands_1.CommandHaltReason.MissingBotPermissions,
98
- }))) {
99
- await interaction.reply(this.getConfigMessage('insufficientBotPerms', 'Insufficient bot permissions.')).catch(er => this._replyError(er));
100
- }
101
- return;
102
- }
103
- const userCooldown = {
104
- user: interaction.user,
105
- command: command.name,
106
- channel: interaction.channel ?? undefined,
107
- guild: interaction.guild,
108
- type: builders_1.CommandType.SlashCommand,
109
- };
110
- if (this.config.commands.slashCommand.enableCooldown && command.cooldown && !this.cooldowns.isCooledDown(userCooldown)) {
111
- this.cooldowns.add({
112
- ...userCooldown,
113
- expireTime: Date.now() + command.cooldown,
114
- });
115
- }
116
- else if (this.config.commands.slashCommand.enableCooldown && command.cooldown) {
117
- if (!(await this._haltCommand(command, {
118
- executeData,
119
- reason: commands_1.CommandHaltReason.Cooldown,
120
- ...this.cooldowns.get(userCooldown),
121
- }))) {
122
- await interaction.reply(this.getConfigMessage('cooldown', 'You cannot execute this command right now due to the cooldown.')).catch(er => this._replyError(er));
123
- }
124
- return;
125
- }
126
- return this._executeCommand(command, executeData);
127
- }
128
- else if (!(await this._haltCommand(command, {
129
- executeData,
130
- reason: commands_1.CommandHaltReason.MissingMemberPermissions,
131
- }))) {
132
- await interaction.reply(this.getConfigMessage('noPermissions', 'You do not have permission to use this command.')).catch(er => this._replyError(er));
133
- }
134
- }
135
- /**
136
- * Execute a Message command
137
- * @param message Message command executor
138
- * @param prefix Message command prefix
139
- */
140
- async messageCommandExecute(message, prefix) {
141
- if (!message.content || !this.isReady())
142
- return;
143
- const parseCommand = (0, fallout_utility_1.getCommand)(message.content, prefix || this.config.commands.messageCommand.prefix || '!', this.config.commands.messageCommand.commandArgumentSeparator || ' ');
144
- if (!parseCommand || !parseCommand?.command)
145
- return;
146
- const command = this.commands.get(parseCommand.command, builders_1.CommandType.MessageCommand);
147
- if (!command)
148
- return;
149
- const commandOptions = await MessageCommandBuilder_1.MessageCommandBuilder.validateOptions(command, parseCommand);
150
- const executeData = {
151
- message: message,
152
- options: commandOptions,
153
- command: parseCommand,
154
- builder: command,
155
- client: this,
156
- };
157
- if ((0, permissions_1.userHasCommandPermissions)({
158
- builder: command,
159
- memberPermissions: message.member?.permissions,
160
- commandPermissions: this.config.commands.messageCommand.permissions,
161
- })) {
162
- if ((!command.allowExecuteInDM && message.channel.type === discord_js_1.ChannelType.DM) || (!command.allowExecuteByBots && (message.author.bot || message.author.system)))
163
- return;
164
- if (command.validateOptions) {
165
- if (commandOptions.some(o => o.invalid)) {
166
- if (!(await this._haltCommand(command, {
167
- executeData,
168
- reason: commands_1.CommandHaltReason.InvalidArguments,
169
- invalidArguments: new MessageCommandOptionManager_1.MessageCommandOptionManager(...executeData.options.filter(o => o.invalid)),
170
- }))) {
171
- message.reply(this.getConfigMessage('invalidArguments', 'Invalid argument(s) given.')).catch(er => this._replyError(er));
172
- }
173
- return;
174
- }
175
- if (commandOptions.some(o => o.missing)) {
176
- if (!(await this._haltCommand(command, {
177
- executeData,
178
- reason: commands_1.CommandHaltReason.MissingArguments,
179
- missingArguments: new MessageCommandOptionManager_1.MessageCommandOptionManager(...executeData.options.filter(o => o.missing)),
180
- }))) {
181
- message.reply(this.getConfigMessage('missingArguments', 'Not enough arguments.')).catch(er => this._replyError(er));
182
- }
183
- return;
184
- }
185
- }
186
- if (message.inGuild() && !(0, permissions_1.botHasExecutePermissions)(message.channel || message.guild, command.requiredBotPermissions)) {
187
- if (!(await this._haltCommand(command, {
188
- executeData,
189
- reason: commands_1.CommandHaltReason.MissingBotPermissions,
190
- }))) {
191
- message.reply(this.getConfigMessage('insufficientBotPerms', 'Insufficient bot permissions.')).catch(er => this._replyError(er));
192
- }
193
- return;
194
- }
195
- const userCooldown = {
196
- user: message.author,
197
- command: command.name,
198
- channel: message.channel,
199
- guild: message.guild,
200
- type: builders_1.CommandType.MessageCommand,
201
- };
202
- if (this.config.commands.messageCommand.enableCooldown && command.cooldown && !this.cooldowns.isCooledDown(userCooldown)) {
203
- this.cooldowns.add({
204
- ...userCooldown,
205
- expireTime: Date.now() + command.cooldown,
206
- });
207
- }
208
- else if (this.config.commands.messageCommand.enableCooldown && command.cooldown) {
209
- if (!(await this._haltCommand(command, {
210
- executeData,
211
- reason: commands_1.CommandHaltReason.Cooldown,
212
- ...this.cooldowns.get(userCooldown),
213
- }))) {
214
- await message.reply(this.getConfigMessage('cooldown', 'You cannot execute this command right now due to the cooldown.')).catch(er => this._replyError(er));
215
- }
216
- return;
217
- }
218
- return this._executeCommand(command, executeData);
219
- }
220
- else if (!(await this._haltCommand(command, {
221
- executeData,
222
- reason: commands_1.CommandHaltReason.MissingMemberPermissions,
223
- }))) {
224
- message.reply(this.getConfigMessage('noPermissions', 'You do not have permission to use this command.')).catch(er => this._replyError(er));
225
- }
226
- }
227
- /**
228
- * Get a message from config
229
- * @param messageKey Config messages key
230
- * @param defaultMessage Default message when the key does not exists
231
- */
232
- getConfigMessage(messageKey, defaultMessage) {
233
- return this.config.messages[messageKey] ?? defaultMessage ?? messageKey;
234
- }
235
- /**
236
- * Emits the {@link RecipleClientEvents["recipleReplyError"]} event
237
- * @param error Received Error
238
- */
239
- _replyError(error) {
240
- this.emit(RecipleEvents.ReplyError, error);
241
- }
242
- async _haltCommand(command, haltData) {
243
- try {
244
- const haltResolved = (command.halt
245
- ? await Promise.resolve(command.type == builders_1.CommandType.SlashCommand ? command.halt(haltData) : command.halt(haltData)).catch(err => {
246
- console.log(err);
247
- })
248
- : false) || false;
249
- this.emit(RecipleEvents.CommandHalt, haltData);
250
- return haltResolved;
251
- }
252
- catch (err) {
253
- if (!this.isClientLogsSilent) {
254
- this.logger.error(`An error occured executing command halt for "${command.name}"`);
255
- this.logger.error(err);
256
- }
257
- return false;
258
- }
259
- }
260
- async _executeCommand(command, executeData) {
261
- try {
262
- await Promise.resolve(command.type === builders_1.CommandType.SlashCommand ? command.execute(executeData) : command.execute(executeData))
263
- .then(() => this.emit(RecipleEvents.CommandExecute, executeData))
264
- .catch(async (err) => !(await this._haltCommand(command, {
265
- executeData: executeData,
266
- reason: commands_1.CommandHaltReason.Error,
267
- error: err,
268
- }))
269
- ? this._commandExecuteError(err, executeData)
270
- : void 0);
271
- return executeData;
272
- }
273
- catch (err) {
274
- if (await this._haltCommand(command, {
275
- executeData: executeData,
276
- reason: commands_1.CommandHaltReason.Error,
277
- error: err,
278
- }))
279
- return;
280
- await this._commandExecuteError(err, executeData);
281
- }
282
- }
283
- /**
284
- * Error message when a command fails to execute
285
- * @param err Received error
286
- * @param command Slash/Message command execute data
287
- */
288
- async _commandExecuteError(err, command) {
289
- if (!this.isClientLogsSilent) {
290
- this.logger.error(`An error occured executing ${command.builder.type == builders_1.CommandType.MessageCommand ? 'message' : 'slash'} command "${command.builder.name}"`);
291
- this.logger.error(err);
292
- }
293
- if (!err || !command)
294
- return;
295
- if (SlashCommandBuilder_1.SlashCommandBuilder.isSlashCommandExecuteData(command)) {
296
- if (!this.config.commands.slashCommand.replyOnError)
297
- return;
298
- await command.interaction.followUp(this.getConfigMessage('error', 'An error occurred.')).catch(er => this._replyError(er));
299
- }
300
- else if (MessageCommandBuilder_1.MessageCommandBuilder.isMessageCommandExecuteData(command)) {
301
- if (!this.config.commands.messageCommand.replyOnError)
302
- return;
303
- await command.message.reply(this.getConfigMessage('error', 'An error occurred.')).catch(er => this._replyError(er));
304
- }
305
- }
306
- }
307
- exports.RecipleClient = RecipleClient;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RecipleClient = exports.RecipleEvents = void 0;
4
+ const discord_js_1 = require("discord.js");
5
+ const MessageCommandBuilder_1 = require("./builders/MessageCommandBuilder");
6
+ const SlashCommandBuilder_1 = require("./builders/SlashCommandBuilder");
7
+ const commands_1 = require("../types/commands");
8
+ const CommandCooldownManager_1 = require("./managers/CommandCooldownManager");
9
+ const builders_1 = require("../types/builders");
10
+ const permissions_1 = require("../permissions");
11
+ const MessageCommandOptionManager_1 = require("./managers/MessageCommandOptionManager");
12
+ const ApplicationCommandManager_1 = require("./managers/ApplicationCommandManager");
13
+ const CommandManager_1 = require("./managers/CommandManager");
14
+ const ModuleManager_1 = require("./managers/ModuleManager");
15
+ const RecipleConfig_1 = require("./RecipleConfig");
16
+ const fallout_utility_1 = require("fallout-utility");
17
+ const util_1 = require("../util");
18
+ const version_js_1 = require("../version.js");
19
+ const flags_1 = require("../flags");
20
+ var RecipleEvents;
21
+ (function (RecipleEvents) {
22
+ RecipleEvents["RecipleCommandExecute"] = "recipleCommandExecute";
23
+ RecipleEvents["RecipleCommandHalt"] = "recipleCommandHalt";
24
+ RecipleEvents["RecipleRegisterApplicationCommands"] = "recipleRegisterApplicationCommands";
25
+ RecipleEvents["RecipleReplyError"] = "recipleReplyError";
26
+ RecipleEvents["CommandExecute"] = "recipleCommandExecute";
27
+ RecipleEvents["CommandHalt"] = "recipleCommandHalt";
28
+ RecipleEvents["RegisterApplicationCommands"] = "recipleRegisterApplicationCommands";
29
+ RecipleEvents["ReplyError"] = "recipleReplyError";
30
+ })(RecipleEvents = exports.RecipleEvents || (exports.RecipleEvents = {}));
31
+ class RecipleClient extends discord_js_1.Client {
32
+ /**
33
+ * @param options Client options
34
+ */
35
+ constructor(options) {
36
+ super(options);
37
+ this.config = RecipleConfig_1.RecipleConfig.getDefaultConfig();
38
+ this.commands = new CommandManager_1.CommandManager({
39
+ client: this,
40
+ });
41
+ this.cooldowns = new CommandCooldownManager_1.CommandCooldownManager();
42
+ this.modules = new ModuleManager_1.ModuleManager({
43
+ client: this,
44
+ });
45
+ this.version = version_js_1.version;
46
+ this.logger = (0, util_1.createLogger)(!!options.config?.fileLogging.stringifyLoggedJSON, options.config?.fileLogging.debugmode);
47
+ this.config = { ...this.config, ...(options.config ?? {}) };
48
+ if (this.config.fileLogging.enabled)
49
+ this.logger.logFile(util_1.path.join(flags_1.cwd, this.config.fileLogging.logFilePath ?? 'logs/latest.log'), false);
50
+ this.cwd = options.cwd ?? process.cwd();
51
+ this.applicationCommands = new ApplicationCommandManager_1.ApplicationCommandManager(this);
52
+ }
53
+ get isClientLogsSilent() {
54
+ return !this.config.fileLogging.clientLogs;
55
+ }
56
+ /**
57
+ * Listed to command executions
58
+ */
59
+ addCommandListeners() {
60
+ this.on(discord_js_1.Events.MessageCreate, message => {
61
+ if (this.config.commands.messageCommand.enabled)
62
+ this.messageCommandExecute(message);
63
+ });
64
+ this.on(discord_js_1.Events.InteractionCreate, interaction => {
65
+ if (this.config.commands.slashCommand.enabled)
66
+ this.slashCommandExecute(interaction);
67
+ });
68
+ return this;
69
+ }
70
+ /**
71
+ * Execute a slash command
72
+ * @param interaction Slash command interaction
73
+ */
74
+ async slashCommandExecute(interaction) {
75
+ if (!interaction || !interaction.isChatInputCommand() || !this.isReady())
76
+ return;
77
+ if (!this.config.commands.slashCommand.acceptRepliedInteractions && (interaction.replied || interaction.deferred))
78
+ return;
79
+ const command = this.commands.get(interaction.commandName, builders_1.CommandType.SlashCommand);
80
+ if (!command)
81
+ return;
82
+ const executeData = {
83
+ interaction,
84
+ builder: command,
85
+ client: this,
86
+ };
87
+ if ((0, permissions_1.userHasCommandPermissions)({
88
+ builder: command,
89
+ memberPermissions: interaction.memberPermissions ?? undefined,
90
+ commandPermissions: this.config.commands.slashCommand.permissions,
91
+ })) {
92
+ if (!command)
93
+ return;
94
+ if (interaction.inCachedGuild() && !(0, permissions_1.botHasExecutePermissions)(interaction.channel || interaction.guild, command.requiredBotPermissions)) {
95
+ if (!(await this._haltCommand(command, {
96
+ executeData,
97
+ reason: commands_1.CommandHaltReason.MissingBotPermissions,
98
+ }))) {
99
+ await interaction.reply(this.getConfigMessage('insufficientBotPerms', 'Insufficient bot permissions.')).catch(er => this._replyError(er));
100
+ }
101
+ return;
102
+ }
103
+ const userCooldown = {
104
+ user: interaction.user,
105
+ command: command.name,
106
+ channel: interaction.channel ?? undefined,
107
+ guild: interaction.guild,
108
+ type: builders_1.CommandType.SlashCommand,
109
+ };
110
+ if (this.config.commands.slashCommand.enableCooldown && command.cooldown && !this.cooldowns.isCooledDown(userCooldown)) {
111
+ this.cooldowns.add({
112
+ ...userCooldown,
113
+ expireTime: Date.now() + command.cooldown,
114
+ });
115
+ }
116
+ else if (this.config.commands.slashCommand.enableCooldown && command.cooldown) {
117
+ if (!(await this._haltCommand(command, {
118
+ executeData,
119
+ reason: commands_1.CommandHaltReason.Cooldown,
120
+ ...this.cooldowns.get(userCooldown),
121
+ }))) {
122
+ await interaction.reply(this.getConfigMessage('cooldown', 'You cannot execute this command right now due to the cooldown.')).catch(er => this._replyError(er));
123
+ }
124
+ return;
125
+ }
126
+ return this._executeCommand(command, executeData);
127
+ }
128
+ else if (!(await this._haltCommand(command, {
129
+ executeData,
130
+ reason: commands_1.CommandHaltReason.MissingMemberPermissions,
131
+ }))) {
132
+ await interaction.reply(this.getConfigMessage('noPermissions', 'You do not have permission to use this command.')).catch(er => this._replyError(er));
133
+ }
134
+ }
135
+ /**
136
+ * Execute a Message command
137
+ * @param message Message command executor
138
+ * @param prefix Message command prefix
139
+ */
140
+ async messageCommandExecute(message, prefix) {
141
+ if (!message.content || !this.isReady())
142
+ return;
143
+ const parseCommand = (0, fallout_utility_1.getCommand)(message.content, prefix || this.config.commands.messageCommand.prefix || '!', this.config.commands.messageCommand.commandArgumentSeparator || ' ');
144
+ if (!parseCommand || !parseCommand?.command)
145
+ return;
146
+ const command = this.commands.get(parseCommand.command, builders_1.CommandType.MessageCommand);
147
+ if (!command)
148
+ return;
149
+ const commandOptions = await MessageCommandBuilder_1.MessageCommandBuilder.validateOptions(command, parseCommand);
150
+ const executeData = {
151
+ message: message,
152
+ options: commandOptions,
153
+ command: parseCommand,
154
+ builder: command,
155
+ client: this,
156
+ };
157
+ if ((0, permissions_1.userHasCommandPermissions)({
158
+ builder: command,
159
+ memberPermissions: message.member?.permissions,
160
+ commandPermissions: this.config.commands.messageCommand.permissions,
161
+ })) {
162
+ if ((!command.allowExecuteInDM && message.channel.type === discord_js_1.ChannelType.DM) || (!command.allowExecuteByBots && (message.author.bot || message.author.system)))
163
+ return;
164
+ if (command.validateOptions) {
165
+ if (commandOptions.some(o => o.invalid)) {
166
+ if (!(await this._haltCommand(command, {
167
+ executeData,
168
+ reason: commands_1.CommandHaltReason.InvalidArguments,
169
+ invalidArguments: new MessageCommandOptionManager_1.MessageCommandOptionManager(...executeData.options.filter(o => o.invalid)),
170
+ }))) {
171
+ message.reply(this.getConfigMessage('invalidArguments', 'Invalid argument(s) given.')).catch(er => this._replyError(er));
172
+ }
173
+ return;
174
+ }
175
+ if (commandOptions.some(o => o.missing)) {
176
+ if (!(await this._haltCommand(command, {
177
+ executeData,
178
+ reason: commands_1.CommandHaltReason.MissingArguments,
179
+ missingArguments: new MessageCommandOptionManager_1.MessageCommandOptionManager(...executeData.options.filter(o => o.missing)),
180
+ }))) {
181
+ message.reply(this.getConfigMessage('missingArguments', 'Not enough arguments.')).catch(er => this._replyError(er));
182
+ }
183
+ return;
184
+ }
185
+ }
186
+ if (message.inGuild() && !(0, permissions_1.botHasExecutePermissions)(message.channel || message.guild, command.requiredBotPermissions)) {
187
+ if (!(await this._haltCommand(command, {
188
+ executeData,
189
+ reason: commands_1.CommandHaltReason.MissingBotPermissions,
190
+ }))) {
191
+ message.reply(this.getConfigMessage('insufficientBotPerms', 'Insufficient bot permissions.')).catch(er => this._replyError(er));
192
+ }
193
+ return;
194
+ }
195
+ const userCooldown = {
196
+ user: message.author,
197
+ command: command.name,
198
+ channel: message.channel,
199
+ guild: message.guild,
200
+ type: builders_1.CommandType.MessageCommand,
201
+ };
202
+ if (this.config.commands.messageCommand.enableCooldown && command.cooldown && !this.cooldowns.isCooledDown(userCooldown)) {
203
+ this.cooldowns.add({
204
+ ...userCooldown,
205
+ expireTime: Date.now() + command.cooldown,
206
+ });
207
+ }
208
+ else if (this.config.commands.messageCommand.enableCooldown && command.cooldown) {
209
+ if (!(await this._haltCommand(command, {
210
+ executeData,
211
+ reason: commands_1.CommandHaltReason.Cooldown,
212
+ ...this.cooldowns.get(userCooldown),
213
+ }))) {
214
+ await message.reply(this.getConfigMessage('cooldown', 'You cannot execute this command right now due to the cooldown.')).catch(er => this._replyError(er));
215
+ }
216
+ return;
217
+ }
218
+ return this._executeCommand(command, executeData);
219
+ }
220
+ else if (!(await this._haltCommand(command, {
221
+ executeData,
222
+ reason: commands_1.CommandHaltReason.MissingMemberPermissions,
223
+ }))) {
224
+ message.reply(this.getConfigMessage('noPermissions', 'You do not have permission to use this command.')).catch(er => this._replyError(er));
225
+ }
226
+ }
227
+ /**
228
+ * Get a message from config
229
+ * @param messageKey Config messages key
230
+ * @param defaultMessage Default message when the key does not exists
231
+ */
232
+ getConfigMessage(messageKey, defaultMessage) {
233
+ return this.config.messages[messageKey] ?? defaultMessage ?? messageKey;
234
+ }
235
+ /**
236
+ * Emits the {@link RecipleClientEvents["recipleReplyError"]} event
237
+ * @param error Received Error
238
+ */
239
+ _replyError(error) {
240
+ this.emit(RecipleEvents.ReplyError, error);
241
+ }
242
+ async _haltCommand(command, haltData) {
243
+ try {
244
+ const haltResolved = (command.halt
245
+ ? await Promise.resolve(command.type == builders_1.CommandType.SlashCommand ? command.halt(haltData) : command.halt(haltData)).catch(err => {
246
+ throw err;
247
+ })
248
+ : false) || false;
249
+ this.emit(RecipleEvents.CommandHalt, haltData);
250
+ return haltResolved;
251
+ }
252
+ catch (err) {
253
+ if (!this.isClientLogsSilent) {
254
+ this.logger.error(`An error occured executing command halt for "${command.name}"`);
255
+ this.logger.error(err);
256
+ }
257
+ return false;
258
+ }
259
+ }
260
+ async _executeCommand(command, executeData) {
261
+ try {
262
+ await Promise.resolve(command.type === builders_1.CommandType.SlashCommand ? command.execute(executeData) : command.execute(executeData))
263
+ .then(() => this.emit(RecipleEvents.CommandExecute, executeData))
264
+ .catch(async (err) => !(await this._haltCommand(command, {
265
+ executeData: executeData,
266
+ reason: commands_1.CommandHaltReason.Error,
267
+ error: err,
268
+ }))
269
+ ? this._commandExecuteError(err, executeData)
270
+ : void 0);
271
+ return executeData;
272
+ }
273
+ catch (err) {
274
+ if (await this._haltCommand(command, {
275
+ executeData: executeData,
276
+ reason: commands_1.CommandHaltReason.Error,
277
+ error: err,
278
+ }))
279
+ return;
280
+ await this._commandExecuteError(err, executeData);
281
+ }
282
+ }
283
+ /**
284
+ * Error message when a command fails to execute
285
+ * @param err Received error
286
+ * @param command Slash/Message command execute data
287
+ */
288
+ async _commandExecuteError(err, command) {
289
+ if (!this.isClientLogsSilent) {
290
+ this.logger.error(`An error occured executing ${command.builder.type == builders_1.CommandType.MessageCommand ? 'message' : 'slash'} command "${command.builder.name}"`);
291
+ this.logger.error(err);
292
+ }
293
+ if (!err || !command)
294
+ return;
295
+ if (SlashCommandBuilder_1.SlashCommandBuilder.isSlashCommandExecuteData(command)) {
296
+ if (!this.config.commands.slashCommand.replyOnError)
297
+ return;
298
+ await command.interaction.followUp(this.getConfigMessage('error', 'An error occurred.')).catch(er => this._replyError(er));
299
+ }
300
+ else if (MessageCommandBuilder_1.MessageCommandBuilder.isMessageCommandExecuteData(command)) {
301
+ if (!this.config.commands.messageCommand.replyOnError)
302
+ return;
303
+ await command.message.reply(this.getConfigMessage('error', 'An error occurred.')).catch(er => this._replyError(er));
304
+ }
305
+ }
306
+ }
307
+ exports.RecipleClient = RecipleClient;
308
+ //# sourceMappingURL=RecipleClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecipleClient.js","sourceRoot":"","sources":["../../../../src/reciple/classes/RecipleClient.ts"],"names":[],"mappings":"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"}