(webhookCtx webhook.Context)
| 251 | } |
| 252 | |
| 253 | func postDirectMessage(webhookCtx webhook.Context) bool { |
| 254 | ctx := context.Background() |
| 255 | t := getSlackToken(webhookCtx.IMSetting) |
| 256 | if t == "" { |
| 257 | slog.Warn("failed to found valid slack im token", slog.String("event", webhookCtx.EventType)) |
| 258 | return false |
| 259 | } |
| 260 | p := newProvider(t) |
| 261 | sent := map[string]bool{} |
| 262 | if err := common.Retry(ctx, func() error { |
| 263 | var errs error |
| 264 | for _, u := range webhookCtx.MentionEndUsers { |
| 265 | if sent[u.Email] { |
| 266 | continue |
| 267 | } |
| 268 | err := func() error { |
| 269 | userID, err := p.lookupByEmail(ctx, u.Email) |
| 270 | if err != nil { |
| 271 | return errors.Wrapf(err, "failed to lookup user") |
| 272 | } |
| 273 | if userID == "" { |
| 274 | return errors.Errorf("failed to find user id for %v", u.Email) |
| 275 | } |
| 276 | channelID, err := p.openConversation(ctx, userID) |
| 277 | if err != nil { |
| 278 | return errors.Wrapf(err, "failed to open conversation") |
| 279 | } |
| 280 | if err := p.chatPostMessage(ctx, channelID, webhookCtx); err != nil { |
| 281 | return errors.Wrapf(err, "failed to post message") |
| 282 | } |
| 283 | sent[u.Email] = true |
| 284 | return nil |
| 285 | }() |
| 286 | multierr.AppendInto(&errs, errors.Wrapf(err, "failed to send message to user %v", u.Email)) |
| 287 | } |
| 288 | return errs |
| 289 | }); err != nil { |
| 290 | slog.Warn("failed to send direct message to slack user", log.BBError(err), slog.String("event", webhookCtx.EventType)) |
| 291 | return false |
| 292 | } |
| 293 | |
| 294 | return true |
| 295 | } |
no test coverage detected