about summary refs log tree commit diff
path: root/pkg/discord/discord.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/discord/discord.go')
-rw-r--r--pkg/discord/discord.go94
1 files changed, 94 insertions, 0 deletions
diff --git a/pkg/discord/discord.go b/pkg/discord/discord.go
new file mode 100644
index 0000000..13de020
--- /dev/null
+++ b/pkg/discord/discord.go
@@ -0,0 +1,94 @@
+package discord
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"net/http"
+
+	"github.com/gorilla/websocket"
+)
+
+const DISCORD_URl = "https://discord.com/api/v9/"
+const USER_AGENT = "DiscordBot (https://jinx.rnrd.eu/, v0.0.0) Jinx"
+
+type Discord struct {
+	Token string
+}
+
+func NewClient(token string) *Discord {
+	return &Discord{
+		Token: token,
+	}
+}
+
+func (d *Discord) Connect() error {
+	gatewayURL, err := d.gateway()
+	if err != nil {
+		return err
+	}
+
+	fmt.Printf("Gateway: %s\n", gatewayURL)
+
+	connectHeader := http.Header{}
+	conn, _, err := websocket.DefaultDialer.Dial(gatewayURL, connectHeader)
+	if err != nil {
+		return err
+	}
+
+	defer conn.Close()
+
+	messageType, message, err := conn.ReadMessage()
+	if err != nil {
+		return err
+	}
+
+	fmt.Printf("Type: %d, Message: %s\n", messageType, message)
+
+	return nil
+}
+
+func (d *Discord) gateway() (string, error) {
+	url := DISCORD_URl + "gateway"
+
+	req, err := http.NewRequest("GET", url, nil)
+	if err != nil {
+		return "", err
+	}
+
+	req.Header.Set("Authorization", d.Token)
+	req.Header.Set("Content-Type", "application/json")
+	req.Header.Set("User-Agent", USER_AGENT)
+
+	resp, err := http.DefaultClient.Do(req)
+	if err != nil {
+		return "", err
+	}
+
+	defer resp.Body.Close()
+
+	var buf bytes.Buffer
+	_, err = buf.ReadFrom(resp.Body)
+	if err != nil {
+		return "", err
+	}
+
+	switch resp.StatusCode {
+	case 200:
+	default:
+		return "", errors.New("Gateway response status code: " + resp.Status)
+	}
+
+	body := struct {
+		URL string `json:"url"`
+	}{}
+
+	err = json.Unmarshal(buf.Bytes(), &body)
+	if err != nil {
+		return "", err
+	}
+
+	url = body.URL + "?v=9&encoding=json"
+	return url, nil
+}