/* čĊ Ġ* ĠCopyright Ġ 2 0 2 1 ĠMichael ĠJohn ston čĊ Ġ* čĊ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); čĊ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . čĊ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat čĊ Ġ* čĊ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 čĊ Ġ* čĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware čĊ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , čĊ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . čĊ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand čĊ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . čĊ Ġ*/ čĊč Ċ package Ġcom . github . mr bean 3 5 5 . ro ons . discord . commands čĊč Ċ import Ġnet . dv 8 tion . j da . api . entities . Member č Ċ import Ġnet . dv 8 tion . j da . api . events . Event č Ċ import Ġnet . dv 8 tion . j da . api . events . interaction . Slash Command Event č Ċ import Ġnet . dv 8 tion . j da . api . events . message . Message Received Event č Ċ import Ġnet . dv 8 tion . j da . api . inter actions . Interaction č Ċ import Ġnet . dv 8 tion . j da . api . inter actions . commands . Option Mapping čĊč Ċ sealed Ġclass ĠCommand Context < E Ġ: ĠEvent >( protected Ġval Ġevent : ĠE ) Ġ{ čĊčĊĠĠĠ Ġ/** ĠMember Ġthat Ġinitiated Ġthe Ġcommand . Ġ*/ čĊĠĠĠ Ġabstract Ġval Ġmember : ĠMember čĊčĊĠĠĠ Ġval Ġreply Ġ= ĠCommand Reply ( event ) č Ċ } čĊč Ċ /** ĠContext Ġof Ġa Ġmessage Ġcommand Ġ( starts Ġwith Ġ'! '). Ġ*/ č Ċ class ĠMessage Command Context ( event : ĠMessage Received Event ) Ġ: ĠCommand Context < Message Received Event >( event ) Ġ{ čĊčĊĠĠĠ Ġoverride Ġval Ġmember : ĠMember Ġget () Ġ= Ġevent . member !! čĊčĊĠĠĠ Ġ/** ĠCommand Ġarguments Ġ( ex cluding Ġthe Ġcommand Ġname ). Ġ*/ čĊĠĠĠ Ġval Ġarguments : ĠList < String > Ġby Ġlazy Ġ{ čĊĠĠĠĠĠĠĠ Ġevent . message . content Raw . trim () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop ( 1 ) Ġ// Ġ' !' Ġprefix čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (' Ġ') čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotBlank () Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop ( 1 ) Ġ// Ġcommand Ġname čĊĠĠĠ Ġ} č Ċ } čĊč Ċ /** ĠContext Ġof Ġa Ġslash Ġcommand . Ġ*/ č Ċ class ĠSl ash Command Context ( event : ĠSl ash Command Event ) Ġ: ĠCommand Context < Slash Command Event >( event ) Ġ{ čĊčĊĠĠĠ Ġoverride Ġval Ġmember : ĠMember Ġget () Ġ= Ġevent . member !! čĊčĊĠĠĠ Ġ/** ĠName Ġof Ġthe Ġsub - command Ġif Ġapplicable . Ġ*/ čĊĠĠĠ Ġval Ġsub command Name : ĠString ? Ġget () Ġ= Ġevent . sub command Name čĊčĊĠĠĠ Ġ/** ĠFinds Ġthe Ġfirst Ġoption Ġwith Ġthe Ġgiven Ġname . Ġ*/ čĊĠĠĠ Ġfun Ġget Option ( name : ĠString ): ĠOption Mapping ? Ġ= Ġevent . getOption ( name ) čĊč Ċ } čĊč Ċ /** ĠSends Ġthe Ġapplicable Ġreply Ġto Ġa Ġmessage Ġor Ġslash Ġcommand . Ġ*/ č Ċ class ĠCommand Reply ( private Ġval Ġevent : ĠEvent ) Ġ{ čĊčĊĠĠĠ Ġoperator Ġfun Ġinvoke ( text : ĠString , Ġsensitive : ĠBoolean Ġ= Ġfalse ) Ġ{ čĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMessage Received Event Ġ-> Ġif Ġ( sensitive ) Ġevent . send Private Message ( text ) Ġelse Ġevent . type Reply ( decorate ( text )) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSl ash Command Event Ġ-> Ġevent . queue Ep hemeral Reply ( text ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unsupported Ġevent Ġtype : Ġ${ event :: class }") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġdecor ate ( text : ĠString ) Ġ= Ġ"$ text \ n * â Ń Ĳ ĠTry Ġout Ġthe Ġfancy Ġslash Ġcommands ! ĠType Ġ`/ ` Ġto Ġsee Ġwhat 's Ġavailable .* " čĊč Ċ } čĊč Ċ private Ġfun ĠMessage Received Event . type Reply ( text : ĠString ): ĠUnit Ġ= čĊĠĠĠ Ġchannel . send Typing (). queue Ġ{ čĊĠĠĠĠĠĠĠ Ġchannel . sendMessage ( text ). queue () čĊĠĠĠ Ġ} čĊč Ċ private Ġfun ĠMessage Received Event . send Private Message ( text : ĠString ): ĠUnit Ġ= čĊĠĠĠ Ġauthor . open Private Channel (). queue Ġ{ čĊĠĠĠĠĠĠĠ Ġit . sendMessage ( text ). queue Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . add Reaction (" âľ ħ "). queue () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊč Ċ private Ġfun ĠInteraction . queue Ep hemeral Reply ( content : ĠString ): ĠUnit Ġ= čĊĠĠĠ Ġreply ( content ). set Ep hemeral ( true ). queue ()