package matrixbot import ( "bytes" "encoding/json" "fmt" "io" "net/http" "os" ) type ReadReceiptRequest struct { FullyRead string `json:"m.fully.read"` Read string `json:"m.read"` ReadPrivate string `json:"m.read.private"` } func SetReadReceipt(token MatrixToken, roomId string, messageId string) error { body, err := json.Marshal(ReadReceiptRequest{ FullyRead: messageId, Read: messageId, ReadPrivate: messageId, }) if err != nil { return err } request, err := http.NewRequest( http.MethodPost, fmt.Sprintf("https://matrix-client.matrix.org/_matrix/client/v3/rooms/%s/read_markers", roomId), 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 }