package Ġme . me li jn . ll k lient . io . j da Ċ Ċ import Ġme . me li jn . ll k lient . io . L aval ink Ċ import Ġme . me li jn . ll k lient . utils . L aval ink Util Ċ import Ġnet . dv 8 tion . j da . api . J DA Ċ import Ġnet . dv 8 tion . j da . api . events . Generic Event Ċ import Ġnet . dv 8 tion . j da . api . events . Re connected Event Ċ import Ġnet . dv 8 tion . j da . api . events . channel . voice . Voice Channel Delete Event Ċ import Ġnet . dv 8 tion . j da . api . events . guild . Guild Leave Event Ċ import Ġnet . dv 8 tion . j da . api . hooks . EventListener Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ class ĠJ DAL aval ink ( ĊĠĠĠ ĠuserId : ĠLong , ĊĠĠĠ Ġshard Count : ĠInt , ĊĠĠĠ Ġval Ġj da Provider : Ġ( Int ) Ġ-> ĠJ DA ? Ċ ) Ġ: ĠL aval ink < J DAL ink >( userId , Ġshard Count ), ĠEvent Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog : ĠLogger Ġ= ĊĠĠĠĠĠĠĠ ĠLoggerFactory . getLogger ( J DAL aval ink :: class . java ) ĊĠĠĠ Ġvar Ġauto Re connect Ġ= Ġtrue ĊĠĠĠ Ġval Ġvoice Interceptor : ĠJ D AV oice Interceptor Ġ= ĠJ D AV oice Interceptor ( this ) ĊĊĊĠĠĠ Ġfun Ġget J da ( shard Id : ĠInt ): ĠJ DA Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġj da Provider ( shard Id ) Ġ?: Ġthrow ĠIllegalArgumentException (" please Ġprovide Ġnon Ġnull Ġj da Ġobjects ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget J da From Guild Id ( guild Id : ĠLong ): ĠJ DA Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġj da Provider ( L aval ink Util . get Shard From Snow flake ( guild Id , Ġshard Count )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" please Ġprovide Ġcorrect Ġshard Count Ġand Ġguild Id ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Event ( event : ĠGeneric Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRe connected Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( auto Re connect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink Map . forEach Ġ{ Ġ( guild Id , Ġlink ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Note : ĠWe Ġalso Ġensure Ġthat Ġthe Ġlink Ġbelongs Ġto Ġthe ĠJ DA Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġlink . last Channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( channel Ġ!= Ġnull Ġ&& Ġevent . get J DA (). get Guild ById ( guild Id ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . j da . get Voice Channel ById ( channel )?. let Ġ{ Ġvc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink . connect ( vc , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Ca ught Ġexception Ġwhile Ġtrying Ġto Ġreconnect Ġlink Ġ$ link ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGuild Leave Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink : ĠJ DAL ink Ġ= Ġlink Map [ event . guild . id Long ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink . remove Connection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠVoice Channel Delete Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink : ĠJ DAL ink Ġ= Ġlink Map [ event . guild . id Long ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . channel . id Long Ġ!= Ġlink . last Channel ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink . remove Connection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild New Link ( guild Id : ĠLong , ĠgroupId : ĠString ): ĠJ DAL ink Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJ DAL ink ( this , Ġguild Id , ĠgroupId ) ĊĠĠĠ Ġ} Ċ } Ċ