sendDirectMessage sends direct message to users. returns `true` if successfully sends messages to all users.
(webhookCtx webhook.Context)
| 150 | // sendDirectMessage sends direct message to users. |
| 151 | // returns `true` if successfully sends messages to all users. |
| 152 | func (*Receiver) sendDirectMessage(webhookCtx webhook.Context) bool { |
| 153 | wecom := getWecomConfig(webhookCtx.IMSetting) |
| 154 | if wecom == nil { |
| 155 | return false |
| 156 | } |
| 157 | p, err := newProvider(wecom.GetCorpId(), wecom.GetAgentId(), wecom.GetSecret()) |
| 158 | if err != nil { |
| 159 | slog.Error("failed to get wecom provider", log.BBError(err)) |
| 160 | } |
| 161 | |
| 162 | ctx := context.Background() |
| 163 | |
| 164 | fn := func() error { |
| 165 | var errs error |
| 166 | var users []string |
| 167 | |
| 168 | for _, u := range webhookCtx.MentionEndUsers { |
| 169 | userID, err := p.getUserIDByEmail(ctx, u.Email) |
| 170 | if err != nil { |
| 171 | err = errors.Wrapf(err, "failed to get user id by email %v", u.Email) |
| 172 | multierr.AppendInto(&errs, err) |
| 173 | continue |
| 174 | } |
| 175 | users = append(users, userID) |
| 176 | } |
| 177 | if len(users) == 0 { |
| 178 | err := errors.Errorf("wecom dm: got 0 user id, errs: %v", errs) |
| 179 | return backoff.Permanent(err) |
| 180 | } |
| 181 | |
| 182 | if err := p.sendMessage(ctx, users, getMessageCard(webhookCtx)); err != nil { |
| 183 | err = errors.Wrapf(err, "failed to send message") |
| 184 | multierr.AppendInto(&errs, err) |
| 185 | } |
| 186 | |
| 187 | return errs |
| 188 | } |
| 189 | |
| 190 | if err := common.Retry(ctx, fn); err != nil { |
| 191 | slog.Warn("failed to send direct message to wecom users", log.BBError(err)) |
| 192 | return false |
| 193 | } |
| 194 | |
| 195 | return true |
| 196 | } |
no test coverage detected