Skip to content

Commit 0c02111

Browse files
authored
added slack client (#121)
1 parent 22b0316 commit 0c02111

File tree

3 files changed

+84
-0
lines changed

3 files changed

+84
-0
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ require (
1010
github.com/gorilla/websocket v1.4.2
1111
github.com/mattn/go-colorable v0.1.6 // indirect
1212
github.com/mattn/go-isatty v0.0.12
13+
github.com/nlopes/slack v0.6.0
1314
github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852
1415
github.com/pinpt/httpclient v0.0.0-20190815022759-09e0028c9067
1516
github.com/spf13/cobra v1.0.0

go.sum

+4
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51
107107
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
108108
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
109109
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
110+
github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
110111
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
111112
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
112113
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
@@ -194,6 +195,8 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE
194195
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
195196
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
196197
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
198+
github.com/nlopes/slack v0.6.0 h1:jt0jxVQGhssx1Ib7naAOZEZcGdtIhTzkP0nopK0AsRA=
199+
github.com/nlopes/slack v0.6.0/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk=
197200
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
198201
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
199202
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
@@ -224,6 +227,7 @@ github.com/pinpt/httpclient v0.0.0-20190815022759-09e0028c9067/go.mod h1:SzzGa0k
224227
github.com/pinpt/websocket v1.4.2-0.20191010233559-d9055c4295fd h1:t9XLtLSRjToOS2cYmlv4vW3slUz5UdogaVR9hmbZ9Fg=
225228
github.com/pinpt/websocket v1.4.2-0.20191010233559-d9055c4295fd/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
226229
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
230+
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
227231
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
228232
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
229233
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=

slack/slack.go

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package slack
2+
3+
import (
4+
"context"
5+
"errors"
6+
"fmt"
7+
8+
"github.com/nlopes/slack"
9+
)
10+
11+
// Client Slack bot client.
12+
// needed scopes: chat:write, channels:read, groups:read, im:read, mpim:read
13+
type Client interface {
14+
SendMessage(msg string) error
15+
}
16+
17+
// New creates a new instance. Needs the bot token and the channel name
18+
func New(token string, channel string) (Client, error) {
19+
slackClient := slack.New(token)
20+
if _, err := slackClient.AuthTest(); err != nil {
21+
return nil, err
22+
}
23+
var slackChannelID string
24+
var cursor string
25+
for {
26+
var err error
27+
var channels []slack.Channel
28+
// needed scopes:
29+
channels, cursor, err = slackClient.GetConversations(&slack.GetConversationsParameters{
30+
ExcludeArchived: "true",
31+
Limit: 1000,
32+
Types: []string{"public_channel", "private_channel"},
33+
Cursor: cursor,
34+
})
35+
if err != nil {
36+
return nil, fmt.Errorf("error getting channel ids from slack. error: %v", err)
37+
}
38+
if len(channels) == 0 {
39+
return nil, fmt.Errorf("error getting channel ids from slack")
40+
}
41+
42+
for _, c := range channels {
43+
if c.Name == channel {
44+
slackChannelID = c.ID
45+
break
46+
}
47+
}
48+
if slackChannelID != "" {
49+
break
50+
}
51+
}
52+
if slackChannelID == "" {
53+
return nil, fmt.Errorf("error finding slack channel %s", channel)
54+
}
55+
return &client{
56+
slackChannelID: slackChannelID,
57+
slackClient: slackClient,
58+
}, nil
59+
}
60+
61+
type client struct {
62+
slackChannelID string
63+
slackClient *slack.Client
64+
}
65+
66+
// SendMessage sends a message to thr slack channel
67+
func (c *client) SendMessage(msg string) error {
68+
if c.slackChannelID == "" {
69+
return errors.New("no channel found")
70+
}
71+
if _, _, err := c.slackClient.PostMessageContext(context.Background(),
72+
c.slackChannelID,
73+
slack.MsgOptionText(msg, false),
74+
slack.MsgOptionAsUser(false),
75+
); err != nil {
76+
return err
77+
}
78+
return nil
79+
}

0 commit comments

Comments
 (0)