-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathslack_bot.go
More file actions
81 lines (77 loc) · 2.04 KB
/
slack_bot.go
File metadata and controls
81 lines (77 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package main
import (
"strings"
"github.com/nlopes/slack"
log "github.com/sirupsen/logrus"
)
func (d *daemon) sendSlackMessage(experts []string, logs string, options ...slack.MsgOption) {
var users []string
if len(experts) == 1 && experts[0] == "" {
// TODO - fall back to (optional) default experts
log.Info("No experts: %v", experts)
return
}
for _, user := range experts {
if user != "" {
if d.slackUsers[user] == "" {
// update cache if not found
if !strings.Contains(user, "@") {
if d.config.slackEmailDomain == "" {
log.Error("Full email not provided for expert and SLACK_EMAIL_DOMAIN is empty. Cannot look up user in slack.")
}
user = user + "@" + d.config.slackEmailDomain
}
userInfo, err := d.slackWorkspace.GetUserByEmail(user)
if err != nil {
log.Errorf("Could not find user %s\n", user)
continue
}
d.slackUsers[user] = userInfo.ID
}
users = append(users, d.slackUsers[user])
}
}
var chID string
if len(users) > 1 {
// open a conversation with multiple users
channel := slack.OpenConversationParameters{
Users: users,
}
openChannel, _, _, err := d.slackBot.OpenConversation(&channel)
if err != nil {
log.Errorf("Error opening channel: %s\n", err)
return
}
chID = openChannel.ID
} else if len(users) == 1 {
// Instant message for single users
_, _, openChannel, chErr := d.slackBot.OpenIMChannel(users[0])
if chErr != nil {
log.Errorf("Error opening IM: %s\n", chErr)
return
}
chID = openChannel
} else {
// No users, don't send a message
if len(experts) > 0 {
log.Errorf("Error getting slack IDs for users: %s", experts)
}
return
}
_, _, _, err := d.slackBot.SendMessage(chID, options...)
if err != nil {
log.Errorf("Error Sending Message: %s\n", err)
}
if len(logs) > 0 {
params := slack.FileUploadParameters{
Title: "log output",
Filetype: "txt",
Content: logs,
Channels: []string{chID},
}
_, err := d.slackBot.UploadFile(params)
if err != nil {
log.Errorf("Error uploading logs: %s\n", err)
}
}
}