diff --git a/src/class/Command.ts b/src/class/Command.ts index e17a29e..a6cec05 100644 --- a/src/class/Command.ts +++ b/src/class/Command.ts @@ -18,7 +18,7 @@ export default class Command { guildOnly?: boolean - subcommands: Map + subcommands: Command[] public run(message: Message, args: string[]) {} // eslint-disable-line @@ -30,7 +30,7 @@ export default class Command { this.aliases = []; this.guildOnly = true; this.client = client; - this.subcommands = new Map(); + this.subcommands = []; this.permissions = {}; } } diff --git a/src/class/Util.ts b/src/class/Util.ts index f21a081..b02284a 100644 --- a/src/class/Util.ts +++ b/src/class/Util.ts @@ -36,47 +36,15 @@ export default class Util { return result; } - public resolveCommand(command: string, args: string[]): { command: Command, args: string[]} { - let Cmd: Command; - if (this.client.commands.has(command)) Cmd = this.client.commands.get(command); - else { - for (const cmd of this.client.commands.values()) { - if (!cmd.aliases) continue;// eslint-disable-line no-continue - for (const alias of cmd.aliases) { - if (command.toLowerCase() === alias.toLowerCase()) { - Cmd = cmd; - } else { - return undefined; - } - } + public resolveCommand(command: string): Command { + if (this.client.commands.has(command)) return this.client.commands.get(command); + for (const cmd of this.client.commands.values()) { + if (!cmd.aliases) continue;// eslint-disable-line no-continue + for (const alias of cmd.aliases) { + if (command === alias.toLowerCase()) return cmd; } } - if (!Cmd) return undefined; - let hasSubcmd = true; - while (hasSubcmd) { - if (!Cmd.subcommands.size) { - hasSubcmd = false; break; - } - if (Cmd.subcommands.has(args[0])) { - Cmd = Cmd.subcommands.get(args[0]); - args.shift(); - } else { - for (const cmd of Cmd.subcommands.values()) { - if (!cmd.aliases) continue; // eslint-disable-line - for (const alias of cmd.aliases) { - if (args[0].toLowerCase() === alias.toLowerCase()) { - Cmd = cmd; args.shift(); break; - } - } - break; - } - } - } - return { command: Cmd, args }; - } - - public resolveSubcommand(parentCmd: Command, args?: string[]) { - + return undefined; } public async handleError(error: Error, message?: Message, command?: Command): Promise { diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts index fb81835..a263db7 100644 --- a/src/events/messageCreate.ts +++ b/src/events/messageCreate.ts @@ -15,30 +15,30 @@ export default class { if (message.content.indexOf(this.client.config.prefix) !== 0) return; const noPrefix: string[] = message.content.slice(this.client.config.prefix.length).trim().split(/ +/g); const command: string = noPrefix[0].toLowerCase(); - const Args = noPrefix.slice(1); - const resolved: { command: Command, args: string[] } = this.client.util.resolveCommand(command, Args); + const resolved: Command = this.client.util.resolveCommand(command); if (!resolved) return; - if (resolved.command.guildOnly && !(message.channel instanceof TextChannel)) return; + if (resolved.guildOnly && !(message.channel instanceof TextChannel)) return; let hasUserPerms: boolean; - if (resolved.command.permissions.users) { - hasUserPerms = resolved.command.permissions.users.includes(message.author.id); + if (resolved.permissions.users) { + hasUserPerms = resolved.permissions.users.includes(message.author.id); } let hasRolePerms: boolean = false; - if (resolved.command.permissions.roles) { - for (const role of resolved.command.permissions.roles) { + if (resolved.permissions.roles) { + for (const role of resolved.permissions.roles) { if (message.member && message.member.roles.includes(role)) { // this.client.signale.debug(message.member.roles.includes(role)); hasRolePerms = true; break; } } } - if (!resolved.command.permissions.users && !resolved.command.permissions.roles) { + if (!resolved.permissions.users && !resolved.permissions.roles) { hasUserPerms = true; hasRolePerms = true; } if (!hasRolePerms && !hasUserPerms) return; - if (!resolved.command.enabled) { message.channel.createMessage(`***${this.client.stores.emojis.error} This command has been disabled***`); return; } - resolved.command.run(message, resolved.args); + if (!resolved.enabled) { message.channel.createMessage(`***${this.client.stores.emojis.error} This command has been disabled***`); return; } + const args: string[] = noPrefix.slice(1); + resolved.run(message, args); } catch (error) { this.client.util.handleError(error, message); }