package Ġio . github . hot l ava 0 3 . b acl ava 4 j . components Ċ Ċ import Ġorg . codehaus . groovy . js r 2 2 3 . Gro ovy Script Engine Impl Ċ import Ġreactor . core . F use able . Queue Subscription Ċ import Ġreactor . core . publisher . Mono Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . io . String Writer Ċ import Ġjava . util . concurrent .* Ċ import Ġjavax . script . Script Engine Ċ Ċ object ĠJava Eval Component Ġ{ ĊĠĠĠ Ġprivate Ġval ĠIMPORT S Ġ= ĠarrayOf (" io . github . hot l ava 0 3 . b acl ava 4 j . components .* ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" io . github . hot l ava 0 3 . b acl ava 4 j . commands .* ", Ġ" io . github . hot l ava 0 3 . b acl ava 4 j .* ", Ġ" discord 4 j . core .* ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" discord 4 j . core . event .* ", Ġ" discord 4 j . core . object .* ", Ġ" discord 4 j . core . object . entity .* ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" reactor . core . publisher .* ", Ġ" java . lang .* ", Ġ" java . io .* ", Ġ" java . math .* ", Ġ" java . eval .* ", Ġ" java . eval . concurrent .* ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" java . time .* ", Ġ" java . awt .* ", Ġ" java . awt . image .* ", Ġ" javax . image io .* ", Ġ" java . time . format .* ") ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġeval ( code : ĠString , Ġshortcuts : ĠMap < String ?, ĠAny ?> ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġengine : ĠScript Engine Ġ= ĠGro ovy Script Engine Impl () ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġshortcuts ) Ġengine . put ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġval Ġfuture Ġ= ĠExec utors . new Scheduled ThreadPool ( 1 , Ġnew Thread (" Java Eval Thread ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. schedule < Any >({ Ġengine . eval (" import Ġ" Ġ+ ĠIMPORT S . join ToString (" ;\ n import Ġ") Ġ+ Ġ"; \ n " Ġ+ Ġcode ) Ġ}, Ġ 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġval Ġout String Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ Ġval Ġout Writer Ġ= ĠPrintWriter ( out String ) ĊĠĠĠĠĠĠĠ Ġengine . context . writer Ġ= Ġout Writer ĊĠĠĠĠĠĠĠ Ġval Ġerror String Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ Ġval Ġerror Writer Ġ= ĠPrintWriter ( error String ) ĊĠĠĠĠĠĠĠ Ġengine . context . error Writer Ġ= Ġerror String ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠAny ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfuture [ 1 0 , ĠTimeUnit . SECONDS ] ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Writer . println ( e . cause . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTimeout Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Inter rupted . ĠCause : Ġ" Ġ+ Ġe . cause ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Inter rupted . ĠCause : Ġ" Ġ+ Ġe . cause ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( error String . toString (). isNotEmpty ()) Ġreturn Ġerror String . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠMono <* >) Ġresult . subscribe () Ġelse Ġif Ġ( result Ġis ĠQueue Subscription <* >) Ġreturn ĠEval Result ( null , Ġtrue ) Ġ// Ġwhen Ġusing Ġ. subscribe , Ġwe Ġmight Ġjust Ġcount Ġit Ġas Ġvoid ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( result Ġ!= Ġnull ) Ġif Ġ(! result . toString (). contains (" reactor . core . publisher . Lambda Mono Subscriber ")) Ġ// ĠLambda Mono Subscriber Ġis Ġa Ġpackage - private Ġclass ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEval Result ( result . toString (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( out String . toString (). isNotEmpty ()) ĠEval Result ( out String . toString (), Ġtrue ) Ġelse ĠEval Result ( null , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Thread ( name : ĠString ?): ĠThread Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠThread Factory Ġ{ Ġrun : ĠRunnable ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthread Ġ= ĠThread ( run , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread . is Daemon Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread . unc a ught ExceptionHandler Ġ= ĠThread . Un caught ExceptionHandler Ġ{ Ġt : ĠThread , Ġthrowable : ĠThrowable Ġ-> Ġprintln (" [" Ġ+ Ġt . name Ġ+ Ġ"] |[ Error ] Ġ" Ġ+ Ġthrowable . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }