package Ġme . b ri ster mit ten . dev den bot . past ing Ċ Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . await All Ċ import Ġme . b ri ster mit ten . dev den bot . discord . BOT _ COMMAND S _ CHANNEL _ ID Ċ import Ġme . b ri ster mit ten . dev den bot . extensions . await Ċ import Ġme . b ri ster mit ten . dev den bot . extensions . commands . Kotlin Embed Builder Ċ import Ġme . b ri ster mit ten . dev den bot . listener . EventListener Ċ import Ġme . b ri ster mit ten . dev den bot . serialization . D DB Config Ċ import Ġme . b ri ster mit ten . dev den bot . util .* Ċ import Ġnet . dv 8 tion . j da . api . J DA Ċ import Ġnet . dv 8 tion . j da . api . entities . Member Ċ import Ġnet . dv 8 tion . j da . api . entities . Message Ċ import Ġnet . dv 8 tion . j da . api . entities . Message Embed Ċ import Ġnet . dv 8 tion . j da . api . events . message . guild . Guild Message Received Event Ċ import Ġjava . awt . Color Ċ import Ġjava . time . Instant Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠCode Block Message Listener Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġd db Config : ĠD DB Config , Ċ ) Ġ: ĠEvent Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġby Ġlog () ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN _ ROWS _ FOR _ CONVERSION Ġ= Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġcode Block Ġ= ĠRegex (" ``` (?: (? < lang >[ a - zA - Z ]+ )? \\ n )? (( ?: .| \\ n )* ?) ``` ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġon Guild Message Received ( event : ĠGuild Message Received Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . author . is Bot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( event . channel . id Long Ġ== ĠBOT _ COMMAND S _ CHANNEL _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġraw Text Ġ= Ġevent . message . content Raw ĊĠĠĠĠĠĠĠ Ġif Ġ( raw Text . startsWith ("${ ddb Config . prefix } keep ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( raw Text . startsWith ("/ run ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! raw Text . contains ( code Block )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmember Ġ= Ġevent . member Ġ?: Ġevent . guild . retrieve Member ById ( event . author . id ). await () ĊĠĠĠĠĠĠĠ Ġif Ġ( isAdmin ( member ) Ġ&& Ġ! raw Text . startsWith ("${ ddb Config . prefix } convert ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġ" Admin Ġmessages Ġthat Ġcontain Ġcode Ġblocks Ġare Ġnot Ġconverted Ġby Ġdefault . ĠUse Ġthe Ġ${ ddb Config . prefix } convert Ġprefix Ġto Ġautomatically Ġconvert Ġmessages ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġembed Ġ= Ġcreate Embed ( event . message , Ġmember ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġevent . channel . sendMessage ( embed ). queue () ĊĠĠĠĠĠĠĠ Ġevent . message . delete (). queue () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġcreate Embed ( message : ĠMessage , Ġmember : ĠMember ): ĠMessage Embed ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġurls Ġ= Ġcode Block . findAll ( message . content Raw ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . groups . last ()?. value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit ?. lines ()?. size Ġ?: Ġ 0 Ġ>= ĠMIN _ ROWS _ FOR _ CONVERSION Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġscope . async Ġ{ ĠH aste Client . post Code ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. await All () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( urls . isEmpty ()) Ġ{ Ġ// Ġthis Ġis Ġa Ġbit Ġhack y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdc Ġ= Ġcode Block . replace ( message . content Raw ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . groups . last ()?. value ?. lines ()?. size Ġ?: Ġ 0 Ġ>= ĠMIN _ ROWS _ FOR _ CONVERSION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurls [ index ]. also Ġ{ Ġindex ++ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix ("${ ddb Config . prefix } convert ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġembed Builder Ġ= ĠKotlin Embed Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġmember . effective Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Image Ġ= Ġmember . user . effective Avatar Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( ddb Config . colour ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġdc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Timestamp ( Instant . now ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Footer (" This Ġmessage Ġwas Ġconverted Ġautomatically Ġto Ġkeep Ġthe Ġchannels Ġclean Ġfrom Ġlarge Ġcode Ġblocks .") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġembed Builder . build () ĊĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġregister ( j da : ĠJ DA ) Ġ{ ĊĠĠĠĠĠĠĠ Ġj da . listen Flow < Guild Message Received Event >(). handle Each In ( scope , Ġthis :: on Guild Message Received ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ