package Ġde . s amb alm ues lie . games . h ll . tool . features . map vote . process ĊĊ Ċ import Ġde . s amb alm ues lie . games . h ll . tool . features . map vote . db . Map Vote Server Settings Data Ċ import Ġde . s amb alm ues lie . games . h ll . tool . features . map vote . db . Map Vote Server Settings Repository Ċ import Ġde . s amb alm ues lie . games . h ll . tool . monitor . server . Server Service Ċ import Ġde . s amb alm ues lie . games . h ll . tool . monitor . server . api . Server Change Request Ċ import Ġde . s amb alm ues lie . games . h ll . tool . monitor . server . api . Server Settings Change Request Ċ import Ġdiscord 4 j . common . util . Snow flake Ċ import Ġdiscord 4 j . core .` object `. entity . Guild Ċ import Ġdiscord 4 j . core .` object `. entity . channel . Text Channel Ċ import Ġdiscord 4 j . core . event . domain . message . Message Create Event Ċ import Ġdiscord 4 j . core . spec . Embed Create Spec Ċ import Ġdiscord 4 j . core . spec . Message Create Spec Ċ import Ġdiscord 4 j . rest . util . Color Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġreactor . core . publisher . Mono Ċ import Ġjava . time . Instant ĊĊ Ċ internal Ġclass ĠServer Install Process Entry ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠMap Vote Server Settings Repository , ĊĠĠĠ Ġprivate Ġval Ġserver Service : ĠServer Service , ĊĠĠĠ Ġprivate Ġvar Ġstate : ĠServer Install State Ġ= ĠServer Install State . INIT , Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( Server Install Process Entry :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠADD _ SERVER _ REGEX Ġ= Ġ"( \\ d { 1 , 3 }. \\ d { 1 , 3 }. \\ d { 1 , 3 }. \\ d { 1 , 3 }) Ġ( \\ d +) Ġ( \\ S +) ". to Regex () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Message Event ( event : ĠMessage Create Event , Ġcontent : ĠString , Ġguild Id : ĠLong ): ĠMono < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠServer Install State . INIT Ġ-> Ġevent . guild . flatMap Ġ{ Ġcreate Discord Channels ( event , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠServer Install State . ADD _ SERVER Ġ-> Ġregister Server ( event , Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMono . empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠ Ġprivate Ġfun Ġregister Server ( event : ĠMessage Create Event , Ġcontent : ĠString ): ĠMono < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannel Id Ġ= Ġevent . message . channelId . as Long () ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġrepository . findBy Admin Channel Id ( channelId ) Ġ?: Ġreturn ĠMono . empty () ĊĊĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠADD _ SERVER _ REGEX . match Ent ire ( content . trim ()) Ġ?: Ġreturn Ġevent . message . channel . flatMap Ġ{ Ġit . create Message ( invalid Server Input Message ( content )). then () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhost Ġ= Ġmatcher . group Values [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġmatcher . group Values [ 2 ]. toInt () ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġmatcher . group Values [ 3 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠServer Change Request ("", Ġhost , Ġport , Ġpassword , ĠServer Settings Change Request ( map Tracking Enabled Ġ= Ġtrue , Ġslot Tracking Enabled Ġ= Ġfalse , Ġlog Tracking Enabled Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= Ġserver Service . create ( request ) Ġ?: Ġreturn Ġevent . message . channel . flatMap Ġ{ Ġit . create Message ( failed To Create Server Instance ( content )). then () Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata . server Id Ġ= Ġinstance . id ĊĠĠĠĠĠĠĠ Ġdata . enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġrepository . update ( data ) ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠServer Install State . DONE ĊĠĠĠĠĠĠĠ Ġreturn Ġevent . message . delete (). then ( event . message . channel . flatMap Ġ{ Ġit . create Message ( installation Finished Successfully ()). then () Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠ Ġprivate Ġfun Ġcreate Discord Channels ( event : ĠMessage Create Event , Ġguild : ĠGuild ): ĠMono < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! verify Server Owner ( event , Ġguild )) Ġreturn ĠMono . empty () ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠServer Install State . SETUP _ DIS C ORD ĊĊĠĠĠĠĠĠĠ Ġval Ġguild Id Ġ= Ġguild . id . as Long () ĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= Ġrepository . findBy Guild Id ( guild Id ) Ġ?: Ġrepository . save ( Map Vote Server Settings Data ( guild Id Ġ= Ġguild Id )) ĊĊĠĠĠĠĠĠĠ Ġval Ġadmin Channel Ġ= Ġif Ġ( data . admin Channel Id Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġcheck Ġif Ġchannel Ġalready Ġexisting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġguild . createText Channel (" map - vote - admin "). block () Ġ?: Ġreturn ĠMono . empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . create Message ( admin Channel Created Message ()). block () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . admin Channel Id Ġ= Ġchannel . id . as Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġrepository . update ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġguild . getChannel ById ( Snow flake . of ( data . admin Channel Id )). of Type ( Text Channel :: class . java ). block () Ġ?: Ġreturn ĠMono . empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġvote Channel Ġ= Ġif Ġ( data . user Channel Id Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġcheck Ġif Ġchannel Ġalready Ġexisting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġguild . createText Channel (" map - vote "). block () Ġ?: Ġreturn ĠMono . empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . create Message ( vote Channel Created Message ()). block () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . user Channel Id Ġ= Ġchannel . id . as Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġrepository . update ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġguild . getChannel ById ( Snow flake . of ( data . user Channel Id )). of Type ( Text Channel :: class . java ). block () Ġ?: Ġreturn ĠMono . empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠServer Install State . ADD _ SERVER ĊĠĠĠĠĠĠĠ Ġreturn Ġadmin Channel . create Message ( enter Server Settings Message ()). then () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġverify Server Owner ( event : ĠMessage Create Event , Ġguild : ĠGuild ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġevent . message . author . orElse Get Ġ{ Ġnull Ġ} Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġguild . owner Id Ġ== Ġauthor . id ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġadmin Channel Created Message (): ĠMessage Create Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMessage Create Spec . builder (). content (" Admin Ġchannel Ġcreated Ġsuccessfully . "). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvote Channel Created Message (): ĠMessage Create Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMessage Create Spec . builder (). content (" Vote Ġchannel Ġcreated Ġsuccessfully . "). build () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġenter Server Settings Message (): ĠMessage Create Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspec Ġ= ĠMessage Create Spec . builder () ĊĠĠĠĠĠĠĠ Ġspec . add Embed ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEmbed Create Spec . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color ( Color . GREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title (" Setup Ġprocess ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. description (" This Ġwill Ġhelp Ġyou Ġsetup Ġthe Ġmap Ġvote Ġprocess . ĠReply Ġwith Ġthe Ġserver Ġsettings Ġ( IP ĠPort ĠR CON - PW )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. timestamp ( Instant . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġspec . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinvalid Server Input Message ( content : ĠString ): ĠMessage Create Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMessage Create Spec . builder (). content (" Invalid Ġinput Ġ'$ content ' Ġfor Ġsetup Ġserver "). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfailed To Create Server Instance ( content : ĠString ): ĠMessage Create Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMessage Create Spec . builder (). content (" Cannot Ġcreate Ġserver Ġinstance Ġfor Ġ'$ content ' "). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinstallation Finished Successfully (): ĠMessage Create Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMessage Create Spec . builder (). content (" Installation Ġfinished Ġsuccessfully Ġ: thumb sup : "). build () ĊĠĠĠ Ġ} Ċ } Ċ