package Ġcom . soft aw ii . ticket bot . internal Ċ Ċ import Ġnet . dv 8 tion . j da . api . Permission Ċ import Ġnet . dv 8 tion . j da . api . entities . Channel Type .* Ċ import Ġnet . dv 8 tion . j da . api . entities . Member Ċ import Ġnet . dv 8 tion . j da . api . entities . User Ċ import Ġnet . dv 8 tion . j da . api . events . interaction . Slash Command Event Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . util . stream . Collectors Ċ Ċ class ĠCommand Handler ( ĊĠĠĠ Ġprivate Ġval Ġpermissions : ĠList < Permission >, ĊĠĠĠ Ġprivate Ġval Ġmethod : ĠMethod , ĊĠĠĠ Ġprivate Ġval Ġenvironment : ĠEnvironment Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠALLOW ED _ CHANNEL S Ġ= ĠlistOf ( TEXT , ĠGU ILD _ PUBLIC _ THREAD , ĠGU ILD _ PRIVATE _ THREAD ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute ( event : ĠSl ash Command Event ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . channel Type Ġ== ĠPRIVATE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Private Environment ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Es se Ġcomando ĠnÃ£o Ġpode Ġser Ġexecut ado Ġem Ġum Ġcan al Ġpriv ado " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexecute ( event , Ġevent . user ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ALLOWED _ CHANNEL S . contains ( event . channel Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Server Environment ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Es se Ġcomando ĠnÃ£o Ġpode Ġser Ġexecut ado Ġem Ġum Ġcan al Ġde Ġservidor " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexecute ( event , Ġevent . member !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Can al ĠnÃ£o Ġpermit ido " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Private Environment (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġenvironment Ġ== ĠEnvironment . PRIVATE Ġ|| Ġenvironment Ġ== ĠEnvironment . BOTH ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Server Environment (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġenvironment Ġ== ĠEnvironment . SERVER Ġ|| Ġenvironment Ġ== ĠEnvironment . BOTH ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute ( event : ĠSl ash Command Event , Ġuser : ĠUser ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmethod . invoke ( null , Ġevent ) Ġas ĠString ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute ( event : ĠSl ash Command Event , Ġmember : ĠMember ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( member . has Permission ( permissions )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmethod . invoke ( null , Ġevent ) Ġas ĠString ? ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" V ocÃª ĠnÃ£o Ġtem Ġper miss Ãµes Ġ(${ required Permissions ToString () }) Ġs uf icient es Ġpara Ġexecut ar Ġesse Ġcomando " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequired Permissions ToString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpermissions . stream (). map ( Permission :: getName ). collect ( Collectors . join ing (", Ġ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Method Path (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ method . decl aring Class . name }.${ method . name } ()" ĊĠĠĠ Ġ} Ċ }