MCPcopy Create free account
hub / github.com/bytebase/bytebase / postDirectMessage

Function postDirectMessage

backend/plugin/webhook/slack/slack.go:253–295  ·  view source on GitHub ↗
(webhookCtx webhook.Context)

Source from the content-addressed store, hash-verified

251}
252
253func 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}

Callers 1

PostMethod · 0.70

Calls 9

RetryFunction · 0.92
BBErrorFunction · 0.92
getSlackTokenFunction · 0.85
lookupByEmailMethod · 0.80
ErrorfMethod · 0.80
openConversationMethod · 0.80
chatPostMessageMethod · 0.80
newProviderFunction · 0.70
StringMethod · 0.65

Tested by

no test coverage detected