/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 / 2 0 1 9 Ġe - voy age urs Ġtechnologies Ċ Ġ* Ċ Ġ* Ġ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 Ġai . to ck . bot . api . client Ċ Ċ import Ġai . to ck . bot . api . model . context . Entity Ċ import Ġai . to ck . bot . api . model . message . bot . Action Ċ import Ġai . to ck . bot . api . model . message . bot . Attachment Ċ import Ġai . to ck . bot . api . model . message . bot . Attachment Type Ċ import Ġai . to ck . bot . api . model . message . bot . Card Ċ import Ġai . to ck . bot . api . model . message . bot . Carousel Ċ import Ġai . to ck . bot . api . model . message . bot . I 1 8 n Text Ċ import Ġai . to ck . bot . api . model . message . bot . Suggestion Ċ import Ġai . to ck . bot . api . model . message . user . User Message Ċ import Ġai . to ck . bot . engine . Bus Ċ import Ġai . to ck . nlp . entity . Value Ċ import Ġai . to ck . translator . I 1 8 n Label Value Ċ import Ġai . to ck . translator . Raw String Ċ import Ġai . to ck . translator . Translated String Ċ Ċ /** Ċ Ġ* ĠA Ġnew Ġbus Ġinstance Ġis Ġcreated Ġfor Ġeach Ġuser Ġrequest . Ċ Ġ* Ċ Ġ* ĠThe Ġbus Ġis Ġused Ġby Ġbot Ġimplementations Ġto Ġreply Ġto Ġthe Ġuser Ġrequest . Ċ Ġ*/ Ċ interface ĠClient Bus Ġ: ĠBus < Client Bus > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġbot Ġdefinition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġbot Definition : ĠClient Bot Definition ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġentity Ġlist . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġentities : ĠMutable List < Entity > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġuser Ġmessage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġmessage : ĠUser Message ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcurrent Ġstory . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġstory : ĠClient Story Definition ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcurrent Ġstep . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġstep : ĠClient Step ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġthe Ġcurrent Ġrequest . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġ[ Card ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend ( card : ĠCard ): ĠClient Bus ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġ[ Card ] Ġas Ġlast Ġbot Ġanswer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġend ( card : ĠCard ): ĠClient Bus ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġ[ Carousel ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend ( carousel : ĠCar ousel ): ĠClient Bus ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġ[ Carousel Ġas Ġlast Ġbot Ġanswer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġend ( carousel : ĠCar ousel ): ĠClient Bus ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġtext Ġwith Ġsuggestions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend ( ĊĠĠĠĠĠĠĠ Ġi 1 8 n Text : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġsuggestions : ĠList < Suggestion >, ĊĠĠĠĠĠĠĠ Ġdelay : ĠLong Ġ= Ġdefault Delay ( current Answer Index ), ĊĠĠĠĠĠĠĠ Ġvar arg Ġi 1 8 n Args : ĠAny ?): ĠClient Bus ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġtext Ġwith Ġsuggestions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend ( ĊĠĠĠĠĠĠĠ Ġi 1 8 n Text : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġsuggestions : ĠList < CharSequence > ĊĠĠĠ Ġ): ĠClient Bus Ġ= Ġsend ( i 1 8 n Text , Ġsuggestions . map Ġ{ ĠSuggest ion ( translate ( it )) Ġ}) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġtext Ġwith Ġsuggestions Ġas Ġlast Ġbot Ġanswer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġend ( ĊĠĠĠĠĠĠĠ Ġi 1 8 n Text : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġsuggestions : ĠList < Suggestion >, ĊĠĠĠĠĠĠĠ Ġdelay : ĠLong Ġ= Ġdefault Delay ( current Answer Index ), ĊĠĠĠĠĠĠĠ Ġvar arg Ġi 1 8 n Args : ĠAny ?): ĠClient Bus ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa Ġtext Ġwith Ġsuggestions Ġas Ġlast Ġbot Ġanswer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġend ( ĊĠĠĠĠĠĠĠ Ġi 1 8 n Text : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġsuggestions : ĠList < CharSequence > ĊĠĠĠ Ġ): ĠClient Bus Ġ= Ġend ( i 1 8 n Text , Ġsuggestions . map Ġ{ ĠSuggest ion ( translate ( it )) Ġ}) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġthe Ġ[ Entity ] Ġfrom Ġthe Ġspecified Ġentity Ġrole . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġentity ( role : ĠString ): ĠEntity ? Ġ= Ġentities . find Ġ{ Ġit . role Ġ== Ġrole Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Entity ] Ġtext Ġcontent Ġfrom Ġthe Ġspecified Ġentity Ġrole . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġentity Text ( role : ĠString ): ĠString ? Ġ= Ġentity ( role )?. content ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcorresponding Ġ[ Entity ] Ġ[ Value ] Ġfrom Ġthe Ġspecified Ġentity Ġrole . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠValue > Ġentity Value ( role : ĠString ): ĠT ? Ġ= Ġentity ( role )?. value Ġas ? ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġentity Ġof Ġthe Ġspecified Ġrole . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Entity ( role : ĠString ): ĠBoolean Ġ= Ġentities . remove If Ġ{ Ġit . role Ġ== Ġrole Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġthe Ġspecified Ġentity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Entity ( entity : ĠEntity ): ĠBoolean Ġ= Ġentities . remove ( entity ) ĊĊĠĠĠ Ġoverride Ġfun Ġtranslate ( text : ĠCharSequence ?, Ġvar arg Ġargs : ĠAny ?): ĠI 1 8 n Text Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI 1 8 n Text ("", Ġto Be Translated Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( text Ġis ĠI 1 8 n Label Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI 1 8 n Text ( text . default Label . toString (), Ġtext . args . map Ġ{ Ġit ?. toString () Ġ}, Ġkey Ġ= Ġtext . key ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( text Ġis ĠTrans lated String Ġ|| Ġtext Ġis ĠRaw String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI 1 8 n Text ( text . toString (), Ġto Be Translated Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI 1 8 n Text ( text . toString (), Ġargs . map Ġ{ Ġit ?. toString () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Card ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnew Card ( ĊĠĠĠĠĠĠĠ Ġtitle : ĠCharSequence ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġsub Title : ĠCharSequence ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġattachment : ĠAttachment ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġactions : ĠList < Action > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġdelay : ĠLong Ġ= Ġdefault Delay ( current Answer Index )): ĠCard Ġ= ĊĠĠĠĠĠĠĠ ĠCard ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ?. let Ġ{ Ġtranslate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Title ?. let Ġ{ Ġtranslate ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattachment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Carousel ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnew Carousel ( ĊĠĠĠĠĠĠĠ Ġcards : ĠList < Card >, ĊĠĠĠĠĠĠĠ Ġdelay : ĠLong Ġ= Ġdefault Delay ( current Answer Index )): ĠCar ousel Ġ= ĊĠĠĠĠĠĠĠ ĠCar ousel ( cards , Ġdelay ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Carousel ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnew Carousel ( ĊĠĠĠĠĠĠĠ Ġvar arg Ġcards : ĠCard , ĊĠĠĠĠĠĠĠ Ġdelay : ĠLong Ġ= Ġdefault Delay ( current Answer Index )): ĠCar ousel Ġ= ĊĠĠĠĠĠĠĠ ĠCar ousel ( cards . toList (), Ġdelay ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Card ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnew Card ( ĊĠĠĠĠĠĠĠ Ġtitle : ĠCharSequence ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġsub Title : ĠCharSequence ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġattachment : ĠAttachment ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar arg Ġactions : ĠAction , ĊĠĠĠĠĠĠĠ Ġdelay : ĠLong Ġ= Ġdefault Delay ( current Answer Index )): ĠCard Ġ= Ġnew Card ( title , Ġsub Title , Ġattachment , Ġactions . toList (), Ġdelay ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Action ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnew Action ( ĊĠĠĠĠĠĠĠ Ġtitle : ĠCharSequence , ĊĠĠĠĠĠĠĠ Ġurl : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠAction Ġ= ĠAction ( translate ( title ), Ġurl ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnew Ġ[ Attachment ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnew Attachment ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġtype : ĠAttachment Type ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠAttachment Ġ= ĠAttachment ( url , Ġtype ) Ċ }