package Ġbr . com . dev srs ou za . j da . command . implementation Ċ Ċ import Ġbr . com . dev srs ou za . j da . command . Command Ċ import Ġbr . com . dev srs ou za . j da . command . Command Executor Callback Ċ import Ġbr . com . dev srs ou za . j da . command . Command Fail Exception Ċ import Ġbr . com . dev srs ou za . j da . command . lifecycle . Command Lifecycle Ċ import Ġnet . dv 8 tion . j da . api . J DA Ċ import Ġnet . dv 8 tion . j da . api . entities . Guild Ċ import Ġnet . dv 8 tion . j da . api . entities . Member Ċ import Ġnet . dv 8 tion . j da . api . entities . Message Ċ import Ġnet . dv 8 tion . j da . api . entities . Text Channel Ċ Ċ class ĠCommand Impl ( ĊĠĠĠ Ġoverride Ġval Ġj da : ĠJ DA , ĊĠĠĠ Ġoverride Ġval Ġname : ĠString , ĊĠĠĠ Ġoverride Ġvar Ġexecutor : ĠCommand Executor Callback ? Ċ ) Ġ: ĠCommand Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsub Commands : ĠMutable Map < String , ĠCommand > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġoverride Ġfun Ġregister Command ( name : ĠString , Ġcommand : ĠCommand ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsub Commands . put ( name , Ġcommand ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġhandle Command ( ĊĠĠĠĠĠĠĠ Ġguild : ĠGuild , ĊĠĠĠĠĠĠĠ Ġmember : ĠMember , ĊĠĠĠĠĠĠĠ Ġchannel : ĠText Channel , ĊĠĠĠĠĠĠĠ Ġmessage : ĠMessage , ĊĠĠĠĠĠĠĠ Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġargs : ĠArray < String > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġargs . get OrNull ( 0 )?. let Ġ{ Ġsub Commands [ it ] Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Args Ġ= Ġif ( args . isNotEmpty ()) Ġargs . copyOf Range ( 1 , Ġargs . size ) Ġelse Ġempty Array () ĊĊĠĠĠĠĠĠĠ Ġif ( command Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . handle Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Args ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( executor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Executor Ġ= ĠCommand Executor Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj da , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent : ĠCommand Lifecycle Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor ?. invoke ( command Executor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Lifecycle . COMPLETE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCommand Fail Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Lifecycle . FAIL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( l ifec yle Ġin Ġcommand Executor . l ifec yle s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj da . removeEventListener ( l ifec yle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl ifec yle . on Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }