twitterDM-to-matrix/matrix.go
matrix.goRaw
1package main
2
3import (
4 "encoding/json"
5 "fmt"
6 "io/ioutil"
7 "log"
8 "math/rand"
9 "net/http"
10 "strconv"
11 "strings"
12)
13
14//MatrixConfig stores the data from json matrixConfig.json file
15type MatrixConfig struct {
16 RoomId string `json:"room_id"`
17 User string `json:"user"`
18 Password string `json:"password"`
19 Server string `json:"server"`
20}
21
22//MatrixToken stores the token data from matrix
23type MatrixToken struct {
24 AccessToken string `json:"access_token"`
25 Server string `json:"server"`
26 UserId string `json:"user_id"`
27 DeviceId string `json:"device_id"`
28}
29
30var matrixConfig MatrixConfig
31var matrixToken MatrixToken
32
33func readMatrixConfig() {
34 file, e := ioutil.ReadFile("matrixConfig.json")
35 if e != nil {
36 fmt.Println("error:", e)
37 }
38 content := string(file)
39 json.Unmarshal([]byte(content), &matrixConfig)
40}
41
42func loginMatrix() {
43 url := matrixConfig.Server + "/_matrix/client/r0/login"
44 jsonStr := `{
45 "type":"m.login.password",
46 "user":"` + matrixConfig.User + `",
47 "password":"` + matrixConfig.Password + `"
48 }`
49 b := strings.NewReader(jsonStr)
50 req, _ := http.NewRequest("POST", url, b)
51 req.Header.Set("Content-Type", "application/json")
52 res, err := http.DefaultClient.Do(req)
53 if err != nil {
54 log.Println(err)
55 }
56 defer res.Body.Close()
57 body, _ := ioutil.ReadAll(res.Body)
58
59 json.Unmarshal([]byte(body), &matrixToken)
60
61}
62func matrixSendMsg(senderScreenName string, message string, createdAt string) {
63 txnId := strconv.Itoa(rand.Int())
64 c.Green(txnId)
65
66 anonName := anonymousName(senderScreenName, createdAt)
67 hour := dateToHour(createdAt)
68
69 url := matrixConfig.Server + "/_matrix/client/r0/rooms/" + matrixConfig.RoomId + "/send/m.room.message/" + txnId + "?access_token=" + matrixToken.AccessToken
70 jsonStr := `{
71 "body":"[NEW DM] - at ` + hour + `h\n@` + anonName + `: ` + message + `",
72 "msgtype":"m.notice"
73 }`
74 b := strings.NewReader(jsonStr)
75 req, _ := http.NewRequest("PUT", url, b)
76 req.Header.Set("Content-Type", "application/json")
77 res, err := http.DefaultClient.Do(req)
78 if err != nil {
79 log.Println(err)
80 }
81 defer res.Body.Close()
82 body, _ := ioutil.ReadAll(res.Body)
83
84 fmt.Println(string(body))
85
86 fmt.Println(createdAt)
87 fmt.Print("received DM sent to Matrix: ")
88 c.Green(message)
89
90}