package Ġorg . sam ox ive . safety j im . discord . commands Ċ Ċ import Ġnet . dv 8 tion . j da . api . Embed Builder Ċ import Ġnet . dv 8 tion . j da . api . events . message . guild . Guild Message Received Event Ċ import Ġorg . sam ox ive . safety j im . database . Roles Table Ċ import Ġorg . sam ox ive . safety j im . database . Settings Entity Ċ import Ġorg . sam ox ive . safety j im . discord .* Ċ import Ġjava . awt . Color Ċ import Ġjava . util .* Ċ Ċ class ĠI am Ġ: ĠCommand () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġusage s Ġ= ĠarrayOf (" iam Ġ< role Name > Ġ- Ġself Ġassigns Ġspecified Ġrole , Ġremoves Ġrole Ġif Ġit Ġis Ġalready Ġassigned ", Ġ" iam Ġlist Ġ- Ġlists Ġavailable Ġself - assign able Ġroles ") ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrun ( bot : ĠDiscord Bot , Ġevent : ĠGuild Message Received Event , Ġsettings : ĠSettings Entity , Ġargs : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Iterator Ġ= ĠScanner ( args ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmember Ġ= Ġevent . member !! ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġevent . message ĊĠĠĠĠĠĠĠ Ġval Ġguild Ġ= Ġevent . guild ĊĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġevent . channel ĊĊĠĠĠĠĠĠĠ Ġval Ġrole Name Ġ= Ġmessage Iterator . seek ToEnd () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. lowercase () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( role Name Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( role Name Ġ== Ġ" list ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroles Ġ= ĠRoles Table . fetch Guild Roles ( guild ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( roles . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . try SendMessage (" No Ġself - assign able Ġroles Ġhave Ġbeen Ġadded Ġyet !", Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroles Text Ġ= Ġroles . map NotNull Ġ{ Ġguild . get Role ById ( it . role Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") Ġ{ Ġ"\ u 2 0 2 2 Ġ`${ it . name }` " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġembed Ġ= ĠEmbed Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġembed . set Author (" Safety ĠJim ", Ġnull , Ġevent . j da . self User . avatar Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġembed . addField (" List Ġof Ġself - assign able Ġroles ", Ġtruncate For Embed ( roles Text ), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġembed . setColor ( Color ( 0 x 4 2 8 6 F 4 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . try SendMessage ( embed . build (), Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmatching Roles Ġ= Ġguild . roles ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġrole Ġ-> Ġrole . name . lowercase () Ġ== Ġrole Name Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( matching Roles . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Could Ġnot Ġfind Ġa Ġrole Ġwith Ġspecified Ġname !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmatched Role Ġ= Ġmatching Roles [ 0 ] ĊĠĠĠĠĠĠĠ Ġif Ġ(! Roles Table . is Self Assignable ( guild , Ġmatched Role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" This Ġrole Ġis Ġnot Ġself - assign able !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( member . roles . find Ġ{ Ġit Ġ== Ġmatched Role Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild . remove Role From Member ( member , Ġmatched Role ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Could Ġnot Ġremove Ġspecified Ġrole . ĠDo ĠI Ġhave Ġenough Ġpermissions ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild . add Role To Member ( member , Ġmatched Role ). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . success React () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . fail Message (" Could Ġnot Ġassign Ġspecified Ġrole . ĠDo ĠI Ġhave Ġenough Ġpermissions ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ