diff --git a/src/Arguments.ts b/src/Arguments.ts index 6312a18..5cd8ef9 100644 --- a/src/Arguments.ts +++ b/src/Arguments.ts @@ -2,8 +2,8 @@ export type ArgumentType = "STRING" | "BOOLEAN" | "INTEGER" | "FLOAT"; export type ArgumentResolvable = string | boolean | number; export interface Argument { name: string; - isOptional?: boolean; - type?: ArgumentType; + optional: boolean; + type: ArgumentType; } export const ProcessArgument = ( a: string, diff --git a/src/Bot.ts b/src/Bot.ts index 93798bc..50fe467 100644 --- a/src/Bot.ts +++ b/src/Bot.ts @@ -112,9 +112,8 @@ export class Bot extends EventEmitter { this.emit("READY"); }); this.client.on("message", async (m) => { - const cmdMsg: CommandMessageStructure | null = - this.commands.fetch(m); - if (cmdMsg?.command) { + const cmdMsg = this.commands.fetch(m); + if (cmdMsg) { this.emit("COMMAND", m, cmdMsg); try { await cmdMsg.command.start(m, cmdMsg.arguments); @@ -143,7 +142,8 @@ export class Bot extends EventEmitter { this.emit("ERROR", e); return; } - } else if (cmdMsg) { + } else if (m.content.startsWith(this.commands.prefix)) { + this.emit("MESSAGE", m); this.messages.system.send( "NOT_FOUND", { phrase: m.content, user: m.member || undefined }, diff --git a/src/Command.ts b/src/Command.ts index 9d0bcea..fbfddd4 100644 --- a/src/Command.ts +++ b/src/Command.ts @@ -6,15 +6,14 @@ import { GuildMember, MessageEmbed, } from "discord.js"; -import { Argument, ArgumentResolvable } from "./Arguments.js"; +import { Argument, ArgumentResolvable, ProcessArgument } from "./Arguments.js"; //TYPE DEFINITIONS type GetMode = "ALL" | "PREFIX" | "NO_PREFIX"; type PermissionCheckTypes = "ALL" | "ANY"; export interface CommandMessageStructure { - name: string; + command: Command; arguments: ArgumentResolvable[]; - command: Command | null; } interface CommandBuilder { name: string; @@ -145,7 +144,7 @@ export class Command { let usageTemplate: string = ""; this.arguments.map((e) => { usageTemplate += `[${e.name} (${e.type}${ - e.isOptional ? ", optional" : "" + e.optional ? ", optional" : "" })] `; }); return usageTemplate; @@ -261,47 +260,28 @@ export class CommandManager { * @returns *CommandMessagesStructure* | *null* */ fetch(message: Message): CommandMessageStructure | null { - if (!message.author.bot && message.content.startsWith(this.prefix)) { - let msgContent = message.content.replace(this.prefix, ""); - const cmdName = msgContent.split(" ")[0]; - const cmd: Command | null = this.get(cmdName, "PREFIX"); - msgContent = msgContent.replace(cmdName, ""); - let cmdArguments: string[] = msgContent.split( - this.argumentSeparator - ); - cmdArguments = cmdArguments.map((a) => { - return a.replace(" ", ""); - }); - if ( - (cmdArguments[0] == "" || cmdArguments[0] == " ") && - cmdArguments.length == 1 - ) { - cmdArguments = []; - } - return { - name: cmdName, - arguments: cmdArguments, - command: cmd, - }; - } else if (!message.author.bot) { - const cmdName = message.content.split(" ")[0]; - const cmd: Command | null = this.get(cmdName, "NO_PREFIX"); - if (cmd) { - const cmdArgumentsStr = message.content.replace(cmdName, ""); - let cmdArguments: string[] = cmdArgumentsStr.split(","); - cmdArguments = cmdArguments.map((a) => { - return a.replace(" ", ""); - }); + if (!message.author.bot) { + const content = message.content.startsWith(this.prefix) + ? message.content.replace(this.prefix, "") + : message.content; + const name = content.split(" ")[0]; + const command = this.get(name, "ALL"); + if (command) { + const argumentsText = content.replace(name, ""); + const argumentsList = argumentsText + .split(this.argumentSeparator) + .map((a) => { + return a.replace(" ", ""); + }); if ( - (cmdArguments[0] == "" || cmdArguments[0] == " ") && - cmdArguments.length == 1 + (argumentsList[0] == "" || argumentsList[0] == " ") && + argumentsList.length == 1 ) { - cmdArguments = []; + argumentsList.splice(0, 1); } return { - name: cmdName, - arguments: cmdArguments, - command: cmd, + command: command, + arguments: argumentsList, }; } else { return null;