matterbridge/vendor/github.com/slack-go/slack/webhooks.go

64 lines
2.0 KiB
Go
Raw Normal View History

2018-08-10 00:38:19 +02:00
package slack
import (
2022-04-25 23:50:10 +02:00
"bytes"
"context"
2022-04-25 23:50:10 +02:00
"encoding/json"
"fmt"
2022-06-25 00:36:16 +02:00
"io"
"io/ioutil"
"net/http"
2018-08-10 00:38:19 +02:00
)
type WebhookMessage struct {
2019-09-07 22:46:58 +02:00
Username string `json:"username,omitempty"`
IconEmoji string `json:"icon_emoji,omitempty"`
IconURL string `json:"icon_url,omitempty"`
Channel string `json:"channel,omitempty"`
ThreadTimestamp string `json:"thread_ts,omitempty"`
Text string `json:"text,omitempty"`
Attachments []Attachment `json:"attachments,omitempty"`
Parse string `json:"parse,omitempty"`
Blocks *Blocks `json:"blocks,omitempty"`
2021-12-12 00:05:15 +01:00
ResponseType string `json:"response_type,omitempty"`
2023-01-28 22:57:53 +01:00
ReplaceOriginal bool `json:"replace_original"`
DeleteOriginal bool `json:"delete_original"`
2022-06-25 00:36:16 +02:00
ReplyBroadcast bool `json:"reply_broadcast,omitempty"`
2018-08-10 00:38:19 +02:00
}
func PostWebhook(url string, msg *WebhookMessage) error {
return PostWebhookCustomHTTPContext(context.Background(), url, http.DefaultClient, msg)
2019-09-07 22:46:58 +02:00
}
func PostWebhookContext(ctx context.Context, url string, msg *WebhookMessage) error {
return PostWebhookCustomHTTPContext(ctx, url, http.DefaultClient, msg)
}
2018-08-10 00:38:19 +02:00
func PostWebhookCustomHTTP(url string, httpClient *http.Client, msg *WebhookMessage) error {
return PostWebhookCustomHTTPContext(context.Background(), url, httpClient, msg)
2018-08-10 00:38:19 +02:00
}
2022-04-25 23:50:10 +02:00
func PostWebhookCustomHTTPContext(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error {
raw, err := json.Marshal(msg)
if err != nil {
return fmt.Errorf("marshal failed: %w", err)
}
req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(raw))
if err != nil {
return fmt.Errorf("failed new request: %w", err)
}
req.Header.Set("Content-Type", "application/json")
resp, err := httpClient.Do(req)
if err != nil {
return fmt.Errorf("failed to post webhook: %w", err)
}
2022-06-25 00:36:16 +02:00
defer func() {
io.Copy(ioutil.Discard, resp.Body)
resp.Body.Close()
}()
2022-04-25 23:50:10 +02:00
return checkStatusCode(resp, discard{})
}