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