package Ġorg . cascade bot . cascade bot . scheduler Ċ Ċ import Ġnet . dv 8 tion . j da . api . Message Builder Ċ import Ġnet . dv 8 tion . j da . api . entities . IM ention able Ċ import Ġnet . dv 8 tion . j da . api . exceptions . Permission Exception Ċ import Ġorg . cascade bot . cascade bot . data . language . Language Ċ import Ġorg . cascade bot . cascade bot . data . language . Language . i 1 8 n Ċ import Ġorg . cascade bot . cascade bot . messaging . MessageType Ċ import Ġorg . cascade bot . cascade bot . messaging . Messaging Ċ import Ġorg . cascade bot . cascade bot . messaging . embed Ċ import Ġorg . cascade bot . cascade bot . utils . Format Utils Ċ import Ġorg . cascade bot . cascade bot . utils . get Mut ed Role Ċ import Ġorg . cascade bot . cascade bot . utils . to Capital ized Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Zone Offset Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . is Subclass Of Ċ Ċ enum Ġclass ĠAction Type ( val Ġexpected Class : ĠK Class <* >, Ġval Ġdata Consumer : Ġ( Scheduled Action ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠRE M IND ER ( Scheduled Action . Reminder Action Data :: class , Ġ:: reminder Action ), ĊĠĠĠ ĠUN M UTE ( Scheduled Action . Mod eration Action Data :: class , Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( action . data Ġis ĠScheduled Action . Mod eration Action Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . guild ?. let Ġ{ Ġguild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember Ġ= Ġguild . get Member ById ( action . data . target Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild . remove Role From Member ( member , Ġguild . get Mut ed Role ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserName Ġ= Ġguild . get Member ById ( action . data . target Id )?. user ?. as Tag Ġ?: ĠLanguage . get Guild Locale ( guild . id Long ). i 1 8 n (" words . unknown "). to Capital ized () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason ( Language . get Guild Locale ( guild . id Long ). i 1 8 n (" mod _ actions . temp _ mute . un mute _ reason ", ĠuserName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue ( null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . channel ?. let Ġchannel Let @{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis Ġnet . dv 8 tion . j da . api . exceptions . Permission Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠLog Ġsomething Ġto Ġmod log ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ channel Let ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessaging . send Exception Message ( channel , Ġ" Failed Ġto Ġun mute Ġuser !", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}), ĊĠĠĠ ĠUN BAN ( Scheduled Action . Mod eration Action Data :: class , Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( action . data Ġis ĠScheduled Action . Mod eration Action Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . guild ?. let Ġ{ Ġguild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild . un ban ( action . data . target Id . toString ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserName Ġ= Ġorg . cascade bot . cascade bot . Cascade Bot . INS . shard Manager . getUser ById ( action . data . target Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠLanguage . get Guild Locale ( guild . id Long ). i 1 8 n (" words . unknown "). to Capital ized () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason ( Language . get Guild Locale ( guild . id Long ). i 1 8 n (" mod _ actions . temp _ mute . un mute _ reason ", ĠuserName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue ( null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . channel ?. let Ġchannel Let @{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis Ġnet . dv 8 tion . j da . api . exceptions . Permission Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠLog Ġsomething Ġto Ġmod log ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ channel Let ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessaging . send Exception Message ( channel , Ġ" Failed Ġto Ġun ban Ġuser !", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}), ĊĠĠĠ ĠUNS LOW MODE ( Scheduled Action . Slow mode Action Data :: class , Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( action . data Ġis ĠScheduled Action . Slow mode Action Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . guild ?. let Ġ{ Ġguild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Channel Ġ= Ġguild . get Guild Channel ById ( action . data . target Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Channel ?. manager ?. set Slow mode ( action . data . old Slow mode )?. queue ( null , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠPermission Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . channel ?. let Ġ{ Ġchannel Ġ-> ĠMessaging . sendMessage ( MessageType . D ANG ER , Ġchannel , Ġi 1 8 n ( action . guild Id , Ġ" responses . no _ discord _ perm _ bot ", Ġit . permission . name )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . channel ?. let Ġ{ Ġchannel Ġ-> ĠMessaging . send Exception Message ( channel , Ġ" Couldn 't Ġun slow mode Ġ% s ". format ( target Channel ), Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}); ĊĊĠĠĠ Ġfun Ġverify DataType ( data : ĠScheduled Action . Action Data ) Ġ= Ġdata :: class . is Subclass Of ( expected Class ) Ċ } Ċ Ċ private Ġfun Ġreminder Action ( action : ĠScheduled Action ) Ġ{ ĊĠĠĠ Ġif Ġ( action . data Ġis ĠScheduled Action . Reminder Action Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwarning Text Ġ= Ġif Ġ( Duration . between ( action . execution Time , ĠInstant . now ()). seconds Ġ>= Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Ġ= ĠLanguage . get Guild Locale ( action . guild Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage . i 1 8 n ( locale , Ġ" scheduled _ actions . reminder _ over due ", ĠFormat Utils . format DateTime ( action . execution Time . at Offset ( Zone Offset . UTC ), Ġlocale )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( action . data . is DM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . user ?. open Private Channel ()?. queue Ġ{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . sendMessage ( Message Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Embed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed ( MessageType . INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ( warning Text ?. let Ġ{ Ġ"$ it \ n \ n " Ġ} Ġ?: Ġ"") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage . i 1 8 n ( action . guild Id , Ġ" scheduled _ actions . reminder _ text ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n ``` \ n ${ action . data . reminder }\ n ``` " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). queue ( null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . channel ?. sendMessage ( Message Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( action . user Ġas ĠIM ention able ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Embed ( embed ( MessageType . INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= ĠLanguage . i 1 8 n ( action . guild Id , Ġ" scheduled _ actions . reminder _ dm _ error ") Ġ+ Ġ"\ n \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( warning Text ?. let Ġ{ Ġ"$ it \ n \ n " Ġ} Ġ?: Ġ"") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage . i 1 8 n ( action . guild Id , Ġ" scheduled _ actions . reminder _ text ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n ``` \ n ${ action . data . reminder }\ n ``` " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ?. queue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction . channel ?. sendMessage ( Message Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( action . user Ġas ĠIM ention able ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Embed ( embed ( MessageType . INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ( warning Text ?. let Ġ{ Ġ"$ it \ n \ n " Ġ} Ġ?: Ġ"") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage . i 1 8 n ( action . guild Id , Ġ" scheduled _ actions . reminder _ text ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n ``` \ n ${ action . data . reminder }\ n ``` " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. queue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }