diff options
| author | Mel <einebeere@gmail.com> | 2022-04-02 02:42:12 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-04-03 23:50:05 +0200 |
| commit | dfeef2aad6fb25eadc13c12e1caea7160bfe6c3e (patch) | |
| tree | 23638e02600e7e17aa81c09afc8a6aff5c93a79e /pkg/discord/discord.go | |
| parent | 7040cd50ae9a1408d1bb7a7c23b961f48d864143 (diff) | |
| download | jinx-dfeef2aad6fb25eadc13c12e1caea7160bfe6c3e.tar.zst jinx-dfeef2aad6fb25eadc13c12e1caea7160bfe6c3e.zip | |
Contact Discord through WS
Diffstat (limited to 'pkg/discord/discord.go')
| -rw-r--r-- | pkg/discord/discord.go | 94 |
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 +} |
