68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package ntfy
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
|
|
"net/http"
|
|
)
|
|
|
|
type Request = http.Request
|
|
|
|
func SendF(topic, title, message string, fn func(*Request)) (err error) {
|
|
req, err := http.NewRequest("POST",
|
|
"https://ntfy.sh/" + topic, strings.NewReader(message))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
req.Header.Set("Markdown", "true")
|
|
req.Header.Set("Title", title)
|
|
|
|
fn(req)
|
|
|
|
resp, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
|
return errors.New("Host returned " + resp.Status)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func Send(topic, title, message string) error {
|
|
return SendF(topic, title, message, func(r *Request) {})
|
|
}
|
|
|
|
func SendActions(topic, title, message string, actions ...string) error {
|
|
var actionsString string
|
|
for _, a := range actions {
|
|
actionsString += "view," + a + ",clear=false;"
|
|
}
|
|
|
|
return SendF(topic, title, message, func(r *Request) {
|
|
r.Header.Set("Actions", actionsString)
|
|
})
|
|
}
|
|
|
|
func SendPrio(topic, title, message, prio string) error {
|
|
return SendF(topic, title, message, func(r *Request) {
|
|
r.Header.Set("Priority", prio)
|
|
})
|
|
}
|
|
|
|
func SendTags(topic, title, message string, tags ...string) error {
|
|
tagsString := strings.Join(tags, ",")
|
|
return SendF(topic, title, message, func(r *Request) {
|
|
r.Header.Set("Tags", tagsString)
|
|
})
|
|
}
|
|
|
|
func SendError(topic, title, message string) error {
|
|
return SendF(topic, title, message, func(r *Request) {
|
|
r.Header.Set("Priority", "urgent")
|
|
r.Header.Set("Tags", "rotating_light,warning")
|
|
})
|
|
}
|