package Ġnet . source bot . module . tags . command Ċ Ċ import Ġme . hw ig gy . kom mand er . arguments . Adapter Ċ import Ġme . hw ig gy . kom mand er . arguments . Arguments Ċ import Ġme . hw ig gy . kom mand er . arguments . Group Ċ import Ġme . hw ig gy . kom mand er . arguments . Syn opsis Ċ import Ġnet . dv 8 tion . j da . api . J DA Ċ import Ġnet . dv 8 tion . j da . api . Message Builder Ċ import Ġnet . dv 8 tion . j da . api . entities . Message Ċ import Ġnet . source bot . Source Ċ import Ġnet . source bot . api . command . Root Command Ċ import Ġnet . source bot . api . command . Source Command Ċ import Ġnet . source bot . api . response . Response Ċ import Ġnet . source bot . api . response . Standard ErrorResponse Ċ import Ġnet . source bot . api . response . Standard Info Response Ċ import Ġnet . source bot . api . response . Standard Success Response Ċ import Ġnet . source bot . module . tags . data . Tag Ċ import Ġnet . source bot . module . tags . data . Tag Handler Ċ import Ġjava . time . Instant Ċ Ċ class ĠTags Command ( ĊĠĠĠ Ġprivate Ġval Ġtag Handler : ĠTag Handler Ċ ) Ġ: ĠRoot Command () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" tags " ĊĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" Manage ĠTags ." ĊĠĠĠ Ġoverride Ġval Ġguild Only Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġval Ġaliases Ġ= ĠlistOf (" tag ") ĊĠĠĠ Ġoverride Ġval Ġpermission Ġ= Ġname ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Children ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags Create Command (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags Delete Command (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags Edit Command (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags Info Command (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags List Command (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags Raw Command () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTags Create Command Ġ: ĠBootstrap ( ĊĠĠĠĠĠĠĠ Ġ" create ", ĊĠĠĠĠĠĠĠ Ġ" Create Ġa Ġtag ." ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsyn opsis Ġ= ĠSyn opsis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq Param (" name ", Ġ" The Ġname Ġof Ġthe Ġtag Ġto Ġbe Ġcreated .", ĠAdapter . single ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq Param (" content ", Ġ" The Ġcontent Ġof Ġthe Ġcreated Ġtag .", ĠAdapter . sl ur p (" Ġ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( sender : ĠMessage , Ġarguments : ĠArguments . Processed ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Cache Ġ= Ġtag Handler [ sender . guild ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġarguments . required (" name ", Ġ" You Ġdid Ġnot Ġspecify Ġa Ġname Ġfor Ġthe Ġnew Ġtag !", ĠString :: toLowerCase ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Ġ= Ġtag Cache . getTag ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Ġ!= Ġnull ) Ġreturn ĠStandard ErrorResponse (" Duplicate ĠTag !", Ġ" A Ġtag Ġnamed Ġ`$ name ` Ġalready Ġexists !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġarguments . required < String >(" content ", Ġ" You Ġdid Ġnot Ġspecify Ġcontent Ġfor Ġthe Ġnew Ġtag !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Cache . create Tag ( name , Ġcontent , Ġsender . author . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStandard Success Response (" Tag ĠCreated !", Ġ" The Ġtag Ġnamed Ġ`$ name ` Ġhas Ġbeen Ġcreated !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTags Delete Command Ġ: ĠBootstrap ( ĊĠĠĠĠĠĠĠ Ġ" delete ", ĊĠĠĠĠĠĠĠ Ġ" Delete Ġa Ġtag ." ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsyn opsis Ġ= ĠSyn opsis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq Param (" name ", Ġ" The Ġname Ġof Ġthe Ġtag Ġto Ġdelete .", ĠAdapter . single ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( sender : ĠMessage , Ġarguments : ĠArguments . Processed ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Cache Ġ= Ġtag Handler [ sender . guild ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġarguments . required (" name ", Ġ" You Ġdid Ġnot Ġspecify Ġa Ġtag Ġto Ġdelete !", ĠString :: toLowerCase ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Cache . getTag ( name ) Ġ?: Ġreturn ĠNoSuch Tag Response ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Cache . delete Tag ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStandard Success Response (" Tag ĠDeleted !", Ġ" The Ġtag Ġnamed Ġ`$ name ` Ġhas Ġbeen Ġdeleted !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTags Edit Command Ġ: ĠBootstrap ( ĊĠĠĠĠĠĠĠ Ġ" edit ", ĊĠĠĠĠĠĠĠ Ġ" Edit Ġtag Ġproperties ." ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsyn opsis Ġ= ĠSyn opsis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq Param (" name ", Ġ" The Ġname Ġof Ġthe Ġtag Ġto Ġedit .", ĠAdapter . single ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq Group (" property ", Ġ" The Ġproperty Ġof Ġthe Ġtag Ġto Ġedit .", ĠGroup . Option . by Name < Tag Property >()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice ( Tag Property . CONTENT , Ġ" Mod ifies Ġthe Ġtag Ġcontent .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice ( Tag Property . CATEGORY , Ġ" Mod ifies Ġthe Ġtag Ġcategory .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchoice ( Tag Property . TYPE , Ġ" Mod ifies Ġthe Ġtag Ġtype .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( sender : ĠMessage , Ġarguments : ĠArguments . Processed ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Cache Ġ= Ġtag Handler [ sender . guild ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġarguments . required < String >(" name ", Ġ" You Ġdid Ġnot Ġspecify Ġa Ġtag Ġto Ġedit ! "). toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġtag Cache . getTag ( name ) Ġ?: Ġreturn ĠNoSuch Tag Response ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= Ġarguments . required < Tag Property >(" property ", Ġ" You Ġdid Ġnot Ġspecify Ġa Ġproperty Ġto Ġedit !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocessed Ġ= Ġproperty . syn opsis . process ( arguments . parent . slice ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalert Ġ= Ġproperty . applic ator ( tag , Ġprocessed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Cache . save Tag ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġalert ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTags Info Command Ġ: ĠBootstrap ( ĊĠĠĠĠĠĠĠ Ġ" info ", ĊĠĠĠĠĠĠĠ Ġ" Show Ġtag Ġinformation ." ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsyn opsis Ġ= ĠSyn opsis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq Param (" name ", Ġ" The Ġname Ġof Ġthe Ġtag Ġto Ġview Ġinfo Ġfor .", ĠAdapter . single ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( sender : ĠMessage , Ġarguments : ĠArguments . Processed ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Cache Ġ= Ġtag Handler [ sender . guild ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġarguments . required (" name ", Ġ" You Ġdid Ġnot Ġspecify Ġa Ġtag Ġto Ġshow Ġinfo Ġfor !", ĠString :: toLowerCase ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġtag Cache . getTag ( name ) Ġ?: Ġreturn ĠNoSuch Tag Response ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTag Info Response ( tag , Ġsender . j da ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTags List Command Ġ: ĠBootstrap ( ĊĠĠĠĠĠĠĠ Ġ" list ", ĊĠĠĠĠĠĠĠ Ġ" List Ġall Ġtags ." ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( sender : ĠMessage , Ġarguments : ĠArguments . Processed ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Cache Ġ= Ġtag Handler [ sender . guild ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġtag Cache . get Tags () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags . isEmpty ()) Ġreturn ĠStandard Info Response (" Tag ĠListing ", Ġ" There Ġare Ġcurrently Ġno Ġtags .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTag ListResponse ( tags . groupBy Ġ{ Ġit . category Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTags Raw Command Ġ: ĠBootstrap ( ĊĠĠĠĠĠĠĠ Ġ" raw ", Ġ" Show Ġthe Ġraw Ġcontent Ġof Ġa Ġtag ." ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġaliases Ġ= ĠlistOf (" source ") ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġsyn opsis Ġ= ĠSyn opsis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq Param (" tag ", Ġ" The Ġname Ġof Ġthe Ġtag Ġto Ġview Ġcontent Ġof .", ĠAdapter . single ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( sender : ĠMessage , Ġarguments : ĠArguments . Processed ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtagName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments . required (" tag ", Ġ" You Ġdid Ġnot Ġspecify Ġa Ġtag Ġto Ġview Ġcontent Ġof !", ĠString :: toLowerCase ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Cache Ġ= Ġtag Handler [ sender . guild ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġtag Cache . getTag ( tagName ) Ġ?: Ġreturn ĠNoSuch Tag Response ( tagName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġtag . content . replace (" ``` ", Ġ"` \ u 2 0 0 b `` ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse Ġ{ ĠMessage Builder (" ``` markdown \ n $ content \ n ``` "). build () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠNoSuch Tag Response ( name : ĠString ) Ġ: ĊĠĠĠĠĠĠĠ ĠStandard ErrorResponse (" Invalid ĠTag !", Ġ" There Ġis Ġno Ġtag Ġnamed Ġ`$ name ` !") ĊĊĠĠĠ Ġprivate Ġclass ĠTag Info Response ( tag : ĠTag , Ġj da : ĠJ DA ) Ġ: ĠStandard Info Response ( ĊĠĠĠĠĠĠĠ Ġ" Tag ĠInformation ", Ġ" Information Ġfor Ġtag Ġ`${ tag . name }` :" ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator User Ġ= Ġj da . getUser ById ( tag . creator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator Ġ= Ġif Ġ( creator User Ġ== Ġnull ) Ġ" Unknown " Ġelse ĠString . format ("% # s ", Ġcreator User ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field (" Creator ", Ġcreator , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= ĠInstant . of Epoch Milli ( tag . created ). at Zone ( Source . TIME _ ZONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Ġ= ĠSource . DATE _ TIME _ FORMAT . format ( created ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field (" Created ", Ġformatted , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field (" Category ", Ġtag . category , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field (" Uses ", Ġtag . uses . toString (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTag ListResponse ( grouped : ĠMap < String , ĠList < Tag >>) Ġ: ĠStandard Info Response (" Tag ĠListing ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgrouped . forEach Ġ{ Ġ( k , Ġv ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġv . join ToString (",") Ġ{ Ġ"` ${ it . name }` " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field ( k , Ġlist , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġabstract Ġclass ĠBootstrap ( ĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġval Ġdescription : ĠString ĊĠĠĠ Ġ) Ġ: ĠSource Command () Ġ{ ĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġval Ġpermission Ġ= Ġ" tags .$ name " ĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġval Ġguild Only Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠTag Property ( ĊĠĠĠ Ġoverride Ġval Ġsyn opsis Name : ĠString , ĊĠĠĠ Ġval Ġsyn opsis : ĠSyn opsis , ĊĠĠĠ Ġval Ġapplic ator : Ġ( Tag , ĠArguments . Processed ) Ġ-> ĠResponse Ċ ) Ġ: ĠGroup . Option Ġ{ ĊĠĠĠ ĠC ATEG ORY (" category ", ĠSyn opsis Ġ{ ĊĠĠĠĠĠĠĠ Ġreq Param (" category ", Ġ" The Ġnew Ġcategory Ġfor Ġthis Ġtag .", ĠAdapter . single ()) ĊĠĠĠ Ġ}, Ġ{ Ġtag , Ġargs Ġ-> ĊĠĠĠĠĠĠĠ Ġtag . category Ġ= Ġargs . required (" category ", Ġ" You Ġdid Ġnot Ġspecify Ġa Ġnew Ġtag Ġcategory !") ĊĠĠĠĠĠĠĠ ĠStandard Success Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Category ĠUpdated !", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġtag Ġ`${ tag . name }` Ġnow Ġbelongs Ġto Ġcategory Ġ`${ tag . category }` !" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}), ĊĠĠĠ ĠCONTENT (" content ", ĠSyn opsis Ġ{ ĊĠĠĠĠĠĠĠ Ġreq Param (" content ", Ġ" The Ġnew Ġcontent Ġfor Ġthis Ġtag .", ĠAdapter . sl ur p (" Ġ")) ĊĠĠĠ Ġ}, Ġ{ Ġtag , Ġargs Ġ-> ĊĠĠĠĠĠĠĠ Ġtag . content Ġ= Ġargs . required (" content ", Ġ" You Ġdid Ġnot Ġspecify Ġnew Ġtag Ġcontent !") ĊĠĠĠĠĠĠĠ ĠStandard Success Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Content ĠUpdated !", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Successfully Ġchanged Ġthe Ġcontent Ġfor Ġtag Ġ`${ tag . name }` !" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}), ĊĠĠĠ ĠTYPE (" type ", ĠSyn opsis Ġ{ ĊĠĠĠĠĠĠĠ Ġreq Group (" type ", Ġ" The Ġnew Ġtype Ġfor Ġthis Ġtag .", ĠGroup . Option . by Name < Tag . Type >()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchoice ( Tag . Type . EMB ED , Ġ" R enders Ġthe Ġtag Ġinside Ġan Ġembed .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchoice ( Tag . Type . TEXT , Ġ" R enders Ġthe Ġtag Ġas Ġplain Ġtext .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġ{ Ġtag , Ġargs Ġ-> ĊĠĠĠĠĠĠĠ Ġtag . type Ġ= Ġargs . required < Tag . Type >(" type ", Ġ" You Ġdid Ġnot Ġspecify Ġa Ġnew Ġtag Ġtype !") ĊĠĠĠĠĠĠĠ ĠStandard Success Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Type ĠUpdated !", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġtype Ġof Ġtag Ġ`${ tag . name }` Ġis Ġnow : Ġ${ tag . type . name . toLowerCase ()} !" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}) Ċ }