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