package Ġdev . lun ar coffee . ris ako . bot . ext s . commands . owner . ex . exec utors Ċ Ċ import Ġdev . lun ar coffee . ris ako . bot . ext s . commands . owner . ex . Exec Result Ċ import Ġdev . lun ar coffee . ris ako . framework . api . extensions .* Ċ import Ġdev . lun ar coffee . ris ako . framework . core . commands . Command Context Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . system . measure Nano Time Ċ Ċ class ĠShell Script Executor ( private Ġval Ġscript : ĠString ) Ġ: ĠCode Executor Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġexecute ( ctx : ĠCommand Context ): ĠExec Result Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("$ SCRIPT _ ROOT / script . sh "). write Text ("# !/ bin / bash \ n $ script ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġprocess : ĠProcess ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġfile Out Ġ= ĠFile ("$ SCRIPT _ ROOT / out . txt ") ĊĠĠĠĠĠĠĠ Ġval Ġfile Err Ġ= ĠFile ("$ SCRIPT _ ROOT / err . txt ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Ġ= ĠProcess Builder (" bash ", Ġ"$ SCRIPT _ ROOT / script . sh ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. redirect Output ( Process Builder . Redirect . to ( file Out )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. redirect Error ( Process Builder . Redirect . to ( file Err )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĠwaitFor ( 1 0 , ĠTimeUnit . SECONDS ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . send Error (" Error Ġstarting Ġprocess ! ĠCheck Ġyour ĠPM s Ġfor Ġdetails .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . event . author . open Private Channel (). await (). send (" ``` $ e ``` ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠExec Result . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ/ Ġ 1 _ 0 0 0 _ 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġcorrect Ġshell Ġenvironment Ġname Ġfor Ġthe ĠOS . ĠNot Ġsure Ġwhy Ġthis Ġis Ġeven Ġhere , Ġsince Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġactual Ġexecution Ġpart Ġonly Ġsupports Ġbash . ĠMaybe ĠI 'll Ġdo Ġsomething Ġwith Ġthat Ġlater . ĊĠĠĠĠĠĠĠ Ġval Ġos Name Ġ= ĠSystem . getProperty (" os . name ") ĊĠĠĠĠĠĠĠ Ġval Ġname Of Executor Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Windows " Ġin Ġos Name Ġ-> Ġ" Windows ĠPowerShell Ġ 6 . 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Linux " Ġin Ġos Name Ġ-> Ġ" GNU ĠBash Ġ 5 . 0 . 3 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Unknown ĠShell ĠEnvironment " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstdout Ġ= Ġ"\ n ${ file Out . read Text (). trim ()} ". if Blank Ġ{ Ġ"" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstderr Ġ= Ġ"\ n ${ file Err . read Text (). trim ()} ". if Blank Ġ{ Ġ"" Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠExec Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Of Executor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstdout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstderr , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess !!. exit Value (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS CRIPT _ ROOT Ġ= Ġ" src / main / resources / ex / sh " ĊĠĠĠ Ġ} Ċ } Ċ