From d9925a4ac45449791c36fe2d9362aeceed3a8db7 Mon Sep 17 00:00:00 2001 From: mierenmanz Date: Tue, 27 Apr 2021 23:04:27 +0200 Subject: [PATCH] add basic argument parsing (Still WIP) --- src/utils/command.ts | 86 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/utils/command.ts diff --git a/src/utils/command.ts b/src/utils/command.ts new file mode 100644 index 0000000..30c206e --- /dev/null +++ b/src/utils/command.ts @@ -0,0 +1,86 @@ +export enum MatchTypes { + 'flag', + 'mention', + 'content', + 'rest' +} + +export interface Args { + name: string + match: MatchTypes + type?: unknown // Still needs to be implemented + defaultValue?: unknown // Still needs to be implemented + flag?: string +} + +const mentionRegex = /([0-9]{18})/g + +export function parseArgs2( + commandArgs: Args[], + messageArgs: string[] +): Record { + const messageArgsNullableCopy: Array = [...messageArgs] + const args: Record = {} + for (const entry of commandArgs) { + switch (entry.match) { + case MatchTypes.flag: + parseFlags(args, entry, messageArgsNullableCopy) + break + case MatchTypes.mention: + parseMention(args, entry, messageArgsNullableCopy) + break + case MatchTypes.content: + parseContent(args, entry, messageArgs) + break + case MatchTypes.rest: + parseRest(args, entry, messageArgsNullableCopy) + break + } + } + return args +} + +function parseFlags( + args: Record, + entry: Args, + argsNullable: Array +): void { + for (let i = 0; i < argsNullable.length; i++) { + if (entry.flag === argsNullable[i]) { + argsNullable[i] = null + args[entry.name] = true + break + } else args[entry.name] = entry.defaultValue + } + return +} + +function parseMention( + args: Record, + entry: Args, + argsNullable: Array +): void { + const index = argsNullable.findIndex((x) => typeof x === 'string') + const mention = mentionRegex.exec(argsNullable[index]!)![0] + argsNullable[index] = null + args[entry.name] = mention + return +} + +function parseContent( + args: Record, + entry: Args, + argsNonNullable: Array +): void { + args[entry.name] = + argsNonNullable.length !== 0 ? argsNonNullable : entry.defaultValue + return +} + +function parseRest( + args: Record, + entry: Args, + argsNullable: Array +): void { + args[entry.name] = argsNullable.filter((x) => typeof x === 'string') +}