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	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}