ntfy/ntfy.go
2026-03-20 22:07:19 +13:00

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")
})
}