package Ġcom . co alesce . bot . currencies . commands Ċ Ċ import Ġcom . co alesce . bot . Co Coins Transaction Ċ import Ġcom . co alesce . bot . command .* Ċ import Ġcom . co alesce . bot . utilities .* Ċ import Ġjava . awt . Color Ċ import Ġjava . util . concurrent . Thread Local Random Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ Command (" Slots ", Ġ" bid Ġbet Ġc ass ino Ġslot ") Ċ @ User Cooldown ( 6 L , ĠTimeUnit . MIN UTES ) Ċ class ĠS lots : ĠEmbed d ables Ġ{ ĊĠĠĠ Ġprivate Ġval Ġem otes Ġ= Ġmutable ListOf < String >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd All (" ðŁĴ § ĠðŁ į Ħ ĠðŁ į Ģ ĠðŁ į İ ĠðŁ į ª ĠðŁļ Ģ ĠðŁ Į ķ Ġâ ĺ Ģ ĠðŁİ ± ĠðŁ į ī ĠðŁ ı Ĩ ". split (" Ġ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Command Alias (" Bid Ġsome ĠÂ ¢ $ ' s Ġin Ġa Ġfun Ġslots Ġgame ! ĠTrust Ġme Ġits Ġnot Ġrig ged ") ĊĠĠĠ Ġfun Ġslots ( context : ĠCommand Context , Ġamount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( amount Ġ! in Ġ 1 .. 1 5 ) Ġthrow ĠArgs Exception (" You Ġmay Ġonly Ġbid Ġbetween Ġ 1 Ġand Ġ 1 5 ĠÂ ¢ $ ' s !") ĊĠĠĠĠĠĠĠ Ġval Ġcoins Ġ= Ġcontext . main . co Coins Manager ĊĠĠĠĠĠĠĠ Ġ// if Ġ( amount Ġ> Ġcoins [ context . author ]. total ) Ġthrow ĠArgs Exception (" You Ġcannot Ġaff ord Ġto Ġbid Ġ$ amount .") ĊĠĠĠĠĠĠĠ Ġcoins [ context . author ]. transaction ( Co Coins Transaction (" Used Ġon Ġslots ", Ġ- amount . toDouble ()), Ġcontext . channel , Ġcontext . author ) ĊĊĠĠĠĠĠĠĠ Ġval Ġem ote Size Ġ= Ġem otes . size ĊĠĠĠĠĠĠĠ Ġval Ġrng Ġ= ĠThread Local Random . current () ĊĠĠĠĠĠĠĠ Ġval Ġvalid Em otes Ġ= Ġem otes . order Ġ{ Ġ_, Ġ_ Ġ-> Ġrng . nextInt () Ġ}. sub List ( 0 , ĠMath . min ( em ote Size Ġ/ Ġ 3 Ġ+ Ġ( amount ) Ġ* Ġ( em ote Size Ġ- Ġem ote Size Ġ/ Ġ 3 ), Ġem ote Size )) ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġvalid Em otes . size ĊĊĠĠĠĠĠĠĠ Ġval Ġanim Frames Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġmutable ListOf < Mutable List < String >>() ĊĠĠĠĠĠĠĠ Ġvar Ġanimation Frames Left Ġ= Ġanim Frames ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Column Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġgenerate Message () Ġ= Ġembed (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemb Title Ġ= Ġ" Slots " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemb Color Ġ= ĠColor ( 2 2 9 , Ġ 1 9 3 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" || ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġif Ġ( current Column Ġ> Ġi ) Ġappend (" ðŁĶ Ĵ Ġ") Ġelse Ġappend (" âĸ « Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" || \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows . forEach Indexed Ġ{ Ġy , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("${ if Ġ( y Ġ== Ġ 1 ) Ġ" >" Ġelse Ġ" || "} Ġ${ it . join ToString ( separator Ġ= Ġ" Ġ" )} Ġ${ if Ġ( y Ġ== Ġ 1 ) Ġ"< " Ġelse Ġ" || "}\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġem ote Ġ= Ġvalid Em otes [ rng . nextInt ( size )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur List . add ( em ote ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrows . add ( cur List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext ( generate Message ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġedit ( long er : ĠBoolean , Ġhandler : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Message ( generate Message ()). queue After ( if Ġ( long er ) Ġ 8 0 0 L Ġelse Ġ 4 0 0 L , ĠTimeUnit . MILLISECONDS ) Ġ{ Ġhandler () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġanimate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Frames Left Ġ-- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlonger Ġ= Ġif Ġ( animation Frames Left Ġ<= Ġ 0 ) Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Frames Left Ġ= Ġanim Frames ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Column Ġ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Column Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows . forEach Indexed Ġ{ Ġrow , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Indexed Ġ{ Ġcolumn , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Column Ġ> Ġcolumn ) Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Ġ< Ġ 2 ) Ġit [ column ] Ġ= Ġrows [ row Ġ+ Ġ 1 ][ column ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit [ column ] Ġ= Ġvalid Em otes [ rng . nextInt ( size )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit ( long er , Ġ:: animate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFinish , Ġchange Ġrespect s , Ġetc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmiddle Row Ġ= Ġmutable Map Of < String , ĠInt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows . forEach Indexed Ġ{ Ġy , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Ġ== Ġ 1 ) Ġit . forEach Ġ{ Ġmiddle Row [ it ] Ġ= Ġ( middle Row [ it ] Ġ?: Ġ 0 ) Ġ+ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Message ( generate Message ()). queue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( received , Ġmessage ) Ġ= Ġfind Matches ( middle Row , Ġamount . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoins [ context . author ]. transaction ( Co Coins Transaction ( message , Ġamount . toDouble () Ġ+ Ġreceived ), Ġcontext . channel , Ġcontext . author ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit ( false , Ġ:: animate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Matches ( middle Row : ĠMap < String , ĠInt >, Ġbid : ĠDouble ): ĠPair < Double , ĠString > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( middle Row . any Ġ{ Ġit . value Ġ== Ġ 2 Ġ}) Ġbid Ġ/ Ġ 2 Ġto Ġ"** Match ! ** " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( middle Row . any Ġ{ Ġit . value Ġ== Ġ 3 Ġ&& Ġit . key Ġ== Ġ" ðŁ į Ģ " Ġ}) Ġbid Ġ* Ġ 4 Ġto Ġ" ðŁ į Ģ ðŁ į Ģ Ġ** J ACK P OT ! ** ĠðŁ į Ģ ðŁ į Ģ " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( middle Row . all Ġ{ Ġit . value Ġ== Ġ 3 Ġ}) Ġbid Ġ* Ġ 1 . 2 5 Ġto Ġ"** L uck y ! ** " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ- bid Ġto Ġ" Nothing !" Ċ }