/******************************************************************************* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . ĠBl ade maker Ċ Ġ* Ċ Ġ* Ġ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 Ġdev . kill joy . framework . abs Ċ Ċ import Ġdev . kill joy . framework . Command Context Ċ import Ġdev . kill joy . framework . annotations . Command Argument Ċ import Ġdev . kill joy . framework . annotations . Command Properties Ċ import Ġnet . dv 8 tion . j da . api . Permission Ċ Ċ @ Suppress (" unused ") Ċ abstract Ġclass ĠCommand Ġ{ ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġprops : ĠCommand Properties Ġ= Ġthis . java Class . getAnnotation ( Command Properties :: class . java ) ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġsuspend Ġfun Ġexecute ( ctx : ĠCommand Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* if Ġ( this . java Class . is Annotation Present ( Prem ium Command :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġlvl Required Ġ= Ġthis . java Class . getAnnotation ( Prem ium Command :: class . java ). value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠReturn Ġprem ium Ġembed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* if Ġ( ctx . guild Config . premium Ġ== Ġnull Ġ|| Ġctx . guild Config . premium Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġ( ctx . guild Config . premium Ġ>= Ġlvl Required ) Ġhandle ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ( ctx ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( checks ( ctx )) Ġhandle ( ctx ) */ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( checks ( ctx )) Ġhandle ( ctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġsuspend Ġfun Ġchecks ( ctx : ĠCommand Context ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġprotected Ġabstract Ġsuspend Ġfun Ġhandle ( ctx : ĠCommand Context ) ĊĊĠĠĠ Ġopen Ġval Ġhelp : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" Not Ġhelp Ġprovided Ġfor Ġthis Ġcommand ." ĊĊĠĠĠ Ġopen Ġval Ġargs : ĠArray < Command Argument > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġprops . arguments ĊĊĠĠĠ Ġprivate Ġval Ġsub Commands : ĠMutable List < Sub Command > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġfun Ġget Sub Commands (): ĠList < Sub Command > Ġ= Ġsub Commands ĊĊĠĠĠ Ġinternal Ġfun Ġregister Sub Command ( sub Command : ĠSub Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck (!( sub Commands . any Ġ{ Ġit . props . name Ġ== Ġsub Command . props . name Ġ})) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sub - command Ġwith Ġname Ġ${ sub Command . props . name } Ġis Ġalready Ġregistered Ġin Ġcommand Ġ${ props . name }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsub Commands . add ( sub Command ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġuser Permissions (): ĠSet < Permission > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= Ġhash Set Of (* props . user Permissions ) ĊĠĠĠĠĠĠĠ Ġpermissions . addAll ( props . category . permissions ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpermissions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbot Permissions (): ĠSet < Permission > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= Ġhash Set Of (* props . bot Permissions ) ĊĠĠĠĠĠĠĠ Ġpermissions . addAll ( props . category . bot Permissions ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpermissions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġuser Permissions Ġ= Ġuser Permissions () ĊĠĠĠ Ġval Ġbot Permissions Ġ= Ġbot Permissions () Ċ }