package main import ( "encoding/json" "fmt" "io/ioutil" "log" "math/rand" "net/http" "strconv" "strings" ) //MatrixConfig stores the data from json matrixConfig.json file type MatrixConfig struct { RoomId string `json:"room_id"` User string `json:"user"` Password string `json:"password"` Server string `json:"server"` } //MatrixToken stores the token data from matrix type MatrixToken struct { AccessToken string `json:"access_token"` Server string `json:"server"` UserId string `json:"user_id"` DeviceId string `json:"device_id"` } var matrixConfig MatrixConfig var matrixToken MatrixToken func readMatrixConfig() { file, e := ioutil.ReadFile("matrixConfig.json") if e != nil { fmt.Println("error:", e) } content := string(file) json.Unmarshal([]byte(content), &matrixConfig) } func loginMatrix() { url := matrixConfig.Server + "/_matrix/client/r0/login" jsonStr := `{ "type":"m.login.password", "user":"` + matrixConfig.User + `", "password":"` + matrixConfig.Password + `" }` b := strings.NewReader(jsonStr) req, _ := http.NewRequest("POST", url, b) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { log.Println(err) } defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) json.Unmarshal([]byte(body), &matrixToken) } func matrixSendMsg(senderScreenName string, message string, createdAt string) { txnId := strconv.Itoa(rand.Int()) c.Green(txnId) anonName := anonymousName(senderScreenName, createdAt) hour := dateToHour(createdAt) url := matrixConfig.Server + "/_matrix/client/r0/rooms/" + matrixConfig.RoomId + "/send/m.room.message/" + txnId + "?access_token=" + matrixToken.AccessToken jsonStr := `{ "body":"[NEW DM] - at ` + hour + `h\n@` + anonName + `: ` + message + `", "msgtype":"m.notice" }` b := strings.NewReader(jsonStr) req, _ := http.NewRequest("PUT", url, b) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { log.Println(err) } defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(string(body)) fmt.Println(createdAt) fmt.Print("received DM sent to Matrix: ") c.Green(message) }