parseMention now parses channel & roles mentions
This commit is contained in:
		
							parent
							
								
									b3220fa155
								
							
						
					
					
						commit
						222f1d0fa8
					
				
					 1 changed files with 27 additions and 6 deletions
				
			
		|  | @ -1,5 +1,23 @@ | ||||||
| import { MessageMentions } from '../structures/messageMentions.ts' | interface MentionToRegex { | ||||||
| export type CommandArgumentMatchTypes = 'flag' | 'mention' | 'content' | 'rest' |   [key: string]: RegExp | ||||||
|  |   mentionUser: RegExp | ||||||
|  |   mentionRole: RegExp | ||||||
|  |   mentionChannel: RegExp | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const mentionToRegex: MentionToRegex = { | ||||||
|  |   mentionUser: /<@!?(\d{17,19})>/g, | ||||||
|  |   mentionRole: /<@&(\d{17,19})>/g, | ||||||
|  |   mentionChannel: /<#(\d{17,19})>/g | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export type CommandArgumentMatchTypes = | ||||||
|  |   | 'flag' | ||||||
|  |   | 'mentionUser' | ||||||
|  |   | 'mentionRole' | ||||||
|  |   | 'mentionChannel' | ||||||
|  |   | 'content' | ||||||
|  |   | 'rest' | ||||||
| 
 | 
 | ||||||
| export interface Args<T = unknown> { | export interface Args<T = unknown> { | ||||||
|   name: string |   name: string | ||||||
|  | @ -22,7 +40,9 @@ export function parseArgs( | ||||||
|       case 'flag': |       case 'flag': | ||||||
|         parseFlags(args, entry, messageArgsNullableCopy) |         parseFlags(args, entry, messageArgsNullableCopy) | ||||||
|         break |         break | ||||||
|       case 'mention': |       case 'mentionUser': | ||||||
|  |       case 'mentionRole': | ||||||
|  |       case 'mentionChannel': | ||||||
|         parseMention(args, entry, messageArgsNullableCopy) |         parseMention(args, entry, messageArgsNullableCopy) | ||||||
|         break |         break | ||||||
|       case 'content': |       case 'content': | ||||||
|  | @ -55,13 +75,14 @@ function parseMention( | ||||||
|   entry: Args, |   entry: Args, | ||||||
|   argsNullable: Array<string | null> |   argsNullable: Array<string | null> | ||||||
| ): void { | ): void { | ||||||
|  |   const regex = mentionToRegex[entry.match] | ||||||
|   const index = argsNullable.findIndex( |   const index = argsNullable.findIndex( | ||||||
|     (x) => typeof x === 'string' && x.includes('<@!') |     (x) => typeof x === 'string' && regex.test(x) | ||||||
|   ) |   ) | ||||||
|   const regexMatches = MessageMentions.USER_MENTION.exec(argsNullable[index]!) |   const regexMatches = regex.exec(argsNullable[index]!) | ||||||
|   args[entry.name] = |   args[entry.name] = | ||||||
|     regexMatches !== null |     regexMatches !== null | ||||||
|       ? regexMatches[0].replace(MessageMentions.USER_MENTION, '$1') |       ? regexMatches[0].replace(regex, '$1') | ||||||
|       : entry.defaultValue |       : entry.defaultValue | ||||||
|   argsNullable[index] = null |   argsNullable[index] = null | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue