package Ġio . github . lun ar watcher . chat bot . bot . listener Ċ Ċ import Ġio . github . lun ar watcher . chat bot . Configurations Ċ import Ġio . github . lun ar watcher . chat bot . Constants Ċ import Ġio . github . lun ar watcher . chat bot . bot . chat . B Message Ċ import Ġio . github . lun ar watcher . chat bot . bot . command . Command Center Ċ import Ġio . github . lun ar watcher . chat bot . bot . command . Command Center . TRIGGER Ċ import Ġio . github . lun ar watcher . chat bot . bot . commands . User Ċ import Ġio . github . lun ar watcher . chat bot . bot . sites . Chat Ċ import Ġio . github . lun ar watcher . chat bot . bot . sites . se . SE Chat Ċ import Ġio . github . lun ar watcher . chat bot . utils . Http Ċ import Ġj odd . j erry . J erry Ċ import Ġorg . apache . http . impl . client . HttpClient s Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Socket Exception Ċ Ċ @ Suppress (" NAME _ SH ADO WING ") Ċ class ĠM ention Listener ( val Ġsite : ĠChat ) Ġ: ĠAbstract Listener (" ping ", Ġ" React s Ġto Ġp ings ") Ġ{ ĊĠĠĠ Ġvar Ġignore Next Ġ= Ġfalse ; ĊĠĠĠ Ġval Ġhttp : ĠHttp ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġval ĠhttpClient Ġ= ĠHttpClient s . create Default () ĊĠĠĠĠĠĠĠ Ġhttp Ġ= ĠHttp ( httpClient ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Input ( input : ĠString , Ġuser : ĠUser ): ĠB Message ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( input . startsWith ( Command Center . TRIGGER )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠĠĠĠĠ Ġif (! is Mention ed ( input )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( site Ġis ĠSE Chat ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// To Ġavoid Ġthis Ġst up idity : Ġhttps :// i . imgur . com / N 8 l Z 4 Q 9 . png ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġfix Ġ- Ġcurrently Ġgives Ġa Ġ 3 0 2 Ġstatus Ġcode . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( site . mention Ids . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġids Ġ= Ġsite . mention Ids . join ToString (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite . mention Ids . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite . http . post ("${ site . site . url }/ messages / ack ", ĠarrayOf (" Content - Type ", Ġ" text / plain "), Ġ" f key ", Ġsite . rooms . first Ġ{ Ġit . id Ġ== Ġuser . room ID Ġ}. f Key , Ġ" id ", Ġids ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite . commands . crash . crash ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( ignore Next ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġignore Next Ġ= Ġfalse ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġsplit Command ( input ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( split . keys . contains (" content ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmessage Ġ= Ġsplit [" content "] Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage . clean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġhttp . post (" http :// 1 2 7 . 0 . 0 . 1 :" Ġ+ ĠConstants . FL ASK _ PORT Ġ+ Ġ"/ predict ", Ġ" message ", Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreply : ĠString Ġ= Ġresponse . body . substring ( 1 , Ġresponse . body . length Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB Message ( reply , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠIOException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB Message (" How Ġcan ĠI Ġ`${ Command Center . TRIGGER } help ` ?", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch ( e : ĠSocket Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// A ĠVPN Ġor Ġsomething Ġelse Ġis Ġprevent ing Ġyou Ġfrom Ġconnecting Ġto Ġlocalhost . ĠNothing Ġmuch Ġto Ġdo Ġabout Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB Message (" How Ġcan ĠI Ġ`${ Command Center . TRIGGER } help ` ?", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetMessage ( input ) Ġ?: ĠB Message (" How Ġcan ĠI Ġ" Ġ+ ĠTR IG GER Ġ+ Ġ" help ?", Ġtrue ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCommands Ġor Ġwhatever Ġyou Ġw anna Ġcall Ġit Ġthat 's Ġhandled Ġthrough Ġp ings . ĠReturns Ġnull ĊĠĠĠĠ Ġ* Ġif Ġthere 's Ġno Ġreply Ġspecified Ġfor Ġthe Ġinput ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetMessage ( input : ĠString ) Ġ: ĠB Message ? { ĊĠĠĠĠĠĠĠ Ġ// Shadow ing Ġname Ġby Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġinput . toLowerCase (); ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput . contains (" help ") Ġ-> ĠB Message (" You Ġcan Ġsee Ġmy Ġcommands Ġby Ġdoing Ġ// help ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġadd Ġmore Ġstuff Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTODO ĠThis Ġis Ġa ĠTODO Ġas Ġthis Ġis Ġcritical Ġfor Ġfunction Ġif Ġa Ġnew Ġsite Ġis Ġadded . ĠPlease Ġread : ĊĠĠĠĠ Ġ* ĠThis Ġdefaults Ġto Ġa Ġ`@ Username ` Ġsystem . ĠShould Ġthe Ġsite Ġrun Ġa Ġsystem Ġsimilar Ġto Ġdiscord Ġ(@ username Ġis Ġformatted ĊĠĠĠĠ Ġ* Ġin Ġthe ĠAPI Ġas Ġ@ 1 2 3 4 Ġ( userID Ġinstead Ġof Ġusername ) Ġthis Ġhas Ġto Ġbe Ġedited Ġto Ġadd Ġsupport Ġfor Ġthat Ġsite . ĠOtherwise ĊĠĠĠĠ Ġ* Ġit Ġwon 't Ġsupport Ġit Ġproperly ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Mention ed ( input : ĠString ) Ġ: ĠBoolean { ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( site . name ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" discord " Ġ-> Ġinput . toLowerCase (). startsWith ("< @" Ġ+ Ġsite . site . config . userID Ġ+ Ġ"> ". toLowerCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġinput . toLowerCase (). startsWith ("< @ !" Ġ+ Ġsite . site . config . userID Ġ+ Ġ"> ". toLowerCase ()); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" stack exchange " Ġ-> Ġcontains Username ( input ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" stackoverflow " Ġ-> Ġcontains Username ( input ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" met ast ack exchange " Ġ-> Ġcontains Username ( input ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Else "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . contains ("@ " Ġ+ Ġsite . site . config . username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Mention ed Start ( input : ĠString ) Ġ: ĠBoolean { ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( site . name ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" discord " Ġ-> Ġinput . toLowerCase (). startsWith ("< @" Ġ+ Ġsite . site . config . userID Ġ+ Ġ"> ". toLowerCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġinput . toLowerCase (). startsWith ("< @ !" Ġ+ Ġsite . site . config . userID Ġ+ Ġ"> ". toLowerCase ()); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" stack exchange " Ġ-> Ġcontains Username ("^ " Ġ+ Ġinput . split (" Ġ" )[ 0 ]); // ^ Ġassert s Ġstart Ġof Ġthe Ġstring Ġin Ġregex . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" stackoverflow " Ġ-> Ġcontains Username ("^ " Ġ+ Ġinput . split (" Ġ" )[ 0 ]); // ^ Ġassert s Ġstart Ġof Ġthe Ġstring Ġin Ġregex . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" met ast ack exchange " Ġ-> Ġcontains Username ("^ " Ġ+ Ġinput . split (" Ġ" )[ 0 ]); // ^ Ġassert s Ġstart Ġof Ġthe Ġstring Ġin Ġregex . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Else "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . contains ("@ " Ġ+ Ġsite . site . config . username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġcontains Username ( input : ĠString ) Ġ: ĠBoolean Ġ= Ġ( site . site . config . username . length Ġdown To Ġ 3 ). any Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . toLowerCase (). contains ("${ ("@ " Ġ+ Ġsite . site . config . username . substring ( 0 , Ġit ). toLowerCase ()) }\\ b ". to Regex ()) ĊĠĠĠ Ġ}; ĊĊĠĠĠ Ġfun Ġignore Next (){ ĊĠĠĠĠĠĠĠ Ġignore Next Ġ= Ġtrue ; ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠString . clean () Ġ: ĠString { ĊĠĠĠ Ġreturn Ġthis . replace ("& quot ;", Ġ"\"" ). replace (" &# 3 9 ;", Ġ"' ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("& gt ;", Ġ"> "). replace ("& lt ;", Ġ"< ") Ċ }