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

Method sendDirectMessage

backend/plugin/webhook/wecom/wecom.go:152–196  ·  view source on GitHub ↗

sendDirectMessage sends direct message to users. returns `true` if successfully sends messages to all users.

(webhookCtx webhook.Context)

Source from the content-addressed store, hash-verified

150// sendDirectMessage sends direct message to users.
151// returns `true` if successfully sends messages to all users.
152func (*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}

Callers 1

PostMethod · 0.95

Implementers 8

Receiverbackend/plugin/webhook/discord/discord
feishuReceiverbackend/plugin/webhook/feishu/feishu.g
Receiverbackend/plugin/webhook/dingtalk/dingta
Receiverbackend/plugin/webhook/wecom/wecom.go
Receiverbackend/plugin/webhook/slack/slack.go
Receiverbackend/plugin/webhook/teams/teams.go
Receiverbackend/plugin/webhook/googlechat/goog
larkReceiverbackend/plugin/webhook/lark/lark.go

Calls 12

BBErrorFunction · 0.92
RetryFunction · 0.92
getWecomConfigFunction · 0.85
ErrorfMethod · 0.80
newProviderFunction · 0.70
getMessageCardFunction · 0.70
GetCorpIdMethod · 0.45
GetAgentIdMethod · 0.45
GetSecretMethod · 0.45
ErrorMethod · 0.45
getUserIDByEmailMethod · 0.45
sendMessageMethod · 0.45

Tested by

no test coverage detected