package Ġit . coding b unk er . t bs . feature . man ag ment . route Ċ Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . auth .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . locations .* Ċ import Ġio . ktor . locations . post Ċ import Ġio . ktor . locations . put Ċ import Ġio . ktor . request .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġio . ktor . util .* Ċ import Ġio . ktor . util . pipeline .* Ċ import Ġit . coding b unk er . t bs . common . Constants Ċ import Ġit . coding b unk er . t bs . common . Constants . Session . LOGIN _ SESSION _ USER Ċ import Ġit . coding b unk er . t bs . common . extension . on Failure Ċ import Ġit . coding b unk er . t bs . common . extension . on Success Ċ import Ġit . coding b unk er . t bs . common . feature . with Any Role Ċ import Ġit . coding b unk er . t bs . common . model . response . Exception Response Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . model . bot . Bot Id Key DTO Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . model . bot . request . Bot CreateRequest Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . repository . Bot Repository Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . route . html . Bot Settings Page Constant . FORM _ BOT _ NAME _ ID Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . route . html . Bot Settings Page Constant . FORM _ BOT _ PERMISSION _ ID Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . route . html . getAll Bot Html Page Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . route . html . get Configure New Bot Html Page Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . route . html . show Bot Configuration Result Html Page Ċ import Ġit . coding b unk er . t bs . feature . man ag ment . table . Role Type Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġorg . k oin . ktor . ext . inject Ċ Ċ @ Location ("${ Constants . Url . BASE _ API _ URL }/ man ag ment / bot ") Ċ class ĠBot Man ag ment Route Ġ{ ĊĊĠĠĠ Ġ@ Location ("/ edit ") ĊĠĠĠ Ġclass ĠEdit ( val Ġparent : ĠBot Man ag ment Route ) ĊĊĠĠĠ Ġ@ Location ("/ { bot Id }") ĊĠĠĠ Ġclass ĠBot Man ag ment Route Id ( val Ġparent : ĠBot Man ag ment Route , Ġval Ġbot Id : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Location ("/ delete ") ĊĠĠĠĠĠĠĠ Ġclass ĠDelete ( val Ġparent : ĠBot Man ag ment Route ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Location ("/ settings ") ĊĠĠĠ Ġclass ĠSettings ( val Ġparent : ĠBot Man ag ment Route ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Location ("/ create ") ĊĠĠĠĠĠĠĠ Ġclass ĠCreate ( val Ġparent : ĠSettings ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠApplication . bot Man ag ment Routes ( test Or Debug : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĊĠĠĠ Ġval Ġbot Repository Ġby Ġinject < Bot Repository >() ĊĠĠĠ Ġval Ġbot Man ag ment Controller Ġby Ġinject < Bot Man ag ment Controller >() ĊĊĠĠĠ Ġrouting Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( test Or Debug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . log . info ( it . build Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġauthenticate ( LOGIN _ SESSION _ USER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Any Role ( Role Type . ADMIN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput < Bot Man ag ment Route . Edit > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiscord Guild Ġ= Ġcall . receive < Bot CreateRequest >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( discord Guild . role List . isEmpty () Ġ|| Ġdiscord Guild . bot Name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ put ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbot Repository . generate Bot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiscord Guild . bot Name , Ġdiscord Guild . role List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttpStatusCode . Created , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBot Id Key DTO ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . id , Ġresult . bot Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete < Bot Man ag ment Route . Bot Man ag ment Route Id > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Man ag ment Controller . delete Bot () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget < Bot Man ag ment Route . Bot Man ag ment Route Id . Delete > Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget < Bot Man ag ment Route . Settings > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Repository . getAll Bot s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . getAll Bot Html Page ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . InternalServerError ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget < Bot Man ag ment Route . Settings . Create > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . get Configure New Bot Html Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost < Bot Man ag ment Route . Settings . Create > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform Parameters Ġ= Ġcall . receive Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbot Name : ĠString ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform Parameters . get OrFail ( FORM _ BOT _ NAME _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermission Request edList : ĠSet < Role Type > Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Role Type . values ()[ form Parameters . get OrFail < Int >( FORM _ BOT _ PERMISSION _ ID )]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bot Name . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . get Configure New Bot Html Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( permission Request edList . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . get Configure New Bot Html Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ post ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbot Repository . generate Bot ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Name , Ġpermission Request edList ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . show Bot Configuration Result Html Page ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠPipeline Context < Unit , ĠApplication Call >. delete Bot ( bot Id : ĠString ) Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bot Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ coroutine Scope ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexist Ġ= Ġbot Repository . exist Bot ById ( bot Id ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( exist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbot Repository . delete Bot ById ( bot Id ). on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ Ġex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttpStatusCode . InternalServerError , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException Response ( ex :: class . toString (), Ġex . stack Trace ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ