/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 , Ġ 2 0 2 0 , Ġ 2 0 2 1 Ġs hed an iel Ċ Ġ* Ċ Ġ* Ġ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 Ġme . s hed an iel . link ie . discord . s commands Ċ Ċ import Ġdiscord 4 j . common . util . Snow flake Ċ import Ġdiscord 4 j . core . Gateway Discord Client Ċ import Ġdiscord 4 j . core .` object `. command . Application Command Interaction Option Ċ import Ġdiscord 4 j . core .` object `. command . Application Command Option . Type .* Ċ import Ġdiscord 4 j . core .` object `. entity . Role Ċ import Ġdiscord 4 j . core .` object `. entity . User Ċ import Ġdiscord 4 j . core .` object `. entity . channel . Channel Ċ import Ġdiscord 4 j . core . event . domain . interaction . Chat Input Auto Complete Event Ċ import Ġdiscord 4 j . core . event . domain . interaction . Chat Input Interaction Event Ċ import Ġdiscord 4 j . discord json . json . Application Command Data Ċ import Ġdiscord 4 j . discord json . json . Application Command Option Choice Data Ċ import Ġdiscord 4 j . discord json . json . Application Command Request Ċ import Ġdiscord 4 j . discord json . possible . Possible Ċ import Ġme . s hed an iel . link ie . discord . handler . Throwable Handler Ċ import Ġme . s hed an iel . link ie . discord . utils . Command Context Ċ import Ġme . s hed an iel . link ie . discord . utils . Slash Command Based Context Ċ import Ġme . s hed an iel . link ie . discord . utils . dismiss Button Ċ import Ġme . s hed an iel . link ie . discord . utils . event Ċ import Ġme . s hed an iel . link ie . discord . utils . extensions . get OrNull Ċ import Ġme . s hed an iel . link ie . discord . utils . reply Complex Ċ import Ġreactor . core . publisher . Mono Ċ import Ġjava . util . stream . Collectors Ċ Ċ data Ġclass ĠSl ash CommandHandler ( ĊĠĠĠ Ġval Ġresponder : Ġ( event : ĠChat Input Interaction Event ) Ġ-> ĠUnit , ĊĠĠĠ Ġval Ġauto Comp leter : Ġ( event : ĠChat Input Auto Complete Event ) Ġ-> ĠUnit , Ċ ) Ċ Ċ class ĠSl ash Commands ( ĊĠĠĠ Ġprivate Ġval Ġclient : ĠGateway Discord Client , ĊĠĠĠ Ġprivate Ġval Ġthrowable Handler : ĠThrowable Handler , ĊĠĠĠ Ġprivate Ġval ĠerrorHandler : Ġ( String ) Ġ-> ĠUnit Ġ= Ġ{ Ġprintln (" Error : Ġ$ it ") Ġ}, ĊĠĠĠ Ġprivate Ġval Ġdefault Ep hemeral : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġprivate Ġval Ġdebug : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġapplication Id : ĠLong Ġby Ġlazy Ġ{ Ġclient . rest Client . application Id . block () Ġ} ĊĠĠĠ Ġval Ġhandlers Ġ= Ġmutable Map Of < String , ĠSl ash CommandHandler >() ĊĠĠĠ Ġval Ġguild Handlers Ġ= Ġmutable Map Of < Guild Command Key , ĠSl ash CommandHandler >() ĊĠĠĠ Ġval Ġregistered Commands Ġ= Ġmutable Map Of < String , ĠApplication Command Data >() ĊĠĠĠ Ġval Ġregistered Guild Commands Ġ= Ġmutable Map Of < Guild Command Key , ĠApplication Command Data >() ĊĠĠĠ Ġval Ġglobal Commands : ĠMutable List < Application Command Data > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . rest Client . application Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getGlobal Application Commands ( application Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Ġ{ ĠMono . empty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Stream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġguild Commands Ġ= Ġmutable Map Of < Snow flake , ĠMutable List < Application Command Data >>() ĊĊĠĠĠ Ġdata Ġclass ĠGuild Command Key ( val Ġguild Id : ĠSnow flake , Ġval Ġcommand Name : ĠString ) ĊĊĠĠĠ Ġfun Ġget Guild Commands ( id : ĠSnow flake ): ĠMutable List < Application Command Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġguild Commands . get Or Put ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . rest Client . application Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Guild Application Commands ( application Id , Ġid . as Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Ġ{ ĠMono . empty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . event < Chat Input Interaction Event > Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandlers . containsKey ( event . command Name ) Ġ-> Ġhandlers [ event . command Name ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . interaction . guild Id . isPresent Ġ&& Ġguild Handlers . containsKey ( Guild Command Key ( event . interaction . guild Id . get (), Ġevent . command Name )) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild Handlers [ Guild Command Key ( event . interaction . guild Id . get (), Ġevent . command Name )] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn @ event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . responder ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . event < Chat Input Auto Complete Event > Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandlers . containsKey ( event . command Name ) Ġ-> Ġhandlers [ event . command Name ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . interaction . guild Id . isPresent Ġ&& Ġguild Handlers . containsKey ( Guild Command Key ( event . interaction . guild Id . get (), Ġevent . command Name )) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild Handlers [ Guild Command Key ( event . interaction . guild Id . get (), Ġevent . command Name )] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn @ event ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . auto Comp leter ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġguild Command ( guild : ĠLong , Ġdescription : ĠString , Ġbuilder : ĠSl ash Command Builder . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġguild Command ( Snow flake . of ( guild ), Ġdescription , Ġbuilder ) ĊĊĠĠĠ Ġinline Ġfun Ġguild Command ( guild : ĠSnow flake , Ġdescription : ĠString , Ġbuilder : ĠSl ash Command Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Builder Ġ= ĠSl ash Command Builder ( description ). also ( builder ) ĊĠĠĠĠĠĠĠ Ġguild Command ( guild , Ġcommand Builder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġglobal Command ( description : ĠString , Ġbuilder : ĠSl ash Command Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Builder Ġ= ĠSl ash Command Builder ( description ). also ( builder ) ĊĠĠĠĠĠĠĠ Ġglobal Command ( command Builder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġguild Command ( guild : ĠLong , Ġcommand : ĠSl ash Command ) Ġ= ĊĠĠĠĠĠĠĠ Ġguild Command ( Snow flake . of ( guild ), Ġcommand ) ĊĊĠĠĠ Ġfun Ġguild Command ( guild : ĠSnow flake , Ġcommand : ĠSl ash Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cmd Ġin Ġcommand . cmds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġguild Handlers [ Guild Command Key ( guild , Ġcmd )] Ġ= Ġbuild Handler ( command , Ġcmd ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Command Ġ= Ġregistered Guild Commands [ Guild Command Key ( guild , Ġcmd )] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Command Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! equals ( existing Command , Ġexisting Command . derive ( command ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Updating Ġguild Ġ(${ guild . asString () }) Ġcommand Ġ/ $ cmd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Guild Command ( guild , Ġcommand , Ġexisting Command . id (). to Long (), Ġcmd ). subscribe Ġ{ ĠnewData Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Guild Commands [ Guild Command Key ( guild , Ġcmd )] Ġ= ĠnewData ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( debug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Guild Ġ(${ guild . asString () }) Ġcommand Ġ/ $ cmd Ġis Ġup Ġto Ġdate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( data Ġin Ġget Guild Commands ( guild )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . name () Ġ== Ġcmd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Data Ġ= Ġdata . derive ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! equals ( data , Ġcommand Data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Updating Ġguild Ġ(${ guild . asString () }) Ġcommand Ġ/ $ cmd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Guild Command ( guild , Ġcommand , Ġdata . id (). to Long (), Ġcmd ). subscribe Ġ{ ĠnewData Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Guild Commands [ Guild Command Key ( guild , Ġcmd )] Ġ= ĠnewData ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Guild Ġ(${ guild . asString () }) Ġcommand Ġ/ $ cmd Ġis Ġup Ġto Ġdate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Guild Commands [ Guild Command Key ( guild , Ġcmd )] Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Register ing Ġguild Ġ(${ guild . asString () }) Ġcommand Ġ/ $ cmd ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Guild Command ( guild , Ġcommand , Ġcmd ). subscribe Ġ{ ĠnewData Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Guild Commands [ Guild Command Key ( guild , Ġcmd )] Ġ= ĠnewData ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Global Command ( command : ĠSl ash Command , Ġcmd : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġclient . rest Client . application Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Global Application Command ( application Id , Ġbuild Request ( command , Ġcmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠerrorHandler (" Unable Ġto Ġcreate Ġglobal Ġcommand : Ġ" Ġ+ Ġit . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Ġ{ ĠMono . empty () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmodify Global Command ( command : ĠSl ash Command , Ġcommand Id : ĠLong , Ġcmd : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġclient . rest Client . application Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. modify Global Application Command ( application Id , Ġcommand Id , Ġbuild Request ( command , Ġcmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠerrorHandler (" Unable Ġto Ġcreate Ġglobal Ġcommand : Ġ" Ġ+ Ġit . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Ġ{ ĠMono . empty () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Guild Command ( guild Id : ĠSnow flake , Ġcommand : ĠSl ash Command , Ġcmd : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġclient . rest Client . application Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Guild Application Command ( application Id , Ġguild Id . as Long (), Ġbuild Request ( command , Ġcmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠerrorHandler (" Unable Ġto Ġcreate Ġguild Ġcommand : Ġ" Ġ+ Ġit . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Ġ{ ĠMono . empty () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmodify Guild Command ( guild Id : ĠSnow flake , Ġcommand : ĠSl ash Command , Ġcommand Id : ĠLong , Ġcmd : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġclient . rest Client . application Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. modify Guild Application Command ( application Id , Ġguild Id . as Long (), Ġcommand Id , Ġbuild Request ( command , Ġcmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠerrorHandler (" Unable Ġto Ġcreate Ġguild Ġcommand : Ġ" Ġ+ Ġit . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Ġ{ ĠMono . empty () Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġequals ( data 1 : ĠApplication Command Data , Ġdata 2 : ĠApplication Command Data ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata 1 . name () Ġ== Ġdata 2 . name () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata 1 . description () Ġ== Ġdata 2 . description () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata 1 . application Id () Ġ== Ġdata 2 . application Id () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata 1 . type () Ġ== Ġdata 2 . type () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata 1 . options () Ġ== Ġdata 2 . options () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata 1 . default Permission () Ġ== Ġdata 2 . default Permission () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata 1 . id () Ġ== Ġdata 2 . id () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġglobal Command ( command : ĠSl ash Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( cmd Ġin Ġcommand . cmds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandlers [ cmd ] Ġ= Ġbuild Handler ( command , Ġcmd ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Command Ġ= Ġregistered Commands [ cmd ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Command Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! equals ( existing Command , Ġexisting Command . derive ( command ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Updating Ġglobal Ġcommand Ġ/ $ cmd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Global Command ( command , Ġexisting Command . id (). to Long (), Ġcmd ). subscribe Ġ{ ĠnewData Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Commands [ cmd ] Ġ= ĠnewData ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( debug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Global Ġcommand Ġ/ $ cmd Ġis Ġup Ġto Ġdate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( data Ġin Ġglobal Commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . name () Ġ== Ġcmd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Data Ġ= Ġdata . derive ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! equals ( data , Ġcommand Data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Updating Ġglobal Ġcommand Ġ/ $ cmd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Global Command ( command , Ġdata . id (). to Long (), Ġcmd ). subscribe Ġ{ ĠnewData Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Commands [ cmd ] Ġ= ĠnewData ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Global Ġcommand Ġ/ $ cmd Ġis Ġup Ġto Ġdate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Commands [ cmd ] Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Register ing Ġglobal Ġcommand Ġ/ $ cmd ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Global Command ( command , Ġcmd ). subscribe Ġ{ ĠnewData Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregistered Commands [ cmd ] Ġ= ĠnewData ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Handler ( command : ĠSl ash Command , Ġcmd : ĠString ): ĠSl ash CommandHandler Ġ= ĠSl ash CommandHandler ( responder Ġ= Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġsent Any Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠSl ash Command Based Context ( command , Ġcmd , Ġevent , Ġdefault Ep hemeral ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsent Any Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoptions Getter Ġ= ĠOptions Getter . of ( command , Ġctx , Ġevent ) ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! execute Options ( command , Ġctx , Ġoptions Getter , Ġcommand . options , Ġevent . options ) Ġ&& Ġ! command . execute ( command , Ġctx , Ġoptions Getter )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! sent Any ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Command Ġwas Ġnot Ġresolved !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. exception OrNull ()?. also Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throwable Handler . should Error ( throwable )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . message . reply Complex Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Ġ{ Ġdismiss Button () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed Ġ{ Ġthrowable Handler . generate Throwable ( this , Ġthrowable , Ġctx . user ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable 2 : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable 2 . add Sup pressed ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable 2 . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġauto Comp leter Ġ= Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġoptions Getter Ġ= ĠWeak Options Getter . of ( command , Ġevent ). as Suggestion ( event . command Name ) ĊĠĠĠĠĠĠĠ Ġvar Ġoptions : ĠList < Application Command Option Choice Data >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġsink Ġ= Ġobject Ġ: ĠSl ash Command Option Suggestion Sink Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsuggested : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġoptions Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuggest ( it : ĠIterable < Application Command Option Choice Data >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= Ġit . toList (). take ( 2 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! suggest Comp letions ( command , Ġoptions Getter , Ġcommand . options , Ġsink , Ġevent . focused Option ) Ġ&& Ġ!( command . suggest ( command , Ġoptions Getter , Ġsink ). let Ġ{ Ġsink . suggest ed Ġ})) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. exception OrNull ()?. printStackTrace () ĊĠĠĠĠĠĠĠ Ġif Ġ( sink . suggest ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . respond With Suggestions ( options !! ). subscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Request ( command : ĠSl ash Command , Ġcmd : ĠString ): ĠApplication Command Request Ġ= ĊĠĠĠĠĠĠĠ ĠApplication Command Request . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. name ( cmd . also Ġ{ Ġrequire ( it . toLowerCase () Ġ== Ġit Ġ&& Ġ"^ [ \\ w -_ ]+ \$ ". to Regex (). match Ent ire ( it ) Ġ!= Ġnull ) Ġ{ Ġ"$ it Ġis Ġnot Ġa Ġvalid Ġname " Ġ} Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. description ( command . description ( cmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addAll Options ( command . options . map ( Slash Command Option <* >:: to Data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun ĠApplication Command Data . derive ( command : ĠSl ash Command ): ĠApplication Command Data Ġ= ĊĠĠĠĠĠĠĠ Ġbuild Data ( command , Ġname (), Ġid (), Ġtype (), Ġapplication Id ()) ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Data ( command : ĠSl ash Command , Ġcmd : ĠString , Ġid : ĠString , Ġtype : ĠPossible < Int >, Ġapplication Id : ĠString ): ĠApplication Command Data Ġ= ĊĠĠĠĠĠĠĠ ĠApplication Command Data . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. id ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. type ( type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. application Id ( application Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. name ( cmd . also Ġ{ Ġrequire ( it . toLowerCase () Ġ== Ġit Ġ&& Ġ"^ [ \\ w -_ ]+ \$ ". to Regex (). match Ent ire ( it ) Ġ!= Ġnull ) Ġ{ Ġ"$ it Ġis Ġnot Ġa Ġvalid Ġname " Ġ} Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. description ( command . description ( cmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( command . options . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All Options ( command . options . map ( Slash Command Option <* >:: to Data )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. default Permission ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< T , ĠR > ĠIterable < T >. map First NotNull ( mapper : Ġ( T ) Ġ-> ĠR ?): ĠR ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapped Ġ= Ġmapper ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapped Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmapped ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Options ( ĊĠĠĠĠĠĠĠ Ġcommand : ĠSl ash Command , ĊĠĠĠĠĠĠĠ Ġctx : ĠCommand Context , ĊĠĠĠĠĠĠĠ Ġoptions Getter : ĠOptions Getter , ĊĠĠĠĠĠĠĠ Ġoptions : ĠList < Slash Command Option <* >>, ĊĠĠĠĠĠĠĠ Ġreceived : ĠList < Application Command Interaction Option >, ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġreceived . any Ġ{ Ġreceived Option Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . filter Ġ{ Ġit . name ( ctx . cmd ) Ġ== Ġreceived Option . name Ġ}. any Ġ{ Ġapplicable Option Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( applic able Option Ġis ĠNested Slash Command Option ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Options ( command , Ġctx , Ġoptions Getter , Ġapplicable Option . options , Ġreceived Option . options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġapplicable Option . execute ( command , Ġctx , Ġoptions Getter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplicable Option . execute ( command , Ġctx , Ġoptions Getter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsuggest Comp letions ( ĊĠĠĠĠĠĠĠ Ġcommand : ĠSl ash Command , ĊĠĠĠĠĠĠĠ Ġoptions Getter : ĠSuggest ion Options Getter , ĊĠĠĠĠĠĠĠ Ġoptions : ĠList < Slash Command Option <* >>, ĊĠĠĠĠĠĠĠ Ġsink : ĠSl ash Command Option Suggestion Sink , ĊĠĠĠĠĠĠĠ Ġfocused : ĠApplication Command Interaction Option , ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . any Ġ{ Ġapplicable Option Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( applic able Option Ġis ĠNested Slash Command Option ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( suggest Comp letions ( command , Ġoptions Getter , Ġapplicable Option . options , Ġsink , Ġfocused )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( focused . name Ġ== Ġapplicable Option . name ( options Getter . cmd )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplicable Option . suggest ( command , Ġoptions Getter , Ġsink ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsink . suggest ed ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsink . suggest ed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Global Command ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġglobal Commands . first OrNull Ġ{ Ġit . name () Ġ== Ġname . toLowerCase () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġregistered Commands [ name . toLowerCase ()] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġprintln (" Deleting Ġglobal Ġcommand Ġ/ ${ cmd . name () }") ĊĠĠĠĠĠĠĠ Ġclient . rest Client . application Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete Global Application Command ( application Id , Ġcmd . id (). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠerrorHandler (" Unable Ġto Ġremove Ġglobal Ġcommand : Ġ" Ġ+ Ġit . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Ġ{ ĠMono . empty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠ Ġglobal Commands . remove If Ġ{ Ġname . toLowerCase () Ġ== Ġit . name () Ġ} ĊĠĠĠĠĠĠĠ Ġregistered Commands . remove ( name . toLowerCase ()) ĊĠĠĠĠĠĠĠ Ġhandlers . remove ( name . toLowerCase ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Guild Command ( guild Id : ĠSnow flake , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġguild Commands [ guild Id ]?. first OrNull Ġ{ Ġit . name () Ġ== Ġname . toLowerCase () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġregistered Guild Commands [ Guild Command Key ( guild Id , Ġname . toLowerCase ()) ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġprintln (" Deleting Ġguild Ġ(${ guild Id . asString () }) Ġcommand Ġ/ ${ cmd . name () }") ĊĠĠĠĠĠĠĠ Ġclient . rest Client . application Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete Guild Application Command ( application Id , Ġguild Id . as Long (), Ġcmd . id (). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠerrorHandler (" Unable Ġto Ġremove Ġguild Ġcommand : Ġ" Ġ+ Ġit . message ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Resume Ġ{ ĠMono . empty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠ Ġguild Commands [ guild Id ]?. remove If Ġ{ Ġname . toLowerCase () Ġ== Ġit . name () Ġ} ĊĠĠĠĠĠĠĠ Ġregistered Guild Commands . remove ( Guild Command Key ( guild Id , Ġname . toLowerCase ())) ĊĠĠĠĠĠĠĠ Ġguild Handlers . remove ( Guild Command Key ( guild Id , Ġname . toLowerCase ())) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠSl ash Command Option Suggestion Sink Ġ{ ĊĠĠĠ Ġval Ġsuggested : ĠBoolean ĊĠĠĠ Ġfun Ġsuggest ( options : ĠIterable < Application Command Option Choice Data >) ĊĊĠĠĠ Ġfun Ġchoice ( name : ĠString , Ġvalue : ĠAny ): ĠApplication Command Option Choice Data Ġ= ĠApplication Command Option Choice Data . builder () ĊĠĠĠĠĠĠĠ Ġ. name ( name ) ĊĠĠĠĠĠĠĠ Ġ. value ( value ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġfun Ġchoice ( value : ĠAny ): ĠApplication Command Option Choice Data Ġ= Ġchoice ( value . toString (), Ġvalue ) Ċ } Ċ Ċ interface ĠSl ash Command Ġ: ĠSl ash Command Executor , ĠSl ash Command Suggest er , ĠCommand Option Properties Ġ{ ĊĠĠĠ Ġval Ġcmds : ĠList < String > ĊĠĠĠ Ġval Ġdescription : Ġ( cmd : ĠString ) Ġ-> ĠString ĊĠĠĠ Ġval Ġoptions : ĠList < Slash Command Option <* >> ĊĠĠĠ Ġval Ġexecutor : ĠSl ash Command Executor ? ĊĠĠĠ Ġval Ġsuggest er : ĠSl ash Command Suggest er ? ĊĠĠĠ Ġoverride Ġfun Ġexecute ( command : ĠSl ash Command , Ġctx : ĠCommand Context , Ġoptions Getter : ĠOptions Getter ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġexecutor ?. execute ( command , Ġctx , Ġoptions Getter ) Ġ== Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġsuggest ( command : ĠSl ash Command , Ġoptions Getter : ĠSuggest ion Options Getter , Ġsink : ĠSl ash Command Option Suggestion Sink ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuggest er ?. suggest ( command , Ġoptions Getter , Ġsink ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġusage ( ctx : ĠCommand Context ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġusage ( ctx . prefix , Ġctx . cmd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġusage ( prefix : ĠString , Ġcmd : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠSub Group Command Option ( cmd , Ġ"", ĠlistOf ()) ĊĠĠĠĠĠĠĠ Ġoptions . forEach ( root :: arg ) ĊĠĠĠĠĠĠĠ Ġexecutor ?. also ( root :: execute ) ĊĠĠĠĠĠĠĠ Ġval Ġtree Ġ= Ġmutable ListOf < Slash Command Option <* >>() ĊĠĠĠĠĠĠĠ Ġroot . execution Tree ( tree :: add ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ" ``` ${ tree . join ToString ("\ n ") Ġ{ Ġprefix Ġ+ Ġit . to Readable Option ( cmd ) Ġ}} ``` " ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠSl ash Command Option <* >. execution Tree ( submit ter : Ġ( Slash Command Option <* >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( this Ġis ĠNested Slash Command Option ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . forEach Ġ{ Ġit . execution Tree ( submit ter ) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( this Ġis ĠAbstract Slash Command Option Ġ&& Ġexecutor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubmit ter ( this ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠCommand Option Properties . to Readable Option ( cmd : ĠString ): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠ Ġparents . forEach Ġ{ Ġparent Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġthis @ to Readable Option ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( parent . name ( cmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġappend ( name ( cmd )) ĊĠĠĠ Ġif Ġ( this @ to Readable Option Ġis ĠNested Slash Command Option ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . forEach Ġ{ Ġoption Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( if Ġ( option . required ) Ġ"< " Ġelse Ġ"[ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( option . name ( cmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( if Ġ( option . required ) Ġ" >" Ġelse Ġ"] ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠHas Parents Ġ{ ĊĠĠĠ Ġval Ġparents : ĠList < Command Option Properties > Ċ } Ċ Ċ interface ĠHas Name Ġ{ ĊĠĠĠ Ġfun Ġname ( cmd : ĠString ): ĠString Ċ } Ċ Ċ interface ĠCommand Option Properties Ġ: ĠHas Parents , ĠHas Name Ġ{ ĊĠĠĠ Ġval Ġrequired : ĠBoolean Ċ } Ċ Ċ interface ĠSimple Command Option Meta < T > Ġ: ĠCommand Option Meta < T , ĠUnit > Ġ{ ĊĠĠĠ Ġfun Ġmap Value ( value : ĠAny ?): ĠT ? Ġ= Ġvalue Ġas ? ĠT ĊĠĠĠ Ġoverride Ġfun Ġmap Value ( value : ĠAny ?, Ġextra : ĠUnit ): ĠT ? Ġ= Ġmap Value ( value ) Ċ } Ċ Ċ interface ĠCommand Option Meta < T , ĠR > Ġ: ĠCommand Option Properties Ġ{ ĊĠĠĠ Ġval Ġdescription : ĠString ĊĠĠĠ Ġfun Ġmap Value ( value : ĠAny ?, Ġextra : ĠR ): ĠT ? ĊĠĠĠ Ġfun Ġid ( cmd : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġ( parents . as Sequence () Ġ+ Ġsequence Of ( this )). join ToString (".") Ġ{ Ġit . name ( cmd ) Ġ} Ċ } Ċ Ċ interface ĠSl ash Command Option Accept or Ġ: ĠHas Parents Ġ{ ĊĠĠĠ Ġfun Ġarg ( option : ĠSl ash Command Option <* >) Ċ } Ċ Ċ interface ĠSl ash Command Executor Accept or Ġ{ ĊĠĠĠ Ġfun Ġexecute ( executor : ĠSl ash Command Executor ) Ċ } Ċ Ċ interface ĠSl ash Command Suggest er Accept or Ġ{ ĊĠĠĠ Ġfun Ġsuggest ( suggest er : ĠSl ash Command Suggest er ) Ċ } Ċ Ċ interface ĠSl ash Command Builder Interface Ġ: ĠSl ash Command Option Accept or , ĠSl ash Command Executor Accept or Ċ Ċ class ĠSl ash Command Builder ( ĊĠĠĠ Ġoverride Ġval Ġdescription : Ġ( cmd : ĠString ) Ġ-> ĠString , ĊĠĠĠ Ġoverride Ġval Ġoptions : ĠMutable List < Slash Command Option <* >> Ġ= Ġmutable ListOf (), ĊĠĠĠ Ġoverride Ġval Ġcmds : ĠMutable List < String > Ġ= Ġmutable ListOf (), ĊĠĠĠ Ġoverride Ġvar Ġexecutor : ĠSl ash Command Executor ? Ġ= Ġnull , ĊĠĠĠ Ġoverride Ġvar Ġsuggest er : ĠSl ash Command Suggest er ? Ġ= Ġnull , Ċ ) Ġ: ĠSl ash Command Builder Interface , ĠSl ash Command Ġ{ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġdescription : ĠString , ĊĠĠĠĠĠĠĠ Ġoptions : ĠMutable List < Slash Command Option <* >> Ġ= Ġmutable ListOf (), ĊĠĠĠĠĠĠĠ Ġcmds : ĠMutable List < String > Ġ= Ġmutable ListOf (), ĊĠĠĠĠĠĠĠ Ġexecutor : ĠSl ash Command Executor ? Ġ= Ġnull , ĊĠĠĠ Ġ) Ġ: Ġthis ({ Ġdescription Ġ}, Ġoptions , Ġcmds , Ġexecutor ) ĊĊĠĠĠ Ġoverride Ġfun Ġname ( cmd : ĠString ): ĠString Ġ= Ġcmd ĊĠĠĠ Ġoverride Ġval Ġparents : ĠList < Command Option Properties > Ġ= ĠlistOf ( this ) ĊĠĠĠ Ġoverride Ġval Ġrequired : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġcmd ( l : ĠString ) Ġ= Ġapply Ġ{ Ġcmds . add ( l ) Ġ} ĊĠĠĠ Ġfun Ġcmd ( var arg Ġl : ĠString ) Ġ= Ġapply Ġ{ Ġcmds . addAll ( l ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġarg ( option : ĠSl ash Command Option <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . add ( option ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( executor : ĠSl ash Command Executor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . executor Ġ= Ġexecutor ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠNested Slash Command Option Ġ: ĠSl ash Command Option Accept or , ĠSl ash Command Builder Interface Ġ{ ĊĠĠĠ Ġval Ġoptions : ĠMutable List < Slash Command Option <* >> ĊĊĠĠĠ Ġoverride Ġfun Ġarg ( option : ĠSl ash Command Option <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġoptions . add ( option ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġinterface ĠSl ash Command Executor Ġ{ ĊĠĠĠ Ġfun Ġexecute ( command : ĠSl ash Command , Ġctx : ĠCommand Context , Ġoptions Getter : ĠOptions Getter ): ĠBoolean Ċ } Ċ Ċ fun Ġinterface ĠSl ash Command Suggest er Ġ{ ĊĠĠĠ Ġfun Ġsuggest ( command : ĠSl ash Command , Ġoptions Getter : ĠSuggest ion Options Getter , Ġsink : ĠSl ash Command Option Suggestion Sink ) Ċ } Ċ Ċ interface ĠWeak Options Getter Ġ{ ĊĠĠĠ Ġval Ġslash Command : ĠSl ash Command ĊĠĠĠ Ġfun Ġget Option ( name : ĠString ): ĠWeak Options Getter ? ĊĊĠĠĠ Ġval Ġraw : ĠString ? ĊĠĠĠ Ġval Ġvalue : ĠAny ? ĊĠĠĠ Ġfun Ġas String (): ĠString Ġ= Ġvalue Ġas ĠString ĊĠĠĠ Ġfun Ġas Boolean (): ĠBoolean Ġ= Ġvalue Ġas ĠBoolean ĊĠĠĠ Ġfun Ġas Long (): ĠLong Ġ= Ġvalue Ġas ĠLong ĊĠĠĠ Ġfun Ġas Snow flake (): ĠSnow flake Ġ= Ġvalue Ġas ĠSnow flake ĊĠĠĠ Ġfun Ġas User (): ĠUser Ġ= Ġvalue Ġas ĠUser ĊĠĠĠ Ġfun Ġas Role (): ĠRole Ġ= Ġvalue Ġas ĠRole ĊĠĠĠ Ġfun Ġas Channel (): ĠChannel Ġ= Ġvalue Ġas ĠChannel ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġof ( slash Command : ĠSl ash Command , Ġevent : ĠChat Input Interaction Event ): ĠWeak Options Getter Ġ= Ġobject Ġ: ĠWeak Options Getter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġslash Command : ĠSl ash Command ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġslash Command ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠWeak Options Getter ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . getOption ( name ). get OrNull ()?. let Ġ{ Ġof ( slash Command , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġraw : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( slash Command : ĠSl ash Command , Ġevent : ĠChat Input Auto Complete Event ): ĠWeak Options Getter Ġ= Ġobject Ġ: ĠWeak Options Getter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġslash Command : ĠSl ash Command ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġslash Command ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠWeak Options Getter ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . getOption ( name ). get OrNull ()?. let Ġ{ Ġof ( slash Command , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġraw : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( slash Command : ĠSl ash Command , Ġoption : ĠApplication Command Interaction Option ): ĠWeak Options Getter Ġ= Ġobject Ġ: ĠWeak Options Getter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġslash Command : ĠSl ash Command ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġslash Command ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠWeak Options Getter ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption . getOption ( name ). get OrNull ()?. let Ġ{ Ġof ( slash Command , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġraw : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġoption . value . get OrNull ()?. raw ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( option . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING Ġ-> Ġoption . value . get OrNull ()?. asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINTEGER Ġ-> Ġoption . value . get OrNull ()?. as Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBOOLEAN Ġ-> Ġoption . value . get OrNull ()?. as Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUSER Ġ-> Ġoption . value . get OrNull ()?. as User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCHAN NEL Ġ-> Ġoption . value . get OrNull ()?. as Channel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠROLE Ġ-> Ġoption . value . get OrNull ()?. as Role () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ENT ION ABLE Ġ-> ĠTODO () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( slash Command : ĠSl ash Command , Ġvalue : ĠAny ?): ĠWeak Options Getter Ġ= Ġobject Ġ: ĠWeak Options Getter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġslash Command : ĠSl ash Command ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġslash Command ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠOptions Getter ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġraw : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠWeak Options Getter . as Strong ( ctx : ĠCommand Context ): ĠOptions Getter Ġ= Ġobject Ġ: ĠOptions Getter Ġ{ ĊĠĠĠ Ġoverride Ġval Ġctx : ĠCommand Context ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġctx ĊĊĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠOptions Getter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis @ as Strong . getOption ( name )?. as Strong ( ctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġslash Command : ĠSl ash Command ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ as Strong . slash Command ĊĊĠĠĠ Ġoverride Ġval Ġraw : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ as Strong . raw ĊĊĠĠĠ Ġoverride Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ as Strong . value Ċ } Ċ Ċ fun ĠWeak Options Getter . as Suggestion ( cmd : ĠString ): ĠSuggest ion Options Getter Ġ= Ġobject Ġ: ĠSuggest ion Options Getter Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcmd : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcmd ĊĊĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠSuggest ion Options Getter ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis @ as Suggestion . getOption ( name )?. as Suggestion ( cmd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġslash Command : ĠSl ash Command ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ as Suggestion . slash Command ĊĊĠĠĠ Ġoverride Ġval Ġraw : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ as Suggestion . raw ĊĊĠĠĠ Ġoverride Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ as Suggestion . value Ċ } Ċ Ċ interface ĠSuggest ion Options Getter Ġ: ĠWeak Options Getter Ġ{ ĊĠĠĠ Ġval Ġcmd : ĠString ĊĊĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠSuggest ion Options Getter ? Ċ } Ċ Ċ interface ĠOptions Getter Ġ: ĠSuggest ion Options Getter , ĠWeak Options Getter Ġ{ ĊĠĠĠ Ġval Ġctx : ĠCommand Context ĊĠĠĠ Ġoverride Ġval Ġcmd : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġctx . cmd ĊĊĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠOptions Getter ? ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( slash Command : ĠSl ash Command , Ġctx : ĠCommand Context , Ġevent : ĠChat Input Interaction Event ): ĠOptions Getter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeak Options Getter . of ( slash Command , Ġevent ). as Strong ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( slash Command : ĠSl ash Command , Ġctx : ĠCommand Context , Ġoption : ĠApplication Command Interaction Option ): ĠOptions Getter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeak Options Getter . of ( slash Command , Ġoption ). as Strong ( ctx ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġof ( slash Command : ĠSl ash Command , Ġctx : ĠCommand Context , Ġvalue : ĠAny ?): ĠOptions Getter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeak Options Getter . of ( slash Command , Ġvalue ). as Strong ( ctx ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠOptions Getter Builder ( override Ġval Ġslash Command : ĠSl ash Command , Ġoverride Ġval Ġctx : ĠCommand Context ) Ġ: ĠOptions Getter Ġ{ ĊĠĠĠ Ġval Ġmap Ġ= Ġmutable Map Of < String , ĠOptions Getter >() ĊĊĠĠĠ Ġoperator Ġfun Ġ< T > Ġset ( option : ĠSimple Command Option Meta < T >, Ġvalue : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap [ option . id ( ctx . cmd )] Ġ= ĠOptions Getter . of ( slash Command , Ġctx , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠOptions Getter Ġ= ĊĠĠĠĠĠĠĠ ĠInner Options Getter Builder ( name , Ġmap [ name ] Ġ?: Ġmap [" ${ ctx . cmd }. $ name "]) ĊĊĠĠĠ Ġoverride Ġval Ġraw : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĠĠĠ Ġoverride Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĊĠĠĠ Ġinner Ġclass ĠInner Options Getter Builder ( ĊĠĠĠĠĠĠĠ Ġval Ġparent : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġoptions : ĠOptions Getter ?, ĊĠĠĠ Ġ) Ġ: ĠOptions Getter Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġslash Command : ĠSl ash Command ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ Options Getter Builder . slash Command ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġctx : ĠCommand Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis @ Options Getter Builder . ctx ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Option ( name : ĠString ): ĠOptions Getter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInner Options Getter Builder ("$ parent .$ name ", Ġmap [" $ parent .$ name "] Ġ?: Ġmap [" ${ ctx . cmd }. $ parent .$ name "]) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġraw : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġoptions ?. raw ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġvalue : ĠAny ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġoptions ?. value ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T > ĠSuggest ion Options Getter . opt Nullable ( option : ĠSimple Command Option Meta < T >): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġopt Nullable ( cmd , Ġoption ) Ċ } Ċ Ċ fun Ġ< T , ĠR > ĠSuggest ion Options Getter . opt Nullable ( option : ĠCommand Option Meta < T , ĠR >, Ġextra : ĠR ): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġopt Nullable ( cmd , Ġoption , Ġextra ) Ċ } Ċ Ċ fun Ġ< T > ĠOptions Getter . opt ( option : ĠSimple Command Option Meta < T >): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġopt ( ctx . prefix , Ġctx . cmd , Ġoption ) Ċ } Ċ Ċ fun Ġ< T > ĠOptions Getter . opt Nullable ( option : ĠSimple Command Option Meta < T >): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġopt Nullable ( ctx . cmd , Ġoption ) Ċ } Ċ Ċ fun Ġ< T , ĠR > ĠOptions Getter . opt ( option : ĠCommand Option Meta < T , ĠR >, Ġextra : ĠR ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġopt ( ctx . prefix , Ġctx . cmd , Ġoption , Ġextra ) Ċ } Ċ Ċ fun Ġ< T , ĠR > ĠOptions Getter . opt Nullable ( option : ĠCommand Option Meta < T , ĠR >, Ġextra : ĠR ): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġopt Nullable ( ctx . cmd , Ġoption , Ġextra ) Ċ } Ċ Ċ fun Ġ< T > ĠWeak Options Getter . opt ( prefix : ĠString , Ġcmd : ĠString , Ġoption : ĠSimple Command Option Meta < T >): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġopt Nullable ( cmd , Ġoption ) Ġ?: Ġthrow ĠInvalidArgumentException (" Option Ġ\" ${ option . id ( cmd )} \" Ġis Ġrequired Ġbut Ġwas Ġnot Ġprovided !\ n Usage : Ġ${ slash Command . usage ( prefix , Ġcmd )} ") Ċ } Ċ Ċ fun Ġ< T > ĠWeak Options Getter . opt Nullable ( cmd : ĠString , Ġoption : ĠSimple Command Option Meta < T >): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġopt Nullable ( cmd , Ġoption , ĠUnit ) Ċ } Ċ Ċ fun Ġ< T , ĠR > ĠWeak Options Getter . opt ( prefix : ĠString , Ġcmd : ĠString , Ġoption : ĠCommand Option Meta < T , ĠR >, Ġextra : ĠR ): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġopt Nullable ( cmd , Ġoption , Ġextra ) Ġ?: Ġthrow ĠInvalidArgumentException (" Option Ġ\" ${ option . id ( cmd )} \" Ġis Ġrequired Ġbut Ġwas Ġnot Ġprovided !\ n Usage : Ġ${ slash Command . usage ( prefix , Ġcmd )} ") Ċ } Ċ Ċ fun Ġ< T , ĠR > ĠWeak Options Getter . opt Nullable ( cmd : ĠString , Ġoption : ĠCommand Option Meta < T , ĠR >, Ġextra : ĠR ): ĠT ? Ġ{ ĊĠĠĠ Ġvar Ġopt : ĠWeak Options Getter ? Ġ= Ġnull ĊĠĠĠ Ġ( option . parents Ġ+ Ġoption ). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġslash Command ) Ġreturn @ forEach ĊĠĠĠĠĠĠĠ Ġval Ġoptional Ġ= Ġif Ġ( opt Ġ== Ġnull ) Ġget Option ( it . name ( cmd )) ĊĠĠĠĠĠĠĠ Ġelse Ġopt !!. getOption ( it . name ( cmd )) ĊĠĠĠĠĠĠĠ Ġif Ġ( optional Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . required ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Failed Ġto Ġget Ġrequired Ġoption : Ġ" Ġ+ Ġit . name ( cmd )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoption . map Value ( null , Ġextra ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġopt Ġ= Ġoptional ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġoption . map Value ( opt ?. value , Ġextra ) Ċ } Ċ Ċ class ĠInvalidArgumentException Ġ: ĠRuntimeException Ġ{ ĊĠĠĠ Ġconstructor () Ġ: Ġsuper () ĊĠĠĠ Ġconstructor ( message : ĠString ?) Ġ: Ġsuper ( message ) ĊĠĠĠ Ġconstructor ( message : ĠString ?, Ġcause : ĠThrowable ?) Ġ: Ġsuper ( message , Ġcause ) ĊĠĠĠ Ġconstructor ( cause : ĠThrowable ?) Ġ: Ġsuper ( cause ) ĊĠĠĠ Ġconstructor ( message : ĠString ?, Ġcause : ĠThrowable ?, Ġenable Sup pression : ĠBoolean , Ġwritable StackTrace : ĠBoolean ) Ġ: Ġsuper ( message , Ġcause , Ġenable Sup pression , Ġwritable StackTrace ) Ċ }