diff --git a/src/structure/components/observers/CommandHandler.js b/src/structure/components/observers/CommandHandler.js index 7c0455b..a989dc6 100644 --- a/src/structure/components/observers/CommandHandler.js +++ b/src/structure/components/observers/CommandHandler.js @@ -18,6 +18,8 @@ class CommandHandler extends Observer { ['interactionCreate', this.interactionCreate.bind(this)] ]; + this._mentionPattern = null; + } async messageCreate(message) { @@ -31,16 +33,19 @@ class CommandHandler extends Observer { if(!message.member) await message.guild.members.fetch(message.author.id); } - const { command, parameters } = await this._getCommand(message); + const messageWrapper = new MessageWrapper(this.client, message); + + const { command, parameters } = await this._getCommand(messageWrapper); if (!command) return undefined; - const invoker = new InvokerWrapper(this.client, new MessageWrapper(this.client, message), command); - const inhibitors = this._handleInhibitors(invoker); + const invoker = new InvokerWrapper(this.client, messageWrapper, command); + const inhibitors = await this._handleInhibitors(invoker); if (inhibitors.length) return this._generateError(invoker, { type: 'inhibitor', ...inhibitors[0] }); - // const arguments = await this._parseArguments(invoker, parameters); + const options = await this._parseMessage(invoker, parameters); - this._executeCommand(invoker, {}); + // Temp setup + //this._executeCommand(invoker, parameters); } @@ -130,9 +135,6 @@ class CommandHandler extends Observer { } - /** - * @param {InteractionWrapper} interaction - */ async _parseInteraction(interaction, command) { const { subcommand } = interaction; @@ -196,6 +198,13 @@ class CommandHandler extends Observer { } + async _parseMessage(invoker, params) { + + const { options } = invoker.command; + console.log(options); + + } + async _parseOption(interaction, option) { const { guild } = interaction; @@ -304,19 +313,30 @@ class CommandHandler extends Observer { } async _getCommand(message) { + + if (!this._mentionPattern) this._mentionPattern = new RegExp(`^(<@!?${this.client.user.id}>)`, 'iu'); + const [arg1, arg2, ...args] = message.content.split(' '); - //TODO: Move this somewhere else. RegExp should not be created every method call, but it requires the client user to be loaded. - const mentionPattern = new RegExp(`^(<@!?${this.client.user.id}>)`, 'iu'); + if (message.guild) await message.guild.settings(); + const userWrapper = await this.client.getUserWrapper(message.author.id); + await userWrapper.settings(); + const { prefix } = message; let command = null, - parameters = []; - if(mentionPattern.test(message.content)) { - const [ , commandName, ...rest] = message.content.split(" "); - command = this._matchCommand(commandName); - parameters = rest.join(" "); + remains = []; + if (arg1 && arg1.startsWith(prefix)) { + const commandName = arg1.slice(prefix.length); //Grabs the command name by slicing off the prefix. + command = await this._matchCommand(commandName); + remains = [arg2, ...args]; + message._caller = commandName; + } else if (arg1 && arg2 && arg1.startsWith('<@')) { //Checks if the first argument is a mention and if a command is after it. + if (arg2 && this._mentionPattern.test(arg1)) + command = await this._matchCommand(arg2); + remains = args; + message._caller = arg2; } - return { command, parameters }; + return { command, parameters: remains }; }