/* Ċ Ġ* ĠPoly hed ral Bot Ġ- ĠA ĠDiscord Ġbot Ġfor Ġthe ĠPoly hed ral ĠDevelopment Ġdiscord Ġserver Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 - 2 0 2 2 Ġsol on ov am ax Ġ< sol on ov am ax @ 1 2 oc lock point . com > Ċ Ġ* Ċ Ġ* ĠThe Ġfile ĠRun Command . kt Ġis Ġpart Ġof ĠPoly hed ral Bot Ċ Ġ* ĠLast Ġmodified Ġon Ġ 1 2 - 0 1 - 2 0 2 2 Ġ 0 6 : 1 2 Ġp . m . Ċ Ġ* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠPOL Y H ED R AL BOT ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġca . so lost ud ios . poly bot . cli Ċ Ċ import Ġca . so lost ud ios . poly bot . Constants Ċ import Ġca . so lost ud ios . poly bot . Exit Codes Ċ import Ġca . so lost ud ios . poly bot . Poly Bot Ċ import Ġca . so lost ud ios . poly bot . Version Ċ import Ġca . so lost ud ios . poly bot . config . Poly Config Ċ import Ġca . so lost ud ios . poly bot . util . j da . Default J DA Builder Ċ import Ġca . so lost ud ios . poly bot . util . j da . Inline J DA Builder Ċ import Ġca . so lost ud ios . poly bot . util . j da . or Ċ import Ġca . so lost ud ios . poly bot . util . on Jvm Shutdown Ċ import Ġca . so lost ud ios . poly bot . util . remove Jvm Shutdown Thread Ċ import Ġcom . fasterxml . jackson . core . Json Generator Ċ import Ġcom . fasterxml . jackson . core . Json Parser Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . fasterxml . jackson . module . kotlin . register Kotlin Module Ċ import Ġcom . github . aj alt . cli kt . core . Cli kt Command Ċ import Ġcom . github . aj alt . cli kt . parameters . options . default Ċ import Ġcom . github . aj alt . cli kt . parameters . options . flag Ċ import Ġcom . github . aj alt . cli kt . parameters . options . option Ċ import Ġcom . github . aj alt . cli kt . parameters . types . int Ċ import Ġcom . j ason cl aw son . jackson . data format . ho con . Ho con Factory Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Path Ċ import Ġjava . sql . Connection Ċ import Ġnet . dv 8 tion . j da . api . Gateway Encoding Ċ import Ġnet . dv 8 tion . j da . api . Online Status Ċ import Ġnet . dv 8 tion . j da . api . entities . Activity Ċ import Ġnet . dv 8 tion . j da . api . requests . Gateway Intent Ċ import Ġnet . dv 8 tion . j da . api . utils . Chunk ing Filter Ċ import Ġnet . dv 8 tion . j da . api . utils . Member Cache Policy Ċ import Ġnet . dv 8 tion . j da . api . utils . cache . Cache Flag Ċ import Ġorg . jetbrains . ex posed . sql . transactions . Transaction Manager Ċ import Ġorg . slf 4 j . kotlin .* Ċ import Ġkotlin . io . path . Path Ċ import Ġkotlin . system . exit Process Ċ Ċ object ĠRun Command Ġ: ĠCli kt Command () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġby Ġget Logger () ĊĠĠĠĠĊĠĠĠ Ġlateinit Ġvar Ġshutdown Thread : ĠThread ĊĠĠĠĠĊĠĠĠ Ġprivate Ġval Ġcrashes : ĠInt Ġby Ġoption ("-- cr ashes ", Ġhelp Ġ= Ġ" Specifies Ġthe Ġnumber Ġof Ġcrashes Ġthat Ġhave Ġoccurred .", Ġhidden Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. int () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. default ( 0 ) ĊĠĠĠĠĊĠĠĠ Ġprivate Ġval Ġusing Bootstrap : ĠBoolean Ġby Ġoption ("-- bootstrap ", Ġhelp Ġ= Ġ" Determin es Ġwhether Ġthis Ġinstance Ġis Ġbeing Ġrun Ġwith Ġthe Ġbootstrap .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flag ("-- no - bootstrap ", Ġdefault Ġ= Ġfalse ) ĊĠĠĠĠĊĠĠĠ Ġprivate Ġval Ġenable Bootstrap Update : ĠBoolean Ġby Ġoption ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- bootstrap - update ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelp Ġ= Ġ" Configure Ġupdates Ġvia Ġthe Ġbootstrap Ġprocess . ĠIf Ġbootstrap Ġis Ġdisabled , Ġthis Ġis Ġautomatically Ġdisabled .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flag ("-- no - bootstrap - update ", Ġdefault Ġ= Ġtrue , Ġdefault For Help Ġ= Ġ" enabled Ġif Ġbootstrap Ġis Ġenabled .") ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Starting Ġpoly bot Ġversion Ġ${ Version . version } ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Manager . manager . default Isolation Level Ġ= ĠConnection . TRANSACTION _ SERIAL IZ ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrun Config Ġ= ĠPoly bot Run Config ( cr ashes Ġ= Ġcrashes , Ġbootstrap Ġ= Ġusing Bootstrap , Ġusing Bootstrap Ġ&& Ġenable Bootstrap Update ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġread Config ( Constants . configFile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj da Ġ= Ġcreate J DA Builder ( config . poly bot Config . token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoly bot Ġ= ĠPoly Bot ( run Config , Ġconfig , Ġj da ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġshutdown Thread Ġ= Ġon Jvm Shutdown (" Poly Bot - Shutdown ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( poly bot . shutdown ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ on Jvm Shutdown ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoly bot . shutdown ( is Shutdown Hook Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( e ) Ġ{ Ġ" Exception Ġoccurred Ġwhile Ġrunning ĠPoly Bot ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( Exit Codes . EXIT _ CODE _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġcreate J DA Builder ( token : ĠString ): ĠInline J DA Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDefault J DA Builder ( token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Cache Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Flag . ACTIVITY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Flag . VOICE _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Flag . EM OTE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Flag . CLIENT _ STATUS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Flag . MEMBER _ OVER RID ES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Flag . ROLE _ TAGS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Intent s Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . DIRECT _ MESSAGE _ TY PING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ MESSAGE _ TY PING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ VOICE _ STAT ES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ PRES ENCES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Intent s Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ MEMBER S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ BAN S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ E MO J IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ WEB HOOK S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ INV ITES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ MESSAGES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ MESSAGE _ RE ACTION S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . DIRECT _ MESSAGES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . DIRECT _ MESSAGE _ RE ACTION S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġmember Cache Policy Ġ= ĠMember Cache Policy . ON LINE Ġor ĠMember Cache Policy . VOICE Ġor ĠMember Cache Policy . OWNER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchunk ing Filter Ġ= ĠChunk ing Filter . NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgateway Encoding Ġ= ĠGateway Encoding . ET F ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠOnline Status . DO _ NOT _ DIST UR B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ= ĠActivity . watch ing (" Starting Ġup ĠPoly Bot ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Shutdown Hook Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbulk Delete Split ting Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġinject K tx Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġremove Shutdown Thread () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Jvm Shutdown Thread ( shutdown Thread ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġread Config ( fileName : ĠString ): ĠPoly Config Ġ= Ġread Config ( Path ( fileName )) ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġread Config ( path : ĠPath ): ĠPoly Config Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġpath . to File () ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ConfigFile And Exit ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= ĠObjectMapper ( Ho con Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Kotlin Module () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure ( Json Generator . Feature . IGNORE _ UNKNOWN , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. configure ( Json Parser . Feature . IGNORE _ UNDEFINED , Ġtrue ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( file ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġcreate ConfigFile And Exit ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Ġ'${ file . name }' Ġnot Ġpresent . ĠWriting Ġdefault Ġconfig Ġto Ġ'${ file . name }'. ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlease Ġedit Ġthis Ġfile Ġto Ġinclude Ġthe Ġbot Ġtoken Ġ+ Ġall Ġother Ġfields . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠPoly Bot :: class . java . getResource AsStream ( Constants . default Config ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġif Ġ( stream Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . transfer To ( file . output Stream ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error Ġ{ Ġ" Cannot Ġwrite Ġdefault Ġconfig . ĠCould Ġnot Ġfind Ġthe Ġdefault Ġconfig Ġfile Ġat Ġresource Ġlocation : Ġ'${ Constants . default Config }'. " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( Exit Codes . EXIT _ CODE _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" W rote Ġdefault Ġconfig Ġto Ġ'${ file . name }'. ĠPlease Ġmodify Ġthis Ġfile Ġwith Ġyour Ġtoken Ġand Ġother Ġsettings Ġbefore Ġrunning ." Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġexit Process ( Exit Codes . EXIT _ CODE _ NORMAL ) ĊĠĠĠ Ġ} Ċ }