package Ġdev . lun ar coffee . bean ly . ext s . commands . utility Ċ Ċ import Ġdev . lun ar coffee . bean ly . consts . Emoji Ċ import Ġdev . lun ar coffee . bean ly . ext s . commands . utility . timers . Mute Timer Ċ import Ġdev . lun ar coffee . framework . api . dsl . embed Ċ 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 . core . Command Arguments Ċ import Ġdev . lun ar coffee . framework . core . Command Context Ċ import Ġdev . lun ar coffee . framework . core . transformers . utility . Found Ċ import Ġdev . lun ar coffee . framework . core . transformers . utility . Split Time Ċ import Ġdev . lun ar coffee . framework . core . transformers . utility . User SearchResult Ċ import Ġnet . dv 8 tion . j da . api . Permission Ċ import Ġnet . dv 8 tion . j da . api . audit . Audit Log Change Ċ import Ġnet . dv 8 tion . j da . api . audit . Target Type Ċ import Ġnet . dv 8 tion . j da . api . entities .* Ċ import Ġnet . dv 8 tion . j da . api . exceptions . Permission Exception Ċ import Ġorg . lit ote . km ongo . coroutine . Coroutine Collection Ċ import Ġorg . lit ote . km ongo . eq Ċ import Ġjava . util .* Ċ Ċ suspend Ġinline Ġfun Ġmute Action ( ĊĠĠĠ Ġctx : ĠCommand Context , ĊĠĠĠ Ġargs : ĠCommand Arguments , ĊĠĠĠ Ġcross inline Ġaction : Ġsuspend Ġ( Guild , ĠUser , ĠMember , ĠRole ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġuser Ġ= Ġwhen Ġ( val Ġresult Ġ= Ġargs . get < User SearchResult >( 0 )) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠFound Ġ-> Ġresult . user ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġfind Ġthat Ġuser !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġguild Ġ= Ġctx . guild ĊĊĠĠĠ Ġ// ĠThis Ġuses Ġthe Ġpermission Ġto Ġmanage Ġroles Ġas Ġan Ġallow ance Ġto Ġmute . ĊĠĠĠ Ġval Ġguild Author Ġ= Ġguild . get Member ( ctx . event . author ) Ġ?: Ġreturn ĊĠĠĠ Ġif Ġ(! guild Author . has Permission ( Permission . MANAGE _ RO LES )) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . error (" You Ġneed Ġto Ġbe Ġable Ġto Ġmanage Ġroles Ġto Ġmute Ġusers !") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġoff ender Ġ= Ġguild . get Member ( user ) ĊĠĠĠ Ġif Ġ( off ender Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . error (" That Ġuser Ġis Ġnot Ġa Ġmember Ġof Ġthis Ġserver !") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAssume Ġthe Ġguild Ġhas Ġa Ġrole Ġwith Ġ" muted " Ġin Ġit , Ġand Ġget Ġit . ĊĠĠĠ Ġval Ġmut ed Role Ġ= Ġguild . roles . find Ġ{ Ġit . name . contains (" muted ", Ġtrue ) Ġ} ĊĠĠĠ Ġif Ġ( muted Role Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . error (" I Ġneed Ġto Ġbe Ġable Ġto Ġassign Ġa Ġrole Ġwith Ġ` muted ` Ġin Ġits Ġname !") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThis Ġis Ġa Ġmute Ġor Ġun mute Ġcommand . ĊĠĠĠ Ġaction ( guild , Ġuser , Ġoff ender , Ġmut ed Role ) Ċ } Ċ Ċ // ĠSends Ġinformation Ġabout Ġa Ġmut ed Ġuser . Ċ suspend Ġfun Ġmute Info ( ctx : ĠCommand Context , Ġmute Col : ĠCor outine Collection < Mute Timer >, Ġuser : ĠUser ) Ġ{ ĊĠĠĠ Ġval Ġmember Ġ= Ġctx . event . guild . get Member ( user ) ĊĠĠĠ Ġif Ġ( member Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . error (" That Ġuser Ġis Ġnot Ġa Ġmember Ġof Ġthis Ġserver !") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtimer Ġ= Ġmute Col . findOne ( Mute Timer :: userId Ġeq Ġmember . id ) ĊĠĠĠ Ġif Ġ( timer Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . error (" That Ġmember Ġisn 't Ġmut ed !") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtime Ġ= ĠSplit Time ( timer . time . time Ġ- ĠDate (). time ) ĊĠĠĠ Ġval Ġprev Roles Ġ= Ġtimer ĊĠĠĠĠĠĠĠ Ġ. prev Roles ĊĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġctx . guild . get Role ById ( it )?. as Mention Ġ} ĊĊĠĠĠ Ġctx . send ( ĊĠĠĠĠĠĠĠ Ġembed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ"${ Emoji . M UTE } Ġ ĠInfo Ġon Ġmut ed Ġmember Ġ** ${ member . user . as Tag }** :" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Time Ġremaining **: Ġ$ time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Previous Ġroles **: Ġ$ prev Roles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ** Reason **: Ġ${ timer . reason } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ suspend Ġinline Ġfun Ġban Action ( ĊĠĠĠ Ġctx : ĠCommand Context , ĊĠĠĠ Ġargs : ĠCommand Arguments , ĊĠĠĠ Ġcross inline Ġaction : Ġsuspend Ġ( Guild , ĠUser ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġuser Ġ= Ġwhen Ġ( val Ġresult Ġ= Ġargs . get < User SearchResult >( 0 )) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠFound Ġ-> Ġresult . user ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . error (" I Ġcan 't Ġfind Ġthat Ġuser !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġguild Ġ= Ġctx . guild ĊĊĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġauthor Ġcan Ġkick Ġmembers . ĊĠĠĠ Ġval Ġguild Author Ġ= Ġguild . get Member ( ctx . event . author ) Ġ?: Ġreturn ĊĠĠĠ Ġif Ġ(! guild Author . has Permission ( Permission . BAN _ MEMBER S )) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . error (" You Ġneed Ġto Ġbe Ġable Ġto Ġban Ġmembers !") ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġa Ġban Ġor Ġun ban Ġcommand . ĊĠĠĠĠĠĠĠ Ġaction ( guild , Ġuser ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠPermission Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . error (" I Ġdon 't Ġhave Ġenough Ġpermissions Ġto Ġdo Ġthat !") ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠGenerates Ġa Ġname Ġfor Ġan Ġaudit Ġaction . ĠFor Ġexample , Ġif Ġ[ type ] Ġis Ġ[ Target Type . MEMBER ], Ġthis Ġwill Ċ // Ġreturn Ġthe Ġtag Ġof Ġthe Ġmember . ĠIf Ġ[ type ] Ġis Ġ[ Target Type . ROLE ], Ġthis Ġwill Ġreturn Ġthe Ġrole 's Ġname Ċ // Ġas Ġa Ġmention . Ċ suspend Ġfun Ġget Audit Target Name ( ctx : ĠCommand Context , Ġtype : ĠTarget Type , Ġid : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTarget Type . GU ILD Ġ-> Ġctx . j da . get Guild ById ( id ) !!. name ĊĠĠĠĠĠĠĠ ĠTarget Type . CHANNEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Channel Ġ= Ġctx . guild . getText Channel ById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvoice Channel Ġ= Ġctx . guild . get Voice Channel ById ( id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġtext Channel ?. as Mention Ġ?: Ġvoice Channel ?. name ?. run Ġ{ Ġ" VC Ġ`$ this `" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ?: Ġ"( un available )" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTarget Type . ROLE Ġ-> Ġctx . j da . get Role ById ( id )?. as Mention Ġ?: Ġ"( un available )" ĊĠĠĠĠĠĠĠ ĠTarget Type . MEMBER Ġ-> Ġctx . guild . get Member ById ( id )?. user ?. as Tag Ġ?: Ġ"( un available )" ĊĠĠĠĠĠĠĠ ĠTarget Type . INV ITE Ġ-> Ġ"( some Ġinvite Ġlink )" ĊĠĠĠĠĠĠĠ ĠTarget Type . WEB HOOK Ġ-> Ġctx . j da . retrieve Webhook ById ( id ). await (). name ĊĠĠĠĠĠĠĠ ĠTarget Type . EM OTE Ġ-> Ġctx . j da . get Em ote ById ( id )?. as Mention Ġ?: Ġ"( un available )" ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"( un available )" ĊĠĠĠ Ġ} Ċ } Ċ