/* Ċ Ġ* ĠThis ĠSource ĠCode ĠForm Ġis Ġsubject Ġto Ġthe Ġterms Ġof Ġthe ĠMozilla ĠPublic Ċ Ġ* ĠLicense , Ġv . Ġ 2 . 0 . ĠIf Ġa Ġcopy Ġof Ġthe ĠM PL Ġwas Ġnot Ġdistributed Ġwith Ġthis Ċ Ġ* Ġfile , ĠYou Ġcan Ġobtain Ġone Ġat Ġhttps :// mozilla . org / MPL / 2 . 0 /. Ċ Ġ*/ Ċ Ċ @ file : Opt In ( ĊĠĠĠ ĠK ord Preview :: class , ĊĠĠĠ ĠConverter To Default ing :: class , ĊĠĠĠ ĠConverter To Multi :: class , ĊĠĠĠ ĠConverter To Optional :: class Ċ ) Ċ Ċ package Ġcom . kot l ind is cord . k ord . extensions . commands . converters . impl Ċ Ċ import Ġcom . kot l ind is cord . k ord . extensions . Discord Relay ed Exception Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . Argument Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . Command Context Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . chat . Chat Command Context Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . converters . Converter To Default ing Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . converters . Converter To Multi Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . converters . Converter To Optional Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . converters . Single Converter Ċ import Ġcom . kot l ind is cord . k ord . extensions . commands . converters . Validator Ċ import Ġcom . kot l ind is cord . k ord . extensions . modules . annotations . converters . Converter Ċ import Ġcom . kot l ind is cord . k ord . extensions . modules . annotations . converters . Converter Type Ċ import Ġcom . kot l ind is cord . k ord . extensions . parser . String Parser Ċ import Ġcom . kot l ind is cord . k ord . extensions . utils . users Ċ import Ġdev . k ord . common . annotation . K ord Preview Ċ import Ġdev . k ord . common . entity . Snow flake Ċ import Ġdev . k ord . core . entity . Member Ċ import Ġdev . k ord . core . entity . User Ċ import Ġdev . k ord . core . entity . interaction . Option Value Ċ import Ġdev . k ord . rest . builder . interaction . Options Builder Ċ import Ġdev . k ord . rest . builder . interaction . User Builder Ċ import Ġkotlinx . coroutines . flow . first OrNull Ċ Ċ /** Ċ Ġ* ĠArgument Ġconverter Ġfor Ġdiscord Ġ[ Member ] Ġarguments . Ċ Ġ* Ċ Ġ* ĠMembers Ġrepresent ĠDiscord Ġusers Ġthat Ġare Ġpart Ġof Ġa Ġguild . ĠThis Ġconverter Ġsupports Ġspecifying Ġmembers Ġby Ġsupply ing : Ċ Ġ* Ġ* ĠA Ġuser Ġor Ġmember Ġmention Ċ Ġ* Ġ* ĠA Ġuser ĠID Ċ Ġ* Ġ* ĠThe Ġuser 's Ġtag Ġ(` username # dis criminator `) Ċ Ġ* Ċ Ġ* Ġ@ param Ġrequired Guild ĠLambda Ġreturning Ġa Ġspecific Ġguild Ġto Ġrequire Ġthe Ġmember Ġto Ġbe Ġin , Ġif Ġneeded . Ċ Ġ* Ġ@ param Ġuse Reply ĠWhether Ġto Ġuse Ġthe Ġauthor Ġof Ġthe Ġrep lied - to Ġmessage Ġ( if Ġthere Ġis Ġone ) Ġinstead Ġof Ġtrying Ġto Ġparse Ġan Ċ Ġ* Ġargument . Ċ Ġ*/ Ċ @ Converter ( ĊĠĠĠ Ġ" member ", ĊĊĠĠĠ Ġtypes Ġ= Ġ[ Converter Type . LIST , ĠConverter Type . OPTIONAL , ĠConverter Type . SINGLE ], ĊĠĠĠ Ġimports Ġ= Ġ[" dev . k ord . common . entity . Snow flake "], ĊĊĠĠĠ Ġbuilder Fields Ġ= Ġ[ ĊĠĠĠĠĠĠĠ Ġ" public Ġvar Ġrequired Guild : Ġ( suspend Ġ() Ġ-> ĠSnow flake )? Ġ= Ġnull ", ĊĠĠĠĠĠĠĠ Ġ" public Ġvar Ġuse Reply : ĠBoolean Ġ= Ġtrue ", ĊĠĠĠ Ġ] Ċ ) Ċ @ Opt In ( K ord Preview :: class ) Ċ public Ġclass ĠMember Converter ( ĊĠĠĠ Ġprivate Ġvar Ġrequired Guild : Ġ( suspend Ġ() Ġ-> ĠSnow flake )? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġvar Ġuse Reply : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġoverride Ġvar Ġvalidator : ĠValidator < Member > Ġ= Ġnull Ċ ) Ġ: ĠSingle Converter < Member >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġsignature TypeString : ĠString Ġ= Ġ" converters . member . signature Type " ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġparse ( parser : ĠString Parser ?, Ġcontext : ĠCommand Context , Ġnamed : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( use Reply Ġ&& Ġcontext Ġis ĠChat Command Context <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Reference Ġ= Ġcontext . message . as Message (). message Reference ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Reference Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember Ġ= Ġmessage Reference . message ?. as Message ()?. get Author As Member () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Ġ= Ġmember ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġarg : ĠString Ġ= Ġnamed Ġ?: Ġparser ?. parse Next ()?. data Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġparsed Ġ= Ġfind Member ( arg , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠDiscord Relay ed Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . translate (" converters . member . error . missing ", Ġreplacement s Ġ= ĠarrayOf ( arg )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġfind Member ( arg : ĠString , Ġcontext : ĠCommand Context ): ĠMember ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser ? Ġ= Ġif Ġ( arg . startsWith ("< @ ") Ġ&& Ġarg . endsWith ("> ")) Ġ{ Ġ// ĠIt 's Ġa Ġmention ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : ĠString Ġ= Ġarg . substring ( 2 , Ġarg . length Ġ- Ġ 1 ). replace (" !", Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord . getUser ( Snow flake ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDiscord Relay ed Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . translate (" converters . member . error . invalid ", Ġreplacement s Ġ= ĠarrayOf ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ġ// ĠTry Ġfor Ġa Ġuser ĠID Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord . getUser ( Snow flake ( arg )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ Ġ// ĠIt 's Ġnot Ġan ĠID , Ġlet 's Ġtry Ġthe Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! arg . contains ("# ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ord . users . first OrNull Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . tag . equals ( arg , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġguild Id : ĠSnow flake Ġ= Ġif Ġ( required Guild Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Guild !!. invoke () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . get Guild ()?. id ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġuser ?. as Member ( guild Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġto Slash Option ( arg : ĠArgument < *> ): ĠOptions Builder Ġ= ĊĠĠĠĠĠĠĠ ĠUser Builder ( arg . displayName , Ġarg . description ). apply Ġ{ Ġrequired Ġ= Ġtrue Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġparse Option ( context : ĠCommand Context , Ġoption : ĠOption Value < *> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoption Value Ġ= Ġ( option Ġas ? ĠOption Value . Member Option Value )?. value Ġas ? ĠMember Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġthis . parsed Ġ= Ġoption Value ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ