/* Ċ Ġ* ĠĠ ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 2 1 Ġcomputer f reak er Ċ Ġ* Ċ Ġ* ĠĠ Ġ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 Ġcom . github . cf . discord . uni Ċ Ċ import Ġcom . github . cf . discord . uni . core . Env Vars Ċ import Ġcom . github . cf . discord . uni . database . Database Wrapper Ċ import Ġcom . github . cf . discord . uni . database . schema .* Ċ import Ġcom . github . cf . discord . uni . extensions . async Transaction Ċ import Ġcom . github . cf . discord . uni . listeners .* Ċ import Ġcom . github . cf . discord . uni . state ful . Coroutine Dispatcher Ċ import Ġcom . github . n atan bc . we eb 4 j . TokenType Ċ import Ġcom . github . n atan bc . we eb 4 j . We eb 4 J Ċ import Ġmu . Kotlin Logging Ċ import Ġnet . dv 8 tion . j da . api . sharding . Default Shard Manager Builder Ċ import Ġnet . dv 8 tion . j da . api . sharding . Shard Manager Ċ import Ġnet . dv 8 tion . j da . api .* Ċ import Ġnet . dv 8 tion . j da . api . requests . Gateway Intent Ċ import Ġnet . dv 8 tion . j da . api . utils . Chunk ing Filter Ċ import Ġorg . jetbrains . ex posed . sql . Database Ċ import Ġorg . jetbrains . ex posed . sql . Schema Utils Ċ import Ġorg . jetbrains . ex posed . sql . Sql Expression Builder . eq Ċ import Ġorg . jetbrains . ex posed . sql . select Ċ import Ġorg . jetbrains . ex posed . sql . selectAll Ċ import Ġjava . util . concurrent . ExecutorService Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠUni Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . connect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" jdbc : postgresql ://${ Env Vars . DATABASE _ HOST }:${ Env Vars . DATABASE _ PORT }/${ Env Vars . DATABASE _ SCHEMA }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" org . postgresql . Driver ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnv Vars . DATABASE _ USERNAME !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnv Vars . DATABASE _ PASSWORD !! ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġasync Transaction ( pool ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSchema Utils . create Missing Tables And Columns ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGuild s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMod Logs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoles , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStar board , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ew Counter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠLOGGER Ġ= ĠKotlin Logging . logger ( Uni :: class . java . name ) ĊĠĠĠĠĠĠĠ Ġval Ġpool : ĠExecutor Service Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExec utors . new Cached ThreadPool Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread ( it , Ġ" Uni - Main - Pool - Thread "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Daemon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcoroutine Dispatcher Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Dispatcher ( pool ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġj da : ĠJ DA ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġshard Manager : ĠSh ard Manager ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġw ol ke Api : ĠWe eb 4 J ĊĠĠĠĠĠĠĠ Ġval Ġprefix : ĠList < String > Ġ= ĠEnv Vars . PREFIX !!. split (" :: ") ĊĠĠĠĠĠĠĠ Ġval Ġprefixes Ġ= Ġprefix . toList () ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMIN IMUM _ FOR _ LEVEL _ 1 Ġ= Ġ 9 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (){ ĊĠĠĠĠĠĠĠ Ġj da Ġ= ĠJ DA Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Default ( Database Wrapper . get Core (). get ( 1 , ĠTimeUnit . SECONDS ). discord Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Event Listeners ( EventListener ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Re connect ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Bulk Delete Split ting Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Intent s ( Gateway Intent . GU ILD _ MEMBER S , ĠGateway Intent . GU ILD _ BAN S , ĠGateway Intent . GU ILD _ MESSAGES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Chunk ing Filter ( Chunk ing Filter . ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ ĠUni . j da Ġ= Ġj da ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild ( first Shard : ĠInt , Ġlast Shard : ĠInt , Ġtotal : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġshard Manager Ġ= ĠDefault Shard Manager Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Default ( Database Wrapper . get Core (). get ( 1 , ĠTimeUnit . SECONDS ). discord Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Event Listeners ( EventListener ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAuto Re connect ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Shards Total (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Bulk Delete Split ting Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Intent s ( Gateway Intent . GU ILD _ MEMBER S , ĠGateway Intent . GU ILD _ BAN S , ĠGateway Intent . GU ILD _ MESSAGES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Chunk ing Filter ( Chunk ing Filter . ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info Ġ{ Ġ" Logging Ġin ..." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n _ ĠĠ Ġ_ ĠĠ Ġ_ Ġ Ġ_ ĠĠ Ġ___ \ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"| Ġ| Ġ| Ġ| Ġ| Ġ\\ | Ġ| Ġ|_ Ġ_ |\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"| Ġ|_| Ġ| Ġ| Ġ. ` Ġ| Ġ Ġ| Ġ|\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ\\ ___ / Ġ Ġ|_| \\ _| Ġ| ___ |" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild ( 0 , Ġ( Env Vars . TOTAL _ SH AR DS !!. toInt () Ġ- Ġ 1 ), ĠEnv Vars . TOTAL _ SH AR DS . toInt ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Env Vars . W EE B _ SH _ TOKEN Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info Ġ{ Ġ" W ol ke ĠAPI ĠKey Ġpresent , Ġenabling ĠWe eb 4 J " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw ol ke Api Ġ= ĠWe eb 4 J . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Token ( TokenType . BE AR ER , ĠEnv Vars . W EE B _ SH _ TOKEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error ( e ) Ġ{ Ġ" An Ġerror Ġhas Ġoccurred Ġin Ġstarting Ġthe Ġbot !" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ