/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠD unc an ĠC aste le yn Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġbe . d unc anc . discord mod bot . bot . commands Ċ Ċ import Ġnet . dv 8 tion . j da . api . events . message . Message Received Event Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . config . Configurable BeanFactory Ċ import Ġorg . springframework . context . ApplicationContext Ċ import Ġorg . springframework . context . Configurable ApplicationContext Ċ import Ġorg . springframework . context . annotation . Scope Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠQu it Ġcommand Ġfor Ġthe Ġbot Ċ Ġ*/ Ċ @ Component Ċ @ Scope ( Configurable BeanFactory . SCOPE _ PRO TOT YPE ) Ċ class ĠQu it Bot Ċ @ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġapplication Context : ĠApplication Context Ċ ) Ġ: ĠCommand Module ( ĊĠĠĠ ĠA LI ASE S , ĊĠĠĠ Ġnull , ĊĠĠĠ ĠDESCRIPTION , ĊĠĠĠ Ġtrue , ĊĠĠĠ Ġtrue Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠA LI ASE S Ġ= ĠarrayOf (" Quit ", Ġ" Shutdown ", Ġ" Disconnect ") ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDESCRIPTION Ġ= Ġ" Sh uts Ġdown Ġthe Ġbot ." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcall Before Bot Quit : ĠMutable List < Before Bot Quit > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcall Before Bot Quit Ġ= ĠArrayList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcommand Exec ( event : ĠMessage Received Event , Ġcommand : ĠString , Ġarguments : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . author . id Long Ġ== Ġ 1 5 9 4 1 9 6 5 4 1 4 8 7 1 8 5 9 3 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Before Bot Quit . forEach Ġ{ Ġbefore Bot Quit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Bot Quit . on About To Quit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Module . LOG . error (" Failed Ġexecuting Ġa Ġtask Ġbefore Ġquit Ġdue Ġto Ġan Ġexception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . channel . sendMessage ( event . author . as Mention Ġ+ Ġ" Ġ** Shut ting Ġdown ... Ġ: wave : Ġ** "). queue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* try Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS . sleep ( 5 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( InterruptedException Ġe ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . currentThread (). interrupt (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . j da . shutdown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( application Context Ġas ĠConfigur able ApplicationContext ). close () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . channel . sendMessage ( event . author . as Mention Ġ+ Ġ" Ġyou Ġdon 't Ġhave Ġpermission Ġto Ġshutdown Ġthe Ġbot !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. queue () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Call Before Quit ( before Bot Quit : ĠBefore Bot Quit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcall Before Bot Quit . add ( before Bot Quit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġinterface Ġcan Ġbe Ġused Ġto Ġperform Ġactions Ġbefore Ġquit ing ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠBefore Bot Quit Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠActions Ġto Ġperform Ġbefore Ġthe Ġquit Ġcommand Ġis Ġfinished Ġwith Ġexecuting . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon About To Quit () ĊĠĠĠ Ġ} Ċ } Ċ