package Ġcom . k re ait . bots . agile . domain . slack . stand up Ċ Ċ import Ġcom . k re ait . bots . agile . domain . common . service . User Channel Id Service Ċ import Ġcom . k re ait . bots . agile . domain . common . service . UserService Ċ import Ġcom . k re ait . bots . agile . domain . response . Random Response Provider Ċ import Ġcom . k re ait . bots . agile . domain . response . ResponseType Ċ import Ġcom . k re ait . slack . api . Slack Client Ċ import Ġcom . k re ait . slack . api . contract . jackson . common . messaging . Attachment Ċ import Ġcom . k re ait . slack . api . contract . jackson . common . messaging . Color Ċ import Ġcom . k re ait . slack . api . contract . jackson . group . chat . Post Message Request Ċ import Ġcom . k re ait . slack . broker . store . team . Team Store Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . context . support . Message Source Accessor Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util . Locale Ċ Ċ @ Service Ċ class ĠSlack Broadcast Sender Ġ@ Autowired Ġconstructor ( private Ġval Ġslack Client : ĠSlack Client , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġuser Channel Id Service : ĠUser Channel Id Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠuserService : ĠUserService , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġmessage : ĠMessage Source Accessor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġrandom Response Provider : ĠRandom Response Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġteam Store : ĠTeam Store ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠATT ACH MENT _ AN SW ER ED _ FALL BACK Ġ= Ġ" attachment Has Answer ed Fallback " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCON FIRM ATION _ TITLE Ġ= Ġ" confirmation Title " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠST AND UP _ AN SW ER _ TITLE Ġ= Ġ" stand up Answer Title " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLoggerFactory . getLogger ( Slack Broadcast Sender :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Broadcast ( userId : ĠString , Ġstand up Name : ĠString , Ġbroadcast Channel Id : ĠString , Ġdate : ĠLocalDate , Ġquestions : ĠList < String >, Ġanswers : ĠList < String >, Ġteam Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġteam Store . findById ( team Id ). bot . accessToken ĊĠĠĠĠĠĠĠ Ġval ĠuserInfo Ġ= ĠuserService . user ( userId , Ġtoken ) ĊĠĠĠĠĠĠĠ Ġval Ġreal Name Ġ= ĠuserInfo . real Name ĊĠĠĠĠĠĠĠ Ġval Ġattachments Ġ= Ġmutable ListOf ( ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttachment ( fallback Ġ= ĠString . format ( message . getMessage ( ATTACHMENT _ AN SW ER ED _ FALL BACK , ĠLocale . EN GL ISH ), Ġreal Name , Ġstand up Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . GO OD , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Name Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġstand up Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġdate . toString ())) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġanswer ) Ġin Ġanswers . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattachments . add ( Attachment ( fallback Ġ= Ġmessage . getMessage ( STAND UP _ AN SW ER _ TITLE , ĠLocale . EN GL ISH ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġquestions [ index ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġanswer )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . slack Client . chat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. postMessage ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Post Message Request ( attachments Ġ= Ġattachments , Ġchannel Ġ= Ġbroadcast Channel Id , Ġusername Ġ= Ġreal Name , Ġicon Url Ġ= ĠuserInfo . profile . image 1 9 2 , Ġtext Ġ= Ġ"", as User Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . isDebugEnabled Ġ-> ĠLOG . debug (" Successfully Ġsent Ġbroadcast Ġmessage ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" Error Ġwhile Ġsending Ġbroadcast Ġmessage Ġ{}", it . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke (). success ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// TODO Ġwhy Ġis Ġthis Ġreturning Ġa Ġboolean ? ĊĠĠĠ Ġfun Ġsend Broadcast Confirmation ( userId : ĠString , Ġteam Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġteam Store . findById ( team Id ). bot . accessToken ĊĠĠĠĠĠĠĠ Ġval Ġchannel : ĠString ? Ġ= Ġuser Channel Id Service . fetch Channel Id By UserId ( userId , Ġtoken ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchannel ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . slack Client . chat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. postMessage ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Post Message Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġrandom Response Provider . getRandom ized Response ( ResponseType . BRO ADCAST _ CONFIRM ATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttachment ("", Ġmessage . getMessage ( CONFIRM ATION _ TITLE , ĠLocale . EN GL ISH ), Ġ"", Ġ"", ĠColor . GO OD , Ġ"", Ġ"", ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", Ġ"") ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Ġ= Ġchannel )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . isDebugEnabled Ġ-> ĠLOG . debug (" Successfully Ġsent Ġbroadcast Ġconfirmation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" Failed Ġto Ġsend Ġbroadcast Ġconfirmation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke (). success Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ