package Ġdev . lun ar coffee . bean ly . ext s . commands Ċ Ċ import Ġdev . lun ar coffee . bean ly . const To Eng Ċ import Ġdev . lun ar coffee . bean ly . consts . COL _ NAMES Ċ import Ġdev . lun ar coffee . bean ly . consts . DB Ċ import Ġdev . lun ar coffee . bean ly . consts . Emoji Ċ import Ġdev . lun ar coffee . bean ly . consts . TIME _ FORMAT TER Ċ import Ġdev . lun ar coffee . bean ly . ext s . commands . utility . ban Action Ċ import Ġdev . lun ar coffee . bean ly . ext s . commands . utility . get Audit Target Name Ċ import Ġdev . lun ar coffee . bean ly . ext s . commands . utility . mute Action Ċ import Ġdev . lun ar coffee . bean ly . ext s . commands . utility . mute Info Ċ import Ġdev . lun ar coffee . bean ly . ext s . commands . utility . timers . Mute Timer Ċ import Ġdev . lun ar coffee . bean ly . trim To Description Ċ import Ġdev . lun ar coffee . framework . api . dsl . command Ċ import Ġdev . lun ar coffee . framework . api . dsl . embed Ċ import Ġdev . lun ar coffee . framework . api . dsl . embed Paginator Ċ import Ġdev . lun ar coffee . framework . api . extensions . await Ċ import Ġdev . lun ar coffee . framework . api . extensions . error Ċ import Ġdev . lun ar coffee . framework . api . extensions . send Ċ import Ġdev . lun ar coffee . framework . api . extensions . success Ċ import Ġdev . lun ar coffee . framework . core . annotations . Command Group Ċ import Ġdev . lun ar coffee . framework . core . transformers . Tr Int Ċ import Ġdev . lun ar coffee . framework . core . transformers . Tr Rest Ċ import Ġdev . lun ar coffee . framework . core . transformers . Tr Time Ċ import Ġdev . lun ar coffee . framework . core . transformers . Tr User Ċ import Ġdev . lun ar coffee . framework . core . transformers . utility . Found Ċ import Ġdev . lun ar coffee . framework . core . transformers . utility . NotFound Ċ import Ġdev . lun ar coffee . framework . core . transformers . utility . Split Time Ċ import Ġdev . lun ar coffee . framework . core . transformers . utility . User SearchResult Ċ import Ġkotlinx . coroutines . future . await Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġnet . dv 8 tion . j da . api . Permission Ċ import Ġnet . dv 8 tion . j da . api . exceptions . Ins ufficient Permission Exception Ċ import Ġnet . dv 8 tion . j da . api . exceptions . Permission Exception Ċ import Ġorg . lit ote . km ongo . eq Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ Ċ @ Command Group (" Mod ") Ċ class ĠMod Commands Ġ{ ĊĠĠĠ Ġfun Ġmute () Ġ= Ġcommand (" mute ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmute Col Ġ= ĠDB . get Collection < Mute Timer >( COL _ NAMES [ Mute Timer :: class . simple Name ] !! ) ĊĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" M utes Ġa Ġmember Ġfor Ġa Ġspecified Ġamount Ġof Ġtime ." ĊĠĠĠĠĠĠĠ Ġaliases Ġ= ĠlistOf (" sil ence ", Ġ" soft ban ") ĊĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġuser Ġtime Ġ[ reason ]` \ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| M utes Ġa Ġuser Ġfor Ġa Ġspecified Ġamount Ġof Ġtime . ĠI Ġmust Ġhave Ġthe Ġpermission Ġto Ġmanage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| roles . ĠWhen Ġa Ġmember Ġis Ġmut ed , Ġthey Ġwill Ġbe Ġsent Ġa Ġmessage Ġwith Ġ` time ` Ġin Ġa Ġreadable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| format , Ġthe Ġprovided Ġ` reason ` Ġ( or Ġ`( no Ġreason ) `) Ġif Ġnone Ġis Ġprovided , Ġand Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| that Ġmut ed Ġthem . ĠYou Ġmust Ġbe Ġable Ġto Ġmanage Ġroles Ġto Ġuse Ġthis Ġcommand . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr User (), ĠTr Time (), ĠTr Rest ( true , Ġ"( no Ġreason ) ")) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġargs . get < Split Time >( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreason Ġ= Ġargs . get < String >( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmute Action ( ctx , Ġargs ) Ġ{ Ġguild , Ġuser , Ġoff ender , Ġmut ed Role Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Roles Ġ= Ġoff ender . roles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm Channel Ġ= Ġuser . open Private Channel (). await () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. modify Member Roles ( off ender , ĠlistOf ( muted Role ), Ġold Roles ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. queue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġremove Ġmanaged Ġroles !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ mute Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPermission Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġdon 't Ġhave Ġenough Ġpermissions Ġto Ġdo Ġthat !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ mute Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . success (" `${ off ender . user . as Tag }` Ġhas Ġbeen Ġmut ed Ġfor Ġ`$ time ` !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpm Channel . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"${ Emoji . H AM MER _ AND _ W REN CH } Ġ ĠYou Ġwere Ġmut ed !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Server Ġname **: Ġ${ guild . name } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** M uter **: Ġ${ ctx . event . author . as Tag } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Time **: Ġ$ time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Reason **: Ġ$ reason ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmute Timer Ġ= ĠM ute Timer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate . from ( Instant . now (). plus Millis ( time . total Ms )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . guild . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . event . channel . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Roles . map Ġ{ Ġit . id Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmut ed Role . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġin ĠDB Ġfor Ġreload Ġon Ġbot Ġrel a unch . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmute Col . insert One ( mute Timer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmute Timer . schedule ( ctx . event , Ġmute Col ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun mute () Ġ= Ġcommand (" un mute ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmute Col Ġ= ĠDB . get Collection < Mute Timer >( COL _ NAMES [ Mute Timer :: class . simple Name ] !! ) ĊĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Un mut es Ġa Ġcurrently Ġmut ed Ġmember ." ĊĠĠĠĠĠĠĠ Ġaliases Ġ= ĠlistOf (" un sil ence ", Ġ" un soft ban ") ĊĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġuser `\ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Un mut es Ġa Ġmut ed Ġuser . ĠThis Ġonly Ġworks Ġif Ġthe Ġuser Ġwas Ġmut ed Ġwith Ġthe Ġ` .. mute ` Ġcommand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| from Ġthis Ġbot . ĠThe Ġun muted Ġuser Ġwill Ġbe Ġsent Ġa Ġmessage Ġwith Ġthe Ġperson Ġwho Ġun muted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| them . ĠYou Ġmust Ġbe Ġable Ġto Ġmanage Ġroles Ġto Ġuse Ġthis Ġcommand . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr User ()) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmute Action ( ctx , Ġargs ) Ġ{ Ġguild , Ġuser , Ġoff ender , Ġmut ed Role Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimer Ġ= Ġmute Col . findOne ( Mute Timer :: userId Ġeq Ġuser . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" That Ġmember Ġisn 't Ġmut ed !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ mute Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Roles Ġ= Ġctx . guild . roles . filter Ġ{ Ġit . id Ġin Ġtimer . prev Roles Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm Channel Ġ= Ġuser . open Private Channel (). await () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. controller ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. modify Member Roles ( off ender , Ġoriginal Roles , ĠlistOf ( muted Role )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. queue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPermission Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġdon 't Ġhave Ġenough Ġpermissions Ġto Ġdo Ġthat !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ mute Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . success (" `${ off ender . user . as Tag }` Ġhas Ġbeen Ġun muted !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpm Channel . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"${ Emoji . H AM MER _ AND _ W REN CH } Ġ ĠYou Ġwere Ġmanually Ġun muted !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Server Ġname **: Ġ${ guild . name } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Un mut er **: Ġ${ ctx . event . author . as Tag } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmute Col . delete One ( Mute Timer :: userId Ġeq Ġoff ender . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmut elist () Ġ= Ġcommand (" mut elist ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmute Col Ġ= ĠDB . get Collection < Mute Timer >( COL _ NAMES [ Mute Timer :: class . simple Name ] !! ) ĊĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Shows Ġthe Ġmut ed Ġmembers Ġon Ġthe Ġcurrent Ġserver ." ĊĠĠĠĠĠĠĠ Ġaliases Ġ= ĠlistOf (" sil enc elist ", Ġ" soft ban list ") ĊĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġ[ user ]` \ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Without Ġarguments , Ġthis Ġcommand Ġlists Ġall Ġmut ed Ġmembers Ġof Ġthe Ġcurrent Ġserver , Ġalong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| with Ġthe Ġremaining Ġtime Ġthey Ġwill Ġbe Ġmut ed Ġfor Ġ( without Ġa Ġmanual Ġun mute ). ĠWhen Ġ` user ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| is Ġprovided , Ġthis Ġcommand Ġlists Ġdetails Ġabout Ġtheir Ġmute , Ġincluding Ġthe Ġreason , Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| remaining Ġtime , Ġand Ġtheir Ġprevious Ġroles . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr User ( true )) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġargs . get < User SearchResult ? >( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFound Ġ-> Ġreturn @ execute Ġmute Info ( ctx , Ġmute Col , Ġresult . user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotFound Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġfind Ġthat Ġuser !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmut ed Pages Ġ= Ġmute Col ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find ( Mute Timer :: guild Id Ġeq Ġctx . guild . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate Ġ{ Ġit Ġto Ġctx . guild . get Member ById ( it . userId ) !! Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( timer , Ġmember ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSplit Time ( timer . time . time Ġ- ĠDate (). time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"** ${ member . user . as Tag } **: Ġ$ time " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. chunk ed ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . join ToString ("\ n ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( muted Pages . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . success (" No Ġone Ġin Ġthis Ġserver Ġis Ġmut ed !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Paginator ( ctx . event . author ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( members Ġin Ġmut ed Pages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"${ Emoji . M UTE } Ġ ĠCurrently Ġmut ed Ġmembers :" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġmembers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġkick () Ġ= Ġcommand (" kick ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" K icks Ġa Ġmember Ġfrom Ġa Ġserver ." ĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġuser Ġ[ reason ]` \ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| K icks Ġa Ġuser Ġfrom Ġthe Ġcurrent Ġserver . ĠI Ġmust Ġbe Ġhave Ġthe Ġpermission Ġto Ġkick Ġmembers . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| When Ġa Ġmember Ġis Ġkick ed , Ġthey Ġwill Ġbe Ġsent Ġa Ġmessage Ġwith Ġ` reason ` Ġ( or Ġ`( no Ġreason ) `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| if Ġno Ġreason Ġis Ġspecified Ġand Ġthe Ġuser Ġthat Ġkick ed Ġthem . ĠYou Ġmust Ġbe Ġable Ġto Ġkick ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| members Ġto Ġuse Ġthis Ġcommand . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr User (), ĠTr Rest ( true , Ġ"( no Ġreason ) ")) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġwhen Ġ( val Ġresult Ġ= Ġargs . get < User SearchResult >( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFound Ġ-> Ġresult . user ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġfind Ġthat Ġuser !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreason Ġ= Ġargs . get < String >( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguild Ġ= Ġctx . guild ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġauthor Ġcan Ġkick Ġmembers . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguild Author Ġ= Ġguild . get Member ( ctx . event . author ) Ġ?: Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! guild Author . has Permission ( Permission . K ICK _ MEMBER S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" You Ġneed Ġto Ġbe Ġable Ġto Ġkick Ġmembers !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff ender Ġ= Ġguild . get Member ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( off ender Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" That Ġuser Ġis Ġnot Ġa Ġmember Ġof Ġthis Ġserver !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! guild . self Member . can Interact ( off ender )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġdon 't Ġhave Ġenough Ġpermissions Ġto Ġdo Ġthat !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild . controller . kick ( off ender , Ġreason ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . success (" `${ off ender . user . as Tag }` Ġhas Ġbeen Ġkick ed !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSend ĠPM Ġto Ġkick ed Ġuser Ġwith Ġinformation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . open Private Channel (). await (). send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"${ Emoji . H AM MER _ AND _ W REN CH } Ġ ĠYou Ġwere Ġkick ed !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Server Ġname **: Ġ${ guild . name } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** K icker **: Ġ${ ctx . event . author . as Tag } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Reason **: Ġ$ reason ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPermission Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġdon 't Ġhave Ġenough Ġpermissions Ġto Ġdo Ġthat !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġban () Ġ= Ġcommand (" ban ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Per manently Ġb ans Ġa Ġmember Ġfrom Ġa Ġserver ." ĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġuser Ġ[ reason ]` \ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| B ans Ġa Ġuser Ġfrom Ġthe Ġcurrent Ġserver . ĠI Ġmust Ġbe Ġhave Ġthe Ġpermission Ġto Ġban Ġmembers . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| When Ġa Ġmember Ġis Ġb anned , Ġthey Ġwill Ġbe Ġsent Ġa Ġmessage Ġwith Ġ` reason ` Ġ( or Ġ`( no Ġreason ) `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| if Ġno Ġreason Ġis Ġspecified Ġand Ġthe Ġuser Ġthat Ġb anned Ġthem . ĠYou Ġmust Ġbe Ġable Ġto Ġban ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| members Ġto Ġuse Ġthis Ġcommand . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr User (), ĠTr Rest ( true , Ġ"( no Ġreason ) ")) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreason Ġ= Ġargs . get < String >( 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġban Action ( ctx , Ġargs ) Ġ{ Ġguild , Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoff ender Ġ= Ġguild . get Member ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( off ender Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" That Ġuser Ġis Ġnot Ġa Ġmember Ġof Ġthis Ġserver !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ ban Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! guild . self Member . can Interact ( off ender )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġdon 't Ġhave Ġenough Ġpermissions Ġto Ġdo Ġthat !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ ban Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild . controller . ban ( off ender , Ġ 0 , Ġreason ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . success (" `${ off ender . user . as Tag }` Ġhas Ġbeen Ġb anned !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSend ĠPM Ġto Ġb anned Ġuser Ġwith Ġinformation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff ender . user . open Private Channel (). await (). send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"${ Emoji . H AM MER _ AND _ W REN CH } Ġ ĠYou Ġwere Ġb anned !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Server Ġname **: Ġ${ guild . name } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Banner **: Ġ${ ctx . event . author . as Tag } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Reason **: Ġ$ reason ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun ban () Ġ= Ġcommand (" un ban ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Un b ans Ġa Ġmember Ġfrom Ġa Ġserver ." ĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġuser `\ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Un b ans Ġa Ġb anned Ġuser Ġfrom Ġthe Ġcurrent Ġserver . ĠI Ġmust Ġhave Ġthe Ġpermission Ġto Ġban ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| members . ĠWhen Ġa Ġmember Ġis Ġun b anned , Ġthey Ġwill Ġbe Ġsent Ġa Ġmessage Ġwith Ġthe Ġperson Ġwho ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| un b anned Ġthem . ĠYou Ġmust Ġbe Ġable Ġto Ġban Ġmembers Ġto Ġuse Ġthis Ġcommand . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr User ()) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġban Action ( ctx , Ġargs ) Ġ{ Ġguild , Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild . controller . un ban ( user ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . success (" `${ user . as Tag }` Ġhas Ġbeen Ġun b anned !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSend ĠPM Ġto Ġun b anned Ġuser Ġwith Ġinformation . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . open Private Channel (). await (). send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"${ Emoji . H AM MER _ AND _ W REN CH } Ġ ĠYou Ġwere Ġun b anned !" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Server Ġname **: Ġ${ guild . name } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Un banner **: Ġ${ ctx . event . author . as Tag } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpurge () Ġ= Ġcommand (" purge ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Deletes Ġa Ġcertain Ġamount Ġof Ġmessages Ġfrom Ġa Ġchannel ." ĊĠĠĠĠĠĠĠ Ġaliases Ġ= ĠlistOf (" clear ", Ġ" mass delete ") ĊĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġlimit Ġ[ user ]` \ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Deletes Ġthe Ġpast Ġ` limit ` Ġmessages Ġfrom Ġthe Ġcurrent Ġchannel , Ġthe Ġmessage Ġcontaining Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| command Ġexemp t . ĠIf Ġ` user ` Ġis Ġspecified , Ġthis Ġcommand Ġdeletes Ġthe Ġpast Ġ` limit ` Ġmessages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| from Ġonly Ġthat Ġuser . ĠYou Ġmust Ġbe Ġable Ġto Ġmanage Ġmessages Ġto Ġuse Ġthis Ġcommand . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr Int (), ĠTr User ( true )) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġargs . get < Int >( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġwhen Ġ( val Ġresult Ġ= Ġargs . get < User SearchResult ? >( 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFound Ġ-> Ġresult . user ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġfind Ġthat Ġuser !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġauthor Ġcan Ġmanage Ġmessages . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguild Author Ġ= Ġctx . guild . get Member ( ctx . event . author ) Ġ?: Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! guild Author . has Permission ( Permission . MESSAGE _ MANAGE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" You Ġneed Ġto Ġbe Ġable Ġto Ġmanage Ġmessages !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġget Ġrate Ġlimited ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( limit Ġ! in Ġ 1 .. 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġpurge Ġthat Ġamount Ġof Ġmessages !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġctx . event . channel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . purge Messages ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. iterable History ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . author Ġ== Ġuser Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( limit Ġ+ Ġif Ġ( user Ġ== Ġctx . event . author ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . iterable History . take ( limit Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġdelete Ġsome Ġmessages Ġbecause Ġthey 're Ġtoo Ġold !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPermission Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġdon 't Ġhave Ġenough Ġpermissions Ġto Ġdo Ġthat !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġslow mode () Ġ= Ġcommand (" slow ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Sets Ġthe Ġcurrent Ġchannel 's Ġslow mode ." ĊĠĠĠĠĠĠĠ Ġaliases Ġ= ĠlistOf (" co old own ", Ġ" slow mode ") ĊĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġtime ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| When Ġsetting Ġthe Ġslow mode Ġcool down Ġof Ġa Ġchannel Ġin Ġthe ĠDiscord Ġclient 's Ġchannel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| settings , Ġthe Ġonly Ġoptions Ġavailable Ġare Ġat Ġfixed Ġlengths Ġof Ġtime . ĠThis Ġcommand Ġlets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| you Ġchange Ġit Ġto Ġany Ġarbitrary Ġtime Ġbetween Ġnone Ġto Ġsix Ġhours . ĠThe Ġ` time ` Ġargument ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| should Ġlook Ġsomething Ġlike Ġ` 2 m Ġ 3 0 s `, Ġ` 1 h `, Ġor Ġ` 0 s `, Ġto Ġgive Ġsome Ġexamples . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr Time ()) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslow mode Ġ= Ġargs . get < Split Time >( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslow mode Seconds Ġ= Ġslow mode . total Ms . toInt () Ġ/ Ġ 1 _ 0 0 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slow mode Seconds Ġ! in Ġ 0 .. 2 1 _ 6 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġset Ġthis Ġchannel 's Ġslow mode Ġto Ġthat Ġamount Ġof Ġtime !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġctx . guild . getText Channel ById ( ctx . event . channel . id ) Ġ?: Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . manager . set Slow mode ( slow mode Seconds ). queue () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslow mode Repr Ġ= Ġif Ġ( slow mode . total Ms Ġ> Ġ 0 ) Ġ"` $ slow mode `" Ġelse Ġ" disabled " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . success (" This Ġchannel 's Ġslow mode Ġtime Ġis Ġnow Ġ`$ slow mode Repr ` !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlogs () Ġ= Ġcommand (" logs ") Ġ{ ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Gets Ġaudit Ġlog Ġhistory ." ĊĠĠĠĠĠĠĠ Ġaliases Ġ= ĠlistOf (" aud its ", Ġ" audit logs ") ĊĊĠĠĠĠĠĠĠ Ġext Description Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| `$ name Ġ[ limit ]` \ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| This Ġcommand Ġretrieves Ġthe Ġlast Ġ` limit ` Ġentries Ġin Ġthe Ġaudit Ġlog . ĠIf Ġ` limit ` Ġis Ġnot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| given , ĠI Ġwill Ġget Ġthe Ġlast Ġten Ġentries . ĠFor Ġeach Ġaudit Ġlog Ġentry , ĠI 'll Ġshow Ġthe Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| of Ġthe Ġaudit , Ġthe Ġuser Ġthat Ġinitiated Ġit , Ġthe Ġaffected Ġtarget Ġtype Ġand Ġname , Ġthe Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| at Ġwhich Ġit Ġtook Ġplace , Ġand Ġthe Ġreason Ġ( when Ġa Ġuser Ġis Ġb anned , Ġfor Ġexample ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| & { Limit ations : } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| I Ġwon 't Ġshow Ġyou Ġwhat Ġactually Ġchanged , Ġsince Ġthat Ġwould Ġrequire Ġmore Ġeffort Ġfor Ġme Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| do Ġthan Ġfor Ġyou Ġto Ġopen Ġup Ġthe Ġaudit Ġlogs Ġin Ġthe Ġserver Ġsettings . ĠYou Ġneed Ġto Ġbe Ġable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| to Ġview Ġthe Ġlogs Ġalready Ġto Ġuse Ġthis Ġcommand , Ġanyway . ĊĠĠĠĠĠĠĠ Ġ""" . trim To Description () ĊĊĠĠĠĠĠĠĠ Ġexpected Args Ġ= ĠlistOf ( Tr Int ( true , Ġ 1 0 )) ĊĠĠĠĠĠĠĠ Ġexecute Ġ{ Ġctx , Ġargs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġargs . get < Int >( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( limit Ġ! in Ġ 1 .. 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġget Ġthat Ġmany Ġlog Ġentries !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġauthor Ġcan Ġnormally Ġcheck Ġaudit Ġlogs . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguild Author Ġ= Ġctx . guild . get Member ( ctx . event . author ) Ġ?: Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! guild Author . has Permission ( Permission . VIEW _ AUDIT _ LOG S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" You Ġneed Ġto Ġbe Ġable Ġto Ġview Ġaudit Ġlogs !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogs Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . guild . retrieve Audit Logs (). take Async ( limit ). await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIns ufficient Permission Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġneed Ġto Ġbe Ġable Ġto Ġview Ġthis Ġserver 's Ġaudit Ġlogs !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ execute ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguild Name Ġ= Ġctx . guild . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Paginator ( ctx . event . author ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( log Ġin Ġlogs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠName Ġof Ġaudit Ġtarget Ġbased Ġon Ġits Ġtype . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Audit Target Name ( ctx , Ġtarget Type , Ġtarget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"${ Emoji . OPEN _ BOOK } Ġ ĠAudit Ġlogs Ġof Ġ** $ guild Name ** :" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Audit ĠID **: Ġ$ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Type **: Ġ${ type . const To Eng ()} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Init iator **: Ġ${ user ?. as Tag Ġ?: Ġ"( none ) "} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Target Ġtype **: Ġ${ target Type . name . toLowerCase ()} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Target **: Ġ$ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Time Ġoccurred **: Ġ${ time Created . format ( TIME _ FORMAT TER )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Reason **: Ġ${ reason Ġ?: Ġ"( no Ġreason ) "} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ