arnaucube
arnaucube/twitterDM-to-matrixPublic Self-hosted repository
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}