package Ġme . me li jn . me lij nb ot . commands . image Ċ Ċ import Ġcom . mad g ag . gif . f ms ware . Gif Decoder Ċ import Ġme . me li jn . me lij nb ot . objects . command . Abstract Command Ċ import Ġme . me li jn . me lij nb ot . objects . command . Command Category Ċ import Ġme . me li jn . me lij nb ot . objects . command . Command Context Ċ import Ġme . me li jn . me lij nb ot . objects . embed . Embed der Ċ import Ġme . me li jn . me lij nb ot . objects . utils . Image Utils Ċ import Ġme . me li jn . me lij nb ot . objects . utils . getInteger From Arg N Ċ import Ġme . me li jn . me lij nb ot . objects . utils . send Embed Ċ import Ġme . me li jn . me lij nb ot . objects . utils . to Hex Ċ import Ġnet . dv 8 tion . j da . api . utils . data . DataArray Ċ import Ġjava . awt . Color Ċ import Ġjava . io . ByteArray InputStream ĊĊ Ċ class ĠG if Info Command Ġ: ĠAbstract Command (" command . gif info ") Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 3 1 ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" gif Info " ĊĠĠĠĠĠĠĠ Ġcommand Category Ġ= ĠCommand Category . IMAGE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġexecute ( context : ĠCommand Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtriple Ġ= ĠImage Utils . getImage Bytes N Message ( context , Ġ" gif ") Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġtriple . first ĊĠĠĠĠĠĠĠ Ġval ĠbyteArray InputStream Ġ= ĠByteArrayInputStream ( image ) ĊĠĠĠĠĠĠĠ Ġval Ġdecoder Ġ= ĠG if Decoder () ĊĠĠĠĠĠĠĠ Ġdecoder . read ( byteArray InputStream ) ĊĊĠĠĠĠĠĠĠ Ġval Ġgif Info Title Ġ= Ġcontext . get Translation ("$ root . eb . gif . title ") ĊĊĠĠĠĠĠĠĠ Ġval Ġe b Ġ= ĠEmbed der ( context ) ĊĠĠĠĠĠĠĠ Ġe b . set Thumbnail ( triple . second ) ĊĊĠĠĠĠĠĠĠ Ġval Ġloops Ġ= Ġif Ġ( decoder . loop Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" âĪ ŀ " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ decoder . loop Count }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġdecoder . frame Count ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġdecoder . frame Size . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġdecoder . frame Size . height ĊĠĠĠĠĠĠĠ Ġval Ġg ct Ġ= Ġdecoder . g ct Ġ?: Ġempty Array < Int >(). to IntArray () ĊĊĊĠĠĠĠĠĠĠ Ġval Ġglobal DataArray Ġ= ĠData Array . empty () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġg ct ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġglobal DataArray . add ( color . to Hex ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġglobal Url Ġ= Ġif Ġ( g ct . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . web Manager . bin Apis . post To H ast eb in (" json ", Ġglobal DataArray . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgif Info Value Ġ= Ġcontext . get Translation ("$ root . eb . gif . value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% frames %", Ġ"$ frames ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% loops %", Ġloops ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% width %", Ġ"$ width ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% height %", Ġ"$ height ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% g ct Url %", Ġglobal Url Ġ?: Ġ"/") ĊĊĊĊĠĠĠĠĠĠĠ Ġe b . addField ( gif Info Title , Ġgif Info Value , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġget Integer From Arg N ( context , Ġif Ġ( triple . third ) Ġ 1 Ġelse Ġ 0 , Ġ 0 , Ġframes Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( frame Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Meta Ġ= Ġdecoder . get Frame Meta ( frame ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl ct Ġ= Ġif Ġ( frame Meta . l ct . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg ct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Meta . l ct ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbg Color Ġ= Ġif Ġ( l ct . size Ġ> Ġframe Meta . bg Index Ġ&& Ġframe Meta . bg Index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor ( l ct [ frame Meta . bg Index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrans Color Ġ= Ġif Ġ( l ct . size Ġ> Ġframe Meta . trans Index Ġ&& Ġframe Meta . trans Index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor ( l ct [ frame Meta . trans Index ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġda Ġ= ĠData Array . empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġl ct ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġda . add ( color . to Hex ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġif Ġ( l ct . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . web Manager . bin Apis . post To H ast eb in (" json ", Ġda . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Info Title Ġ= Ġcontext . get Translation ("$ root . eb . frame . title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Info Value Ġ= Ġcontext . get Translation ("$ root . eb . frame . value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% delay %", Ġframe Meta . delay . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% trans Color %", Ġtrans Color ?. to Hex () Ġ?: Ġ"/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% bgColor %", Ġbg Color ?. to Hex () Ġ?: Ġ"/") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("% l ct Url %", Ġurl Ġ?: Ġ"/") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġe b . addField ( frame Info Title , Ġframe Info Value , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠĠĠĠĠ Ġval Ġpb Ġ= ĠProcess Builder (" ffmpeg . exe Ġ- f Ġimage 2 pipe Ġ- i Ġ- Ġ- fram erate Ġ 2 4 Ġ- ". split (" Ġ")) Ċ // ĠĠĠĠĠĠĠ Ġpb . redirect Input ( Process Builder . Redirect . PIPE ) Ċ // ĠĠĠĠĠĠĠ Ġpb . redirect Output ( Process Builder . Redirect . PIPE ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġpb . start () Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdecoder . frame Count ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġpb Ġ= ĠProcess Builder (" ffmpeg . exe Ġ- f Ġimage 2 Ġ- fram erate Ġ 2 4 Ġ- i Ġ 0 % 0 3 d . png Ġ- vf Ġscale = 2 5 6 x 2 5 6 Ġb oo . mp 4 ". split (" Ġ")) Ċ // Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe 1 Ġ= Ġdecoder . get Frame ( i ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImage IO . write ( frame 1 , Ġ" png ", Ġp . output Stream ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġdelay ( 2 0 0 0 ) Ċ // ĠĠĠĠĠĠĠ Ġp . destroy () Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġp . inputStream . read All Bytes () Ċ // ĠĠĠĠĠĠĠ Ġsend File ( context , Ġoutput , Ġ" mp 4 ") ĊĠĠĠĠĠĠĠ Ġsend Embed ( context , Ġe b . build ()) ĊĠĠĠ Ġ} Ċ }