package matrixbot import ( "bytes" "encoding/json" "fmt" "io" "net/http" "os" ) type PusherRequest struct { AppDisplayName string `json:"app_display_name"` AppId string `json:"app_id"` Append bool `json:"append"` Data PusherData `json:"data"` DeviceDisplayName string `json:"device_display_name"` Kind string `json:"kind"` Lang string `json:"lang"` ProfileTag string `json:"profile_tag"` PushKey string `json:"pushkey"` } type PusherData struct { Format string `json:"format,omitempty"` Url string `json:"url"` } func SetPusher(token MatrixToken, pusher PusherRequest) error { body, err := json.Marshal(pusher) if err != nil { return err } fmt.Println(string(body)) request, err := http.NewRequest( http.MethodPost, "https://matrix-client.matrix.org/_matrix/client/v3/pushers/set", bytes.NewReader(body), ) if err != nil { panic(err) } request.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token.AccessToken)) response, err := http.DefaultClient.Do(request) if err != nil { return err } if response.StatusCode < 200 || response.StatusCode >= 300 { _, _ = io.Copy(os.Stdout, response.Body) return fmt.Errorf("request failed %d: %s", response.StatusCode, response.Status) } return err }