package Ġme . alex Ċ Ċ import Ġkotlinx . coroutines .* Ċ import Ġnet . dv 8 tion . j da . api . Embed Builder Ċ import Ġnet . dv 8 tion . j da . api . J DA Ċ import Ġnet . dv 8 tion . j da . api . events . message . Message Received Event Ċ import Ġnet . dv 8 tion . j da . api . hooks . Subscribe Event ĊĊ Ċ import Ġnet . dv 8 tion . j da . api . J DA Builder Ċ import Ġnet . dv 8 tion . j da . api . entities .* Ċ import Ġnet . dv 8 tion . j da . api . events . message . react . Message Reaction Add Event Ċ import Ġnet . dv 8 tion . j da . api . hooks . Annotated Event Manager Ċ import Ġorg . apache . pdf box . io . Memory Usage Setting Ċ import Ġorg . apache . pdf box . pd model . P DD ocument Ċ import Ġorg . apache . pdf box . rendering . PDF Renderer Ċ import Ġjava . awt . Color Ċ import Ġjava . io .* Ċ import Ġjava . net . URL Ċ import Ġjava . util . concurrent . ExecutorService Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . image io . Image IO Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . concurrent . thread Ċ Ċ val Ġp dfs Ġ= ĠHashSet < Loaded PDF >() Ċ val Ġservice : ĠExecutor Service Ġ= ĠExec utors . new Cached ThreadPool () Ċ const Ġval Ġtimeout : ĠLong Ġ= Ġ 1 0 0 0 Ġ* Ġ 3 0 0 Ċ const Ġval Ġright Arrow Ġ= Ġ" U + 2 7 A 1 " Ċ const Ġval Ġleft Arrow Ġ= Ġ" U + 2 B 0 5 " Ċ const Ġval Ġc dn UserId Ġ= Ġ" 8 3 8 9 4 7 8 3 4 8 7 0 3 6 6 2 3 8 " Ċ const Ġval Ġimg ur ClientId Ġ= Ġ" 3 fce e 0 1 e 1 9 cb fc 4 " Ċ var Ġj da : ĠJ DA ? Ġ= Ġnull Ċ var Ġc dn Ch n : ĠPrivate Channel ? Ġ= Ġnull Ċ Ċ fun Ġmain () Ġ{ ĊĊĊĠĠĠ ĠSystem . setProperty (" sun . java 2 d . c mm ", Ġ" sun . java 2 d . c mm . k cms . K cms ServiceProvider ") ĊĠĠĠ Ġj da Ġ= ĠJ DA Builder . create Default ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Event Manager ( Annotated Event Manager ()). add Event Listeners ( object Ġ: ĠAny () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Subscribe Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġon Message Received ( e : ĠMessage Received Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= ĠPattern . compile ("( https ? :// (?: www \\ .| (? ! www ))[ a - zA - Z 0 - 9 ][ a - zA - Z 0 - 9 - ]+ [ a - zA - Z 0 - 9 ] \\. [^ \\ s ]{ 2 , }| https ? :// (?: www \\ .| (? ! www ))[ a - zA - Z 0 - 9 ]+ \\. [^ \\ s ]{ 2 , }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġpattern . matcher ( e . message . content Display ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= ĠMutable List ( 0 ) Ġ{ Ġit . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatches . add ( matcher . group ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatches . replaceAll Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . matches ( Regex (" https ? :// ( www \\. )? arxiv . org / abs /[ a - zA - Z 0 - 9 . ]+ "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace (" abs ", Ġ" pdf "). replace First (" http :// ", Ġ" https :// ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatches . map Ġ{ ĠURL ( it ) Ġ}. forEach Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġurl . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . open Stream ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Embed ( this , Ġname , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message . attachments . forEach Ġ{ Ġattachment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attachment . file Extension Ġ== Ġ" pdf ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġattachment . fileName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachment . retrieve InputStream (). get ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Embed ( this , Ġname , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Subscribe Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġon React ( e : ĠMessage Reaction Add Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpdf Ġ= Ġp dfs . find Ġ{ Ġit . message . id Ġ== Ġe . message Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= System . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġpdf . rate Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Rate limited Ġreaction ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . reaction Em ote . as Code points . toUpperCase () Ġ== Ġright Arrow Ġ|| Ġe . reaction Em ote . as Code points . toUpperCase () Ġ== Ġleft Arrow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . retrieve User (). queue Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . is Bot ) Ġreturn @ queue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf . update RateLimit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! e . reaction Em ote . is Emoji ) Ġreturn @ queue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . reaction Em ote . as Code points . toUpperCase () Ġ== Ġright Arrow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Ġ+ Ġ 1 Ġ< Ġpdf . cached Embed s . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Embed On Reaction ( page Ġ+ Ġ 1 , Ġpdf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( e . reaction Em ote . as Code points . toUpperCase () Ġ== Ġleft Arrow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Ġ- Ġ 1 Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Embed On Reaction ( page Ġ- Ġ 1 , Ġpdf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). build (). await Ready () ĊĠĠĠ Ġc dn Ch n Ġ= Ġj da !!. open Private Channel ById ( cdn UserId ). complete () ĊĠĠĠ Ġj da !!. presence . activity Ġ= ĠActivity . watch ing (" over Ġ${ j da !!. guild s . size } Ġ${ if Ġ( j da !!. guild s . size Ġ== Ġ 1 ) Ġ" server " Ġelse Ġ" servers "} !") ĊĠĠĠ Ġ/* ( j da . get Guild Channel ById (" 8 1 4 0 8 5 7 0 6 2 4 1 6 7 1 1 7 9 ") as ĠText Channel ?) ?. retrieve Message ById (" 8 3 8 8 8 9 5 9 6 6 2 4 1 7 5 1 7 4 ") ?. queue Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( it . content Raw ) ĊĠĠĠ Ġ}*/ Ċ } Ċ Ċ fun Ġsend Embed ( it : ĠInputStream , Ġname : ĠString , Ġe : ĠMessage Received Event ) Ġ{ ĊĠĠĠ Ġval Ġsafe Data Ġ= ĠArrayList < Byte >() ĊĠĠĠ Ġvar Ġdata Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( data Ġ!= Ġ- 1 Ġ&& Ġsafe Data . size Ġ< Ġ 8 3 8 9 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġit . read () ĊĠĠĠĠĠĠĠ Ġsafe Data . add ( data . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠByteArrayOutputStream (). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠP DD ocument . load ( ByteArray InputStream ( safe Data . toByteArray () Ġ+ Ġit . read Bytes ()), ĠMemory Usage Setting . setup TempFile Only ()) ĊĠĠĠĠĠĠĠ ĠImage IO . write ( PDF Renderer ( doc ). render Image With DPI ( 0 , 1 0 0 f ) Ġ," png ", Ġout ) ĊĠĠĠĠĠĠĠ ĠImg ur Request ( imgur ClientId , Ġout . toByteArray ()). queue Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . channel . sendMessage ( Embed Builder (). setTitle (" Loaded Ġ$ name "). setColor ( Color . GREEN ). setImage ( url ). build ()). queue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpdf Ġ= ĠLoaded PDF ( doc , Ġe . author . name , ĠSystem . currentTimeMillis (), Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp dfs . add ( pdf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf . expiry Ġ= ĠSystem . currentTimeMillis () Ġ+ Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclean ( System . currentTimeMillis () Ġ+ Ġtimeout , Ġpdf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pdf . cached Embed s . size Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Reaction ( right Arrow ). queue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache ( pdf , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/* e . channel . send File ( out . toByteArray (), Ġ" pdf . png "). embed ( Embed Builder (). setTitle (" Loaded Ġ$ name "). setColor ( Color . GREEN ). setImage (" attachment :// pdf . png "). build ()). queue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpdf Ġ= ĠLoaded PDF ( doc , Ġe . author . name , ĠSystem . currentTimeMillis (), Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pdf . cached Embed s . size Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Reaction ( right Arrow ). queue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp dfs . add ( pdf ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpdf . expiry Ġ= ĠSystem . currentTimeMillis () Ġ+ Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclean ( System . currentTimeMillis () Ġ+ Ġtimeout , Ġpdf ) ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġit . close () ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{} Ċ Ċ } Ċ Ċ fun Ġsend Embed On Reaction ( index : ĠInt , Ġpdf : ĠLoaded PDF ) Ġ{ ĊĠĠĠ ĠByteArrayOutputStream (). use Ġ{ Ġba os Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġis Cached Ġ= Ġpdf . cached Embed s [ index ]. build (). image Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Cached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage IO . write ( PDF Renderer ( pdf . pdf ). render Image With DPI ( index , Ġ 1 0 0 f ), Ġ" png ", Ġba os ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImg ur Request ( imgur ClientId , Ġba os . toByteArray ()). queue Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġembed Ġ= pdf . cached Embed s [ index ]. setImage ( url ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpdf . message . edit Message ( embed ). queue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Reaction ( pdf , Ġit , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache ( pdf , Ġindex ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpdf . message . edit Message ( pdf . cached Embed s [ index ]. build ()). queue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Reaction ( pdf , Ġit , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache ( pdf , index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclean ( System . currentTimeMillis () Ġ+ Ġtimeout , Ġpdf ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAss umes Ġindex Ġhasn 't Ġbeen Ġincrement ed . Ċ Ġ*/ Ċ fun Ġcache ( pdf : ĠLoaded PDF , Ġindex : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( index Ġ+ Ġ 1 Ġ>= Ġpdf . cached Embed s . size Ġ|| Ġpdf . cached Embed s [ index Ġ+ Ġ 1 ]. build (). image Ġ!= Ġnull ) Ġreturn ĊĠĠĠ ĠByteArrayOutputStream (). use Ġ{ ba os Ġ-> ĊĠĠĠĠĠĠĠ ĠImage IO . write ( PDF Renderer ( pdf . pdf ). render Image With DPI ( index Ġ+ Ġ 1 , Ġ 1 0 0 f ), Ġ" png ", Ġba os ) ĊĠĠĠĠĠĠĠ ĠImg ur Request ( imgur ClientId , Ġba os . toByteArray ()). queue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpdf . cached Embed s [ index Ġ+ Ġ 1 ]. setImage ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ fun Ġadd Reaction ( pdf : ĠLoaded PDF , Ġfinal : ĠMessage , Ġindex : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( index Ġ- Ġ 1 Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinal . add Reaction ( left Arrow ). queue () ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( index Ġ+ Ġ 1 Ġ< Ġpdf . cached Embed s . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinal . add Reaction ( right Arrow ). queue () ĊĠĠĠ Ġ} ĊĠĠĠ Ġpdf . expiry Ġ= ĠSystem . currentTimeMillis () Ġ+ Ġtimeout ĊĠĠĠ Ġpdf . page Ġ= Ġindex ĊĠĠĠ Ġclean ( System . currentTimeMillis () Ġ+ Ġtimeout , Ġpdf ) Ċ } Ċ fun Ġclean ( target Time : ĠLong , Ġpdf : ĠLoaded PDF ) Ġ{ ĊĠĠĠ Ġservice . submit Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . gc () ĊĠĠĠĠĠĠĠ ĠThread . sleep ( target Time Ġ- ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( pdf . expiry Ġ Ġ<= ĠSystem . currentTimeMillis ()) Ġ{ Ġ// Ġpdf Ġexpired Ġso Ġdelete Ġotherwise Ġjust Ġleave Ġit Ġalone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpdf . pdf . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp dfs . remove ( pdf ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊĊĊ