add basic argument parsing (Still WIP)
This commit is contained in:
		
							parent
							
								
									66031d56c2
								
							
						
					
					
						commit
						d9925a4ac4
					
				
					 1 changed files with 86 additions and 0 deletions
				
			
		
							
								
								
									
										86
									
								
								src/utils/command.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								src/utils/command.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue