add basic argument parsing (Still WIP)
This commit is contained in:
parent
66031d56c2
commit
d9925a4ac4
|
@ -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<string, unknown> {
|
||||
const messageArgsNullableCopy: Array<string | null> = [...messageArgs]
|
||||
const args: Record<string, unknown> = {}
|
||||
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<string, unknown>,
|
||||
entry: Args,
|
||||
argsNullable: Array<string | null>
|
||||
): 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<string, unknown>,
|
||||
entry: Args,
|
||||
argsNullable: Array<string | null>
|
||||
): 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<string, unknown>,
|
||||
entry: Args,
|
||||
argsNonNullable: Array<string | null>
|
||||
): void {
|
||||
args[entry.name] =
|
||||
argsNonNullable.length !== 0 ? argsNonNullable : entry.defaultValue
|
||||
return
|
||||
}
|
||||
|
||||
function parseRest(
|
||||
args: Record<string, unknown>,
|
||||
entry: Args,
|
||||
argsNullable: Array<string | null>
|
||||
): void {
|
||||
args[entry.name] = argsNullable.filter((x) => typeof x === 'string')
|
||||
}
|
Loading…
Reference in New Issue