package Ġme . j ake j mat t son . discord kt . internal . command Ċ Ċ import Ġme . j ake j mat t son . discord kt . api .* Ċ import Ġme . j ake j mat t son . discord kt . api . arguments . Argument Type Ċ import Ġme . j ake j mat t son . discord kt . api . dsl .* Ċ import Ġme . j ake j mat t son . discord kt . internal . arguments .* Ċ import Ġme . j ake j mat t son . discord kt . internal . utils . Internal Logger Ċ Ċ /** Ċ Ġ* ĠInter mediate Ġresult Ġof Ġmanual Ġparsing . Ċ Ġ*/ Ċ internal Ġinterface ĠParse Result Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġparsing Ġsucceeded . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġargument Container ĠThe Ġparsing Ġresults . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠSuccess ( val Ġargument Container : ĠType Container ) Ġ: ĠParse Result ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠObject Ġindicating Ġthat Ġan Ġoperation Ġhas Ġfailed . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġreason ĠThe Ġreason Ġfor Ġfailure . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠFail ( val Ġreason : ĠString Ġ= Ġ"") Ġ: ĠParse Result Ċ } Ċ Ċ internal Ġsuspend Ġfun Ġparse Input To Bundle ( command : ĠCommand , Ġevent : ĠCommand Event <* >, Ġactual Args : ĠList < String >): ĠParse Result Ġ{ ĊĠĠĠ Ġval Ġexpected Ġ= Ġcommand . arguments Ġas ĠList < Argument Type < Any >> ĊĊĠĠĠ Ġval Ġerror Ġ= Ġwhen Ġ( val Ġinitial Conversion Ġ= Ġconvert Arguments ( actual Args , Ġexpected , Ġevent )) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠConversion Success Ġ-> Ġreturn ĠParse Result . Success ( bundle To Container ( initial Conversion . results )) ĊĠĠĠĠĠĠĠ Ġis ĠConversion Error Ġ-> ĠParse Result . Fail ( initial Conversion . error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! command . is Flex ible Ġ|| Ġexpected . size Ġ< Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġerror ĊĊĠĠĠ Ġval Ġsuccess List Ġ= Ġexpected ĊĠĠĠĠĠĠĠ Ġ. to Mutable List () ĊĠĠĠĠĠĠĠ Ġ. generate Per mutations () ĊĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġconversion Ġ= Ġconvert Arguments ( actual Args , Ġit , Ġevent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConversion Success Ġ-> Ġit Ġto Ġconversion . results ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( argument Types , Ġresults ) Ġ-> Ġargument Types . zip ( results ) Ġ} ĊĊĠĠĠ Ġval Ġsuccess Ġ= Ġwhen Ġ( success List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġreturn Ġerror ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġsuccess List . first () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Logger . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlex ible Ġcommand Ġresolved Ġambiguous ly . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ command . names . first ()} (${ expected . join ToString () }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput : Ġ${ actual Args . join ToString (" Ġ" )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerror ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġordered Result Ġ= Ġexpected . map Ġ{ Ġsort Key Ġ-> Ġsuccess . first Ġ{ Ġit . first Ġ== Ġsort Key Ġ}. second Ġ} ĊĊĠĠĠ Ġreturn ĠParse Result . Success ( bundle To Container ( ordered Result )) Ċ } Ċ Ċ private Ġfun Ġ< E > ĠMutable List < E >. generate Per mutations (): ĠList < List < E >> Ġ{ ĊĠĠĠ Ġif Ġ( isEmpty ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( listOf ()) ĊĊĠĠĠ Ġval Ġfirst Element Ġ= Ġremove At ( 0 ) ĊĠĠĠ Ġval ĠreturnValue Ġ= Ġmutable ListOf < List < E >>() ĊĊĠĠĠ Ġgenerate Per mutations (). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġ( 0 .. it . size ). forEach Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġit . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( index , Ġfirst Element ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠreturnValue . add ( temp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠreturnValue Ċ }