package Ġorg . sam ox ive . safety j im . discord . commands Ċ Ċ import Ġjava . awt . Color Ċ import Ġjava . util .* Ċ import Ġnet . dv 8 tion . j da . api . Embed Builder Ċ import Ġnet . dv 8 tion . j da . api . Permission Ċ import Ġnet . dv 8 tion . j da . api . events . message . guild . Guild Message Received Event Ċ import Ġorg . sam ox ive . safety j im . database . Settings Entity Ċ import Ġorg . sam ox ive . safety j im . database . Tag Entity Ċ import Ġorg . sam ox ive . safety j im . database . Tags Table Ċ import Ġorg . sam ox ive . safety j im . discord .* Ċ Ċ class ĠTag Ġ: ĠCommand () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġusage s Ġ= ĠarrayOf (" tag Ġlist Ġ- ĠShows Ġall Ġtags Ġand Ġresponses Ġto Ġuser ", Ġ" tag Ġ< name > Ġ- ĠRes pon ds Ġwith Ġre ponse Ġof Ġthe Ġgiven Ġtag ", Ġ" tag Ġadd Ġ< name > Ġ< response > Ġ- ĠAdds Ġa Ġtag Ġwith Ġthe Ġgiven Ġname Ġand Ġresponse ", Ġ" tag Ġedit Ġ< name > Ġ< response > Ġ- ĠChanges Ġresponse Ġof Ġtag Ġwith Ġgiven Ġname ", Ġ" tag Ġremove Ġ< name > Ġ- ĠDeletes Ġtag Ġwith Ġthe Ġgiven Ġname ") ĊĠĠĠ Ġprivate Ġval Ġsub commands Ġ= ĠarrayOf (" list ", Ġ" add ", Ġ" edit ", Ġ" remove ") ĊĊĠĠĠ Ġprivate Ġfun Ġis Sub command ( s : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( sub command Ġin Ġsub commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Ġ== Ġsub command ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdisplay Tags ( event : ĠGuild Message Received Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshard Ġ= Ġevent . j da ĊĠĠĠĠĠĠĠ Ġval Ġguild Ġ= Ġevent . guild ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġevent . channel ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġevent . message ĊĊĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= ĠTags Table . fetch Guild Tags ( guild ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( records . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . try SendMessage (" No Ġtags Ġhave Ġbeen Ġadded Ġyet !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtag String Ġ= ĠString Join er ("\ n ") ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( record Ġin Ġrecords ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag String . add ("\ u 2 0 2 2 Ġ`${ record . name }` ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġembed Ġ= ĠEmbed Builder () ĊĠĠĠĠĠĠĠ Ġembed . set Author (" Safety ĠJim ", Ġnull , Ġshard . self User . avatar Url ) ĊĠĠĠĠĠĠĠ Ġembed . addField (" List Ġof Ġtags ", Ġtruncate For Embed ( tag String . toString ()), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġembed . setColor ( Color ( 0 x 4 2 8 6 F 4 )) ĊĊĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠĠĠĠĠ Ġchannel . try SendMessage ( embed . build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġadd Tag ( event : ĠGuild Message Received Event , Ġmessage Iterator : ĠScanner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġguild Ġ= Ġevent . guild ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġevent . message ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! message Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Please Ġprovide Ġa Ġtag Ġname Ġand Ġa Ġresponse Ġto Ġcreate Ġa Ġnew Ġtag !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠtagName Ġ= Ġmessage Iterator . next () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Sub command ( tagName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" You Ġcan 't Ġcreate Ġa Ġtag Ġwith Ġthe Ġsame Ġname Ġas Ġa Ġsub command !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmessage Iterator . seek ToEnd () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Empty Ġresponses Ġaren 't Ġallowed !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTags Table . insert Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTag Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild Id Ġ= Ġguild . id Long , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠtagName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Tag Ġ`$ tagName ` Ġalready Ġexists !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġedit Tag ( event : ĠGuild Message Received Event , Ġmessage Iterator : ĠScanner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġguild Ġ= Ġevent . guild ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġevent . message ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! message Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Please Ġprovide Ġa Ġtag Ġname Ġand Ġa Ġresponse Ġto Ġedit Ġtags !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠtagName Ġ= Ġmessage Iterator . next () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmessage Iterator . seek ToEnd () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Empty Ġresponses Ġaren 't Ġallowed !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= ĠTags Table . fetch Tag ByName ( guild , ĠtagName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( record Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Tag Ġ`$ tagName ` Ġdoes Ġnot Ġexist !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTags Table . update Tag ( record . copy ( response Ġ= Ġresponse )) ĊĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdelete Tag ( event : ĠGuild Message Received Event , Ġmessage Iterator : ĠScanner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġguild Ġ= Ġevent . guild ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġevent . message ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! message Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Please Ġprovide Ġa Ġtag Ġname Ġand Ġa Ġresponse Ġto Ġdelete Ġtags !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠtagName Ġ= Ġmessage Iterator . next () ĊĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= ĠTags Table . fetch Tag ByName ( guild , ĠtagName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( record Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Tag Ġ`$ tagName ` Ġdoes Ġnot Ġexist !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTags Table . delete Tag ( record ) ĊĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrun ( bot : ĠDiscord Bot , Ġevent : ĠGuild Message Received Event , Ġsettings : ĠSettings Entity , Ġargs : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Iterator Ġ= ĠScanner ( args ) ĊĠĠĠĠĠĠĠ Ġval Ġguild Ġ= Ġevent . guild ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġevent . message ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġevent . channel ĊĠĠĠĠĠĠĠ Ġval Ġmember Ġ= Ġevent . member !! ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! message Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Or Tag Ġ= Ġmessage Iterator . next () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Sub command ( command Or Tag )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( command Or Tag Ġ== Ġ" list ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Tags ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Member Per mitted Ġ= Ġif Ġ( settings . mods Can Edit Tags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember . is Staff () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember . has Permission ( Permission . ADMIN ISTR ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Member Per mitted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" You Ġdon 't Ġhave Ġenough Ġpermissions Ġto Ġuse Ġthis Ġcommand !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( command Or Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" add " Ġ-> Ġadd Tag ( event , Ġmessage Iterator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" edit " Ġ-> Ġedit Tag ( event , Ġmessage Iterator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" remove " Ġ-> Ġdelete Tag ( event , Ġmessage Iterator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= ĠTags Table . fetch Tag ByName ( guild , Ġcommand Or Tag ) ĊĠĠĠĠĠĠĠ Ġif Ġ( record Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Could Ġnot Ġfind Ġa Ġtag Ġwith Ġthat Ġname !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠĠĠĠĠ Ġchannel . try SendMessage ( record . response ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ