package Ġnet . mb on nin . appengine Ċ Ċ import Ġcom . google . cloud . translate . Translate Ċ import Ġcom . google . cloud . translate . Translate Options Ċ import Ġorg . apache . commons . lang 3 . String Escape Utils Ċ import Ġjava . lang . Exception Ċ import Ġjava . net . URL Encoder Ċ Ċ class ĠSlack Message Builder ( val Ġstar Rating : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage : ĠString ? Ġ= Ġnull , Ġ// Ġin Ġthe Ġform Ġen _ us ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserName : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Version : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapi Level : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Text : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseconds : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠaccessToken : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel : ĠString ) Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġusername (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! userName . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Ġ* $ userName *" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġtext (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġlist . add ("${ stars ()} Ġ${ flag ()} Ġ${ username () }") ĊĠĠĠĠĠĠĠ Ġif Ġ( app Version Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ("_ version _: Ġ$ app Version ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( api Level Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ("_ api Level _: Ġ$ api Level ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( device Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ("_ device _: Ġ$ device ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist . join ToString ("\ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstars (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" âĺ ħ ". repeat ( star Rating ) Ġ+ Ġ" âĺ Ĩ ". repeat ( 5 Ġ- Ġstar Rating ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġflag (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ": flag -${ language !!. split ("_ ")[ 1 ]. toLowerCase ()} :" ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcolor (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( star Rating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 .. 1 Ġ-> Ġ"# f 0 6 0 3 a " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 2 .. 3 Ġ-> Ġ"# fac 7 1 7 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" 3 6 a 6 4 f " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġencode ( text : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġbuild (): ĠMap < String , ĠAny > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġattachments Ġ= Ġmutable ListOf < Map < String , ĠString >>() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( language ?. startsWith (" en ") Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslated Text Ġ= Ġtranslated Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( translated Text Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachments . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" text " Ġto Ġencode ( translated Text ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" color " Ġto Ġcolor ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġattachments . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" text " Ġto Ġencode ( original Text ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" color " Ġto Ġcolor (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ts " Ġto Ġseconds . toString ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" text " Ġto Ġtext (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" channel " Ġto Ġchannel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attachments " Ġto Ġattachments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" icon _ emoji " Ġto Ġ": hed ge hog :", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" username " Ġto Ġ" Review Bot " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtranslated Text (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtranslate Ġ= ĠTranslate Options . getDefaultInstance (). getService () ĊĊĠĠĠĠĠĠĠ Ġval Ġtranslation Ġ= Ġtranslate . translate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTranslate . Translate Option . target Language (" en ")) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠString Escape Utils . un escape Html 4 ( translation . translated Text ) ĊĠĠĠ Ġ} Ċ }