forked from bluele/slack
/
webhook.go
53 lines (45 loc) · 1.1 KB
/
webhook.go
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
package slack
import (
"bytes"
"encoding/json"
"errors"
"io/ioutil"
"net/http"
)
type WebHook struct {
hookURL string
HttpClient *http.Client
}
type WebHookPostPayload struct {
Text string `json:"text,omitempty"`
Channel string `json:"channel,omitempty"`
Username string `json:"username,omitempty"`
IconUrl string `json:"icon_url,omitempty"`
IconEmoji string `json:"icon_emoji,omitempty"`
UnfurlLinks bool `json:"unfurl_links,omitempty"`
Attachments []*Attachment `json:"attachments,omitempty"`
}
func NewWebHook(hookURL string) *WebHook {
return &WebHook{
hookURL: hookURL,
}
}
func (hk *WebHook) PostMessage(payload *WebHookPostPayload) error {
if hk.HttpClient == nil {
hk.HttpClient = &http.Client{}
}
body, err := json.Marshal(payload)
if err != nil {
return err
}
resp, err := hk.HttpClient.Post(hk.hookURL, "application/json", bytes.NewReader(body))
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
t, _ := ioutil.ReadAll(resp.Body)
return errors.New(string(t))
}
return nil
}