package Ġf ra ug . d roid . features Ċ Ċ import Ġcom . github . aj alt . cli kt . core . Cli kt Command Ċ import Ġcom . github . aj alt . cli kt . core . Print Help Message Ċ import Ġcom . github . aj alt . cli kt . core . Usage Error Ċ import Ġcom . github . aj alt . cli kt . core . sub commands Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . argument Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . multiple Ċ import Ġcom . github . aj alt . cli kt . parameters . arguments . optional Ċ import Ġcom . github . aj alt . cli kt . parameters . types . long Ċ import Ġf ra ug . d roid . Bot Ċ import Ġf ra ug . d roid . Fish Ċ import Ġkotlinx . serialization . json . JsonArray Ċ import Ġkotlinx . serialization . json . JsonObject Ċ import Ġkotlinx . serialization . json . Json Primitive Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġkotlin . system . exit Process Ċ Ċ object ĠConsole Ġ: ĠRunnable Ġ{ ĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" starting Ġconsole ") ĊĠĠĠĠĠĠĠ ĠThread ( this ). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhh mm ss ToDate ( hh mm ss : ĠString ): ĠDate Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( hours , Ġminutes , Ġseconds ) Ġ= Ġhh mm ss . split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . toInt () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠG regorian Calendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . HOUR , Ġhours ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . MINUTE , Ġminutes ) ĊĠĠĠĠĠĠĠ Ġcalendar . set ( Calendar . SECOND , Ġseconds ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcalendar . time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Fish ( fish : ĠFish ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fish Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" no Ġfish ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠendDate Ġ= Ġfish . end ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDate ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ("${ fish . id }: Ġ${ Date ( fish . start )} Ġ- Ġ$ endDate ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Fish ( id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfish Ġ= Ġfish Queries . select Fish ( id ). execute As One OrNull () ĊĊĠĠĠĠĠĠĠ Ġprint Fish ( fish ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġadd Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" add ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġby Ġargument () ĊĠĠĠĠĠĠĠ Ġval Ġend Ġby Ġargument () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . add Fish ( hh mm ss ToDate ( start ). time , Ġhh mm ss ToDate ( end ). time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġfish Queries . last Row Id (). execute As One () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Fish ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġstart Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" s ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . add Fish ( Date (). time , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġfish Queries . last Row Id (). execute As One () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Fish ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġend Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" e ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfish Ġ= Ġfish Queries . select Last Visible Fish (). execute As One () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . update Fish End ( id Ġ= Ġfish . id , Ġend Ġ= ĠDate (). time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Fish ( fish . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġedit Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" edit ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġby Ġargument (). long () ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġby Ġargument (). optional () ĊĠĠĠĠĠĠĠ Ġval Ġend Ġby Ġargument (). optional () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . update Fish Start ( id Ġ= Ġid , Ġstart Ġ= Ġhh mm ss ToDate ( start !! ). time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . update Fish End ( id Ġ= Ġid , Ġend Ġ= Ġhh mm ss ToDate ( end !! ). time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Fish ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlist Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" list ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . selectAll Fish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute As List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġprint Fish ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdelete Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" delete ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġby Ġargument (). long () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . delete Fish ( id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdelete All Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" delete All ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . delete All F ishes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . delete All Attempts () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġquit Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" quit ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġattempt Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" attempt ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġby Ġargument () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfish Queries . add Attempt ( username , ĠDate (). time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmessage Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" message ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġby Ġargument (). multiple () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBot . sendMessage ( message . join ToString (" Ġ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġleader board Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" leader board ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( Leader board . asString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġexport Command Ġ= Ġobject Ġ: ĠCli kt Command ( name Ġ= Ġ" export ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf ishes Ġ= Ġfish Queries . selectAll Fish (). execute As List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattempts Ġ= Ġfish Queries . selectAll Attempts (). execute As List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJsonObject ( map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" f ishes " Ġto ĠJson Array ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf ishes . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto ĠJson Primitive ( it . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" start " Ġto ĠJson Primitive ( it . start ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" end " Ġto ĠJson Primitive ( it . end ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attempts " Ġto ĠJson Array ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattempts . map Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto ĠJson Primitive ( it . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timestamp " Ġto ĠJson Primitive ( it . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile (" export . json "). write Text ( jsonObject . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmain Command Ġ= Ġobject Ġ: ĠCli kt Command (" unused ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġaliases () Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" l " Ġto ĠlistOf (" list "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" d " Ġto ĠlistOf (" delete "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" q " Ġto ĠlistOf (" quit "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto ĠlistOf (" attempt ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. sub commands ( ĊĠĠĠĠĠĠĠ Ġadd Command , ĊĠĠĠĠĠĠĠ Ġlist Command , ĊĠĠĠĠĠĠĠ Ġedit Command , ĊĠĠĠĠĠĠĠ Ġstart Command , ĊĠĠĠĠĠĠĠ Ġend Command , ĊĠĠĠĠĠĠĠ Ġdelete Command , ĊĠĠĠĠĠĠĠ Ġquit Command , ĊĠĠĠĠĠĠĠ Ġdelete All Command , ĊĠĠĠĠĠĠĠ Ġmessage Command , ĊĠĠĠĠĠĠĠ Ġattempt Command , ĊĠĠĠĠĠĠĠ Ġleader board Command , ĊĠĠĠĠĠĠĠ Ġexport Command ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("> ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġread Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Command . parse ( line . split (" Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUsage Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e . help Message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPrint Help Message ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e . command . get Formatted Help ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Oo op ss si ie ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }