message-pusher/channel/bark.go

51 lines
1008 B
Go

package channel
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"message-pusher/model"
"net/http"
)
type barkMessageRequest struct {
Title string `json:"title"`
Body string `json:"body"`
URL string `json:"url"`
}
type barkMessageResponse struct {
Code int `json:"code"`
Message string `json:"message"`
}
func SendBarkMessage(message *model.Message, user *model.User, channel_ *model.Channel) error {
url := fmt.Sprintf("%s/%s", channel_.URL, channel_.Secret)
req := barkMessageRequest{
Title: message.Title,
Body: message.Content,
URL: message.URL,
}
if message.Content == "" {
req.Body = message.Description
}
reqBody, err := json.Marshal(req)
if err != nil {
return err
}
resp, err := http.Post(url, "application/json", bytes.NewReader(reqBody))
if err != nil {
return err
}
var res barkMessageResponse
err = json.NewDecoder(resp.Body).Decode(&res)
if err != nil {
return err
}
if res.Code != 200 {
return errors.New(res.Message)
}
return nil
}