package Ġcom . n amaz ed . orth obot . db čĊč Ċ import Ġchat . t amt am . bot sdk . model . UserId č Ċ import Ġchat . t amt am . bot sdk . model . prepared . Callback č Ċ import Ġchat . t amt am . bot sdk . model . prepared . Message č Ċ import Ġcom . n amaz ed . orth obot . bot .* č Ċ import Ġcom . n amaz ed . orth obot . client . model . Translate Result č Ċ import Ġcom . n amaz ed . orth obot . db . mapping . getDefault State č Ċ import Ġcom . n amaz ed . orth obot . db . mapping . update State Mapping č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . callback Id č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . callback Payload č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . callback UserId č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . callback UserName č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . dictionary č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . messageInfo Text č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . message Recipient Chat Id č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . message Sender Id č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . message Sender Name č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . timestamp č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . translation Result Lang č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . translation Result Text č Ċ import Ġcom . n amaz ed . orth obot . db . model . Update States . update Types č Ċ import Ġkotlinx . coroutines .* č Ċ import Ġorg . jetbrains . ex posed . sql . delete Where č Ċ import Ġorg . jetbrains . ex posed . sql . insert č Ċ import Ġorg . jetbrains . ex posed . sql . select č Ċ import Ġorg . jetbrains . ex posed . sql . statements . Insert Statement č Ċ import Ġkotlin . coroutines . Coroutine Context čĊč Ċ class ĠUpdate State Service ( čĊĠĠĠ Ġprivate Ġval Ġdatabase Manager : ĠDatabase Manager , čĊĠĠĠ Ġprivate Ġval Ġparent Job : ĠComp letable Job , čĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context Ġ= ĠSuper visor Job ( parent Job ) Ġ+ ĠDispatch ers . IO č Ċ ) Ġ: ĠCor outine Scope Ġ{ čĊčĊĠĠĠ Ġsuspend Ġfun Ġupdate State ( userId : ĠUserId , Ġupdate State : ĠUpdate State ): ĠUpdate State Ġ{ čĊĠĠĠĠĠĠĠ Ġdatabase Manager . query Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate States . delete Where Ġ{ ĠUpdate States . userId Ġeq ĠuserId . id Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Update States ( update State ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġselect State ( userId ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġinsert Update States ( update State : ĠUpdate State ) Ġ{ čĊĠĠĠĠĠĠĠ ĠUpdate States . insert Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġit [ userId ] Ġ= Ġupdate State . update State Id . id čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( update State ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStart State Ġ-> Ġinsert State ( it , ĠUpdate Types . START , Ġupdate State . message , Ġactions Ġ= Ġupdate State . actions ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBack State Ġ-> Ġinsert State ( it , ĠUpdate Types . BACK , Ġcallback Ġ= Ġupdate State . callback ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOr tho State . Input Text Ġ-> Ġinsert State ( it , ĠUpdate Types . OR TH O _ INPUT , Ġcallback Ġ= Ġupdate State . callback ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDictionary State . Input Word Ġ-> Ġinsert State ( it , ĠUpdate Types . DI CTIONARY _ INPUT , Ġcallback Ġ= Ġupdate State . callback ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDictionary State . Result Ġ-> Ġinsert State ( it , ĠUpdate Types . DI CTIONARY _ RESULT , Ġupdate State . message , Ġupdate State . dictionary ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTranslate State . Translate En Ġ-> Ġinsert State ( it , ĠUpdate Types . TRANSL ATE _ EN , Ġcallback Ġ= Ġupdate State . callback ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTranslate State . Translate Ru Ġ-> Ġinsert State ( it , ĠUpdate Types . TRANSL ATE _ RU , Ġcallback Ġ= Ġupdate State . callback ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTranslate State . Result Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert State ( it , ĠUpdate Types . TRANSL ATE _ RESULT , Ġupdate State . message , Ġtranslate Result Ġ= Ġupdate State . translate Result ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġinsert State ( čĊĠĠĠĠĠĠĠ Ġinsert Field : ĠInsert Statement < Number >, čĊĠĠĠĠĠĠĠ Ġupdate Type : ĠUpdate Types , čĊĠĠĠĠĠĠĠ Ġmessage : ĠMessage ? Ġ= Ġnull , čĊĠĠĠĠĠĠĠ Ġdictionary Result : ĠString Ġ= Ġ"", čĊĠĠĠĠĠĠĠ Ġtranslate Result : ĠTranslate Result Ġ= ĠTranslate Result (), čĊĠĠĠĠĠĠĠ Ġcallback : ĠCallback ? Ġ= Ġnull , čĊĠĠĠĠĠĠĠ Ġactions : ĠBoolean Ġ= Ġfalse čĊĠĠĠ Ġ) Ġ{ čĊĠĠĠĠĠĠĠ Ġinsert Field [ timestamp ] Ġ= Ġwhen Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ!= Ġnull Ġ&& Ġmessage . timestamp Ġ!= Ġ- 1 L Ġ-> Ġmessage . timestamp čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ!= Ġnull Ġ&& Ġcallback . timestamp Ġ!= Ġ- 1 L Ġ-> Ġcallback . timestamp čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ- 1 L čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġinsert Field [ dictionary ] Ġ= Ġdictionary Result čĊĠĠĠĠĠĠĠ Ġinsert Field [ Update States . actions ] Ġ= Ġactions čĊĠĠĠĠĠĠĠ Ġinsert Field [ message Sender Name ] Ġ= Ġmessage ?. sender ?. name Ġ?: Ġ"" čĊĠĠĠĠĠĠĠ Ġinsert Field [ message Sender Id ] Ġ= Ġmessage ?. sender ?. userId ?. id Ġ?: Ġ- 1 čĊĠĠĠĠĠĠĠ Ġinsert Field [ message Recipient Chat Id ] Ġ= Ġmessage ?. recipient ?. chat Id ?. id Ġ?: Ġ- 1 čĊĠĠĠĠĠĠĠ Ġinsert Field [ messageInfo Text ] Ġ= Ġmessage ?. body ?. text Ġ?: Ġ"" čĊĠĠĠĠĠĠĠ Ġinsert Field [ translation Result Lang ] Ġ= Ġtranslate Result . lang čĊĠĠĠĠĠĠĠ Ġinsert Field [ translation Result Text ] Ġ= Ġif Ġ( translate Result . text . isEmpty ()) Ġ"" Ġelse Ġtranslate Result . text [ 0 ] čĊĠĠĠĠĠĠĠ Ġinsert Field [ callback Id ] Ġ= Ġcallback ?. callback Id ?. id Ġ?: Ġ"" čĊĠĠĠĠĠĠĠ Ġinsert Field [ callback UserId ] Ġ= Ġcallback ?. user ?. userId ?. id Ġ?: Ġ- 1 čĊĠĠĠĠĠĠĠ Ġinsert Field [ callback UserName ] Ġ= Ġcallback ?. user ?. name Ġ?: Ġ"" čĊĠĠĠĠĠĠĠ Ġinsert Field [ callback Payload ] Ġ= Ġcallback ?. payload Ġ?: Ġ"" čĊĠĠĠĠĠĠĠ Ġinsert Field [ update Types ] Ġ= Ġupdate Type čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġsuspend Ġfun Ġselect State ( userId : ĠUserId ) Ġ= Ġdatabase Manager . query Ġ{ čĊĠĠĠĠĠĠĠ ĠUpdate States . select Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Update States . userId Ġeq ĠuserId . id ) čĊĠĠĠĠĠĠĠ Ġ}. as Sequence (). map NotNull Ġ{ Ġupdate State Mapping ( it ) Ġ}. if Empty Ġ{ ĠgetDefault State () Ġ}. single () čĊĠĠĠ Ġ} čĊč Ċ } čĊč Ċ enum Ġclass ĠUpdate Types Ġ{ čĊĠĠĠ ĠSTART , čĊĠĠĠ ĠBACK , čĊĠĠĠ ĠOR TH O _ INPUT , čĊĠĠĠ ĠOR TH O _ INPUT _ COMMAND , čĊĠĠĠ ĠOR TH O _ RESULT , čĊĠĠĠ ĠDICTIONARY _ INPUT , čĊĠĠĠ ĠDICTIONARY _ INPUT _ COMMAND , čĊĠĠĠ ĠDICTIONARY _ RESULT , čĊĠĠĠ ĠTRAN SL ATE _ EN , čĊĠĠĠ ĠTRAN SL ATE _ RU , čĊĠĠĠ ĠTRAN SL ATE _ RESULT č Ċ } čĊ