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 url := matrixConfig.Server + "/_matrix/client/r0/rooms/" + matrixConfig.RoomId + "/send/m.room.message/" + txnId + "?access_token=" + matrixToken.AccessToken
66 jsonStr := `{
67 "body":"[NEW DM] - at ` + createdAt + `\n@` + senderScreenName + `: ` + message + `",
68 "msgtype":"m.text"
69 }`
70 b := strings.NewReader(jsonStr)
71 req, _ := http.NewRequest("PUT", url, b)
72 req.Header.Set("Content-Type", "application/json")
73 res, err := http.DefaultClient.Do(req)
74 if err != nil {
75 log.Println(err)
76 }
77 defer res.Body.Close()
78 body, _ := ioutil.ReadAll(res.Body)
79
80 fmt.Println(string(body))
81
82 fmt.Println(createdAt)
83 fmt.Print("received DM sent to Matrix: ")
84 c.Green(message)
85
86}