/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠVS CT Ċ Ġ* Ċ Ġ* Ġ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 Ġfr . vs ct . to ck . bot . admin Ċ Ċ import Ġcom . github . sal om on br ys . kode in . instance Ċ import Ġfr . vs ct . to ck . bot . admin . answer . Answer Configuration Type . script Ċ import Ġfr . vs ct . to ck . bot . admin . answer . Answer Configuration Type . simple Ċ import Ġfr . vs ct . to ck . bot . admin . answer . Script Answer Configuration Ċ import Ġfr . vs ct . to ck . bot . admin . answer . Script Answer Version ed Configuration Ċ import Ġfr . vs ct . to ck . bot . admin . answer . Simple Answer Ċ import Ġfr . vs ct . to ck . bot . admin . answer . Simple Answer Configuration Ċ import Ġfr . vs ct . to ck . bot . admin . bot . Bot ApplicationConfiguration Ċ import Ġfr . vs ct . to ck . bot . admin . bot . Bot ApplicationConfiguration DAO Ċ import Ġfr . vs ct . to ck . bot . admin . bot . Bot Version Ċ import Ġfr . vs ct . to ck . bot . admin . bot . Story Definition Configuration Ċ import Ġfr . vs ct . to ck . bot . admin . bot . Story Definition Configuration DAO Ċ import Ġfr . vs ct . to ck . bot . admin . dialog . Dialog Report DAO Ċ import Ġfr . vs ct . to ck . bot . admin . dialog . Dialog Report QueryResult Ċ import Ġfr . vs ct . to ck . bot . admin . kotlin . compiler . Kotlin File Ċ import Ġfr . vs ct . to ck . bot . admin . kotlin . compiler . client . Kotlin Compiler Client Ċ import Ġfr . vs ct . to ck . bot . admin . model . Bot Dialog Request Ċ import Ġfr . vs ct . to ck . bot . admin . model . Bot Dialog Response Ċ import Ġfr . vs ct . to ck . bot . admin . model . Bot Intent Ċ import Ġfr . vs ct . to ck . bot . admin . model . Bot Intent Search Request Ċ import Ġfr . vs ct . to ck . bot . admin . model . Bot Story Definition Configuration Ċ import Ġfr . vs ct . to ck . bot . admin . model . Create Bot Intent Request Ċ import Ġfr . vs ct . to ck . bot . admin . model . Dialog s Search Query Ċ import Ġfr . vs ct . to ck . bot . admin . model . Update Bot Intent Request Ċ import Ġfr . vs ct . to ck . bot . admin . model . User Search Query Ċ import Ġfr . vs ct . to ck . bot . admin . model . User Search QueryResult Ċ import Ġfr . vs ct . to ck . bot . admin . test . to Client Connector Type Ċ import Ġfr . vs ct . to ck . bot . admin . test . to Client Message Ċ import Ġfr . vs ct . to ck . bot . admin . user . User Report DAO Ċ import Ġfr . vs ct . to ck . bot . connector . rest . client . Connector RestClient Ċ import Ġfr . vs ct . to ck . bot . connector . rest . client . model . Client Message Request Ċ import Ġfr . vs ct . to ck . bot . connector . rest . client . model . Client Sentence Ċ import Ġfr . vs ct . to ck . bot . definition . Intent Ċ import Ġfr . vs ct . to ck . nlp . admin . Admin Service Ċ import Ġfr . vs ct . to ck . nlp . admin . model . Sentence Report Ċ import Ġfr . vs ct . to ck . nlp . front . client . Front Client Ċ import Ġfr . vs ct . to ck . nlp . front . service . application DAO Ċ import Ġfr . vs ct . to ck . nlp . front . shared . config . Classification Ċ import Ġfr . vs ct . to ck . nlp . front . shared . config . Class ified Sentence Ċ import Ġfr . vs ct . to ck . nlp . front . shared . config . Class ified Sentence Status Ċ import Ġfr . vs ct . to ck . nlp . front . shared . config . Intent Definition Ċ import Ġfr . vs ct . to ck . nlp . front . shared . config . Sent ences Query Ċ import Ġfr . vs ct . to ck . shared . Dice Ċ import Ġfr . vs ct . to ck . shared . error Ċ import Ġfr . vs ct . to ck . shared . injector Ċ import Ġfr . vs ct . to ck . shared . property Ċ import Ġfr . vs ct . to ck . shared . vertx . Unauthorized Exception Ċ import Ġfr . vs ct . to ck . translator . I 1 8 n Label Key Ċ import Ġfr . vs ct . to ck . translator . Translator Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . lit ote . km ongo . Id Ċ import Ġjava . time . Instant Ċ import Ġjava . util . Locale Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* Ċ Ġ*/ Ċ object ĠBot Admin Service Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġval Ġdefault Rest Connector BaseUrl Ġ= Ġproperty (" to ck _ bot _ admin _ rest _ default _ base _ url ", Ġ" please Ġset Ġbase Ġurl Ġof Ġthe Ġbot ") ĊĠĠĠ Ġval Ġuser Report DAO : ĠUser Report DAO Ġ Ġby Ġinjector . instance () ĊĠĠĠ Ġval Ġdialog Report DAO : ĠDialog Report DAO Ġ Ġby Ġinjector . instance () ĊĠĠĠ Ġval Ġapplication Configuration DAO : ĠBot ApplicationConfiguration DAO Ġ Ġby Ġinjector . instance () ĊĠĠĠ Ġval Ġstory Definition DAO : ĠStory Definition Configuration DAO Ġby Ġinjector . instance () ĊĠĠĠ Ġval Ġrest Connector Client Cache : ĠMutable Map < String , ĠConnector RestClient > Ġ= ĠConcurrent HashMap () ĊĠĠĠ Ġval Ġfront Ġ= ĠFront Client ĊĊĠĠĠ Ġfun Ġget RestClient ( conf : ĠBot ApplicationConfiguration ): ĠConnector RestClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠbaseUrl Ġ= Ġconf . baseUrl ?. let Ġ{ Ġif Ġ( it . isBlank ()) Ġnull Ġelse Ġit Ġ} Ġ?: Ġdefault Rest Connector BaseUrl ĊĠĠĠĠĠĠĠ Ġreturn Ġrest Connector Client Cache . get Or Put ( baseUrl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConnector RestClient ( baseUrl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Bot Configuration ( ĊĠĠĠĠĠĠĠ Ġbot ApplicationConfiguration Id : ĠId < Bot ApplicationConfiguration >, ĊĠĠĠĠĠĠĠ Ġnamespace : ĠString ĊĠĠĠ Ġ): ĠBot ApplicationConfiguration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconf Ġ= Ġapplication Configuration DAO . getConfiguration ById ( bot ApplicationConfiguration Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( conf ?. namespace Ġ!= Ġnamespace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnauthorized Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconf ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Users ( query : ĠUser Search Query ): ĠUser Search QueryResult Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser Search QueryResult ( user Report DAO . search ( query . to User Report Query ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch ( query : ĠDialog s Search Query ): ĠDialog Report QueryResult Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdialog Report DAO . search ( query . to Dialog Report Query ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete ApplicationConfiguration ( conf : ĠBot ApplicationConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication Configuration DAO . delete ( conf ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Bot Configuration ById ( id : ĠId < Bot ApplicationConfiguration >): ĠBot ApplicationConfiguration ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication Configuration DAO . getConfiguration ById ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Bot Configuration By Application Id And Bot Id ( application Id : ĠString , Ġbot Id : ĠString ): ĠBot ApplicationConfiguration ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication Configuration DAO . getConfiguration By Application Id And Bot Id ( application Id , Ġbot Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Bot Configurations By Namespace And Bot Id ( namespace : ĠString , Ġbot Id : ĠString ): ĠList < Bot ApplicationConfiguration > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication Configuration DAO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Configurations () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . namespace Ġ== Ġnamespace Ġ&& Ġit . bot Id Ġ== Ġbot Id Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Bot Configurations By Namespace And Bot Configuration Id ( ĊĠĠĠĠĠĠĠ Ġnamespace : ĠString , ĊĠĠĠĠĠĠĠ Ġbot Configuration Id : ĠId < Bot ApplicationConfiguration > ĊĠĠĠ Ġ): ĠList < Bot ApplicationConfiguration > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication Configuration DAO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Configurations () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . namespace Ġ== Ġnamespace Ġ&& Ġit ._ id Ġ== Ġbot Configuration Id Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Bot Configurations By Namespace And N lp Model ( ĊĠĠĠĠĠĠĠ Ġnamespace : ĠString , ĊĠĠĠĠĠĠĠ Ġapplication Name : ĠString ĊĠĠĠ Ġ): ĠList < Bot ApplicationConfiguration > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp Ġ= Ġapplication DAO . getApplication By Namespace And Name ( namespace , Ġapplication Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication Configuration DAO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Configurations () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . namespace Ġ== Ġapp ?. namespace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit . nlp Model Ġ== Ġapp . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave ApplicationConfiguration ( conf : ĠBot ApplicationConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġapplication Configuration DAO . save ( conf . copy ( man ually Modified Ġ= Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Bot Intent s ( request : ĠBot Intent Search Request ): ĠList < Bot Intent > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbot Conf Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Bot Configurations By Namespace And N lp Model ( request . namespace , Ġrequest . application Name ). first OrNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bot Conf Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstory Definition DAO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Story Definitions ( bot Conf . bot Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn lp Application Ġ= Ġfront . getApplication By Namespace And Name ( request . namespace , Ġbot Conf . nlp Model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġfront . get Intent By Namespace And Name ( request . namespace , Ġit . intent . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠSent ences Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn lp Application !! ._ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Id Ġ= Ġintent ._ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsentences Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront . search ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sentences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSentence Report ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBot Intent ( Bot Story Definition Configuration ( it ), Ġsentences ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn Ġ{ Ġ" unknown Ġintent : Ġ${ request . namespace } Ġ${ it . intent . name } Ġ- Ġskipped " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Bot Intent ( namespace : ĠString , Ġstory Definition Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstory Ġ= Ġstory Definition DAO . get Story Definition ById ( story Definition Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( story Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbot Conf Ġ= Ġget Bot Configurations By Namespace And Bot Id ( namespace , Ġstory . bot Id ). first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bot Conf Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn lp Application Ġ= Ġfront . getApplication By Namespace And Name ( namespace , Ġbot Conf . nlp Model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġfront . get Intent By Namespace And Name ( namespace , Ġstory . intent . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront . remove Intent From Application ( nlp Application !! , Ġintent ._ id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory Definition DAO . delete ( story ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Bot Intent ( ĊĠĠĠĠĠĠĠ Ġnamespace : ĠString , ĊĠĠĠĠĠĠĠ Ġrequest : ĠCreate Bot Intent Request ĊĠĠĠ Ġ): ĠIntent Definition ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbot Conf Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Bot Configurations By Namespace And Bot Configuration Id ( namespace , Ġrequest . bot Configuration Id ). first OrNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bot Conf Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn lp Application Ġ= Ġfront . getApplication By Namespace And Name ( namespace , Ġbot Conf . nlp Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Definition Ġ= ĠAdmin Service . create OrUpdate Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Definition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . intent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( nlp Application !! ._ id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Definition Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// create Ġthe Ġstory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory Definition DAO . save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStory Definition Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . intent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbot Conf . bot Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( request . intent ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( request . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Ġ-> Ġcreate Simple Answer ( namespace , Ġrequest . language , Ġrequest . reply ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ-> Ġcreate Script Answer ( bot Conf . bot Id , Ġrequest . reply ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" unsupported Ġtype Ġ$ request ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . first Sent ences . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfront . save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ified Sentence ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn lp Application ._ id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ified Sentence Status . validated , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClassification ( intent Definition ._ id , Ġempty List ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent Definition ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Simple Answer ( ĊĠĠĠĠĠĠĠ Ġnamespace : ĠString , ĊĠĠĠĠĠĠĠ Ġlanguage : ĠLocale ?, ĊĠĠĠĠĠĠĠ Ġreply : ĠString ĊĠĠĠ Ġ): ĠSimple Answer Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlabel Key Ġ= ĠI 1 8 n Label Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrans lator . getKey From Default Label ( reply ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" simple ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreply ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// save Ġthe Ġlabel ĊĠĠĠĠĠĠĠ Ġif Ġ( language Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrans lator . save IfNot Exists ( label Key , Ġlanguage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSimple Answer Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Answer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Script Answer ( ĊĠĠĠĠĠĠĠ Ġbot Id : ĠString , ĊĠĠĠĠĠĠĠ Ġscript : ĠString ĊĠĠĠ Ġ): ĠScript Answer Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" T ${ Dice . new Id ()}. kt " ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠKotlin Compiler Client . compile ( Kotlin File ( script , ĠfileName )) ĊĠĠĠĠĠĠĠ Ġif Ġ( result ?. compilation Result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" compilation Ġfailed ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġcompilation Ġerror Ġhandling ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġresult . compilation Result !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠScript Answer Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScript Answer Version ed Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . files . map Ġ{ Ġit . key . substring ( 0 , Ġit . key . length Ġ- Ġ". class ". length ) Ġto Ġit . value Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBot Version . getCurrent Bot Version ( bot Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . main Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Bot Intent ( ĊĠĠĠĠĠĠĠ Ġnamespace : ĠString , ĊĠĠĠĠĠĠĠ Ġrequest : ĠUpdate Bot Intent Request ĊĠĠĠ Ġ): ĠIntent Definition ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġstory Definition Ġ= Ġstory Definition DAO . get Story Definition ById ( request . story Definition Id ) ĊĠĠĠĠĠĠĠ Ġval Ġbot Conf Ġ= Ġget Bot Configurations By Namespace And Bot Id ( namespace , Ġstory Definition !!. bot Id ). first OrNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bot Conf Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstory Definition DAO . save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory Definition . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( story Definition . current Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimple Ġ-> Ġcreate Simple Answer ( namespace , Ġnull , Ġrequest . reply ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ-> Ġcreate Script Answer ( bot Conf . bot Id , Ġrequest . reply ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" unsupported Ġtype Ġ$ request ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfront . get Intent By Namespace And Name ( namespace , Ġstory Definition . intent . name ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtalk ( request : ĠBot Dialog Request ): ĠBot Dialog Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconf Ġ= Ġget Bot Configuration ( request . bot ApplicationConfiguration Id , Ġrequest . namespace ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrest Client Ġ= Ġget RestClient ( conf ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrest Client . talk ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconf . application Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClient Message Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test _${ conf ._ id }_${ request . language }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test _ bot _${ conf ._ id }_${ request . language }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . message . to Client Message (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconf . target Connector Type . to Client Connector Type () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBot Dialog Response ( response . body ()?. messages Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error Ġ{ Ġresponse . error Body ()?. string () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBot Dialog Response ( listOf ( Client Sentence (" technical Ġerror Ġ: (" ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBot Dialog Response ( listOf ( Client Sentence (" technical Ġerror Ġ: (" ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }