diff options
Diffstat (limited to 'pkg/discord/rest.go')
| -rw-r--r-- | pkg/discord/rest.go | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/pkg/discord/rest.go b/pkg/discord/rest.go deleted file mode 100644 index 438d8d1..0000000 --- a/pkg/discord/rest.go +++ /dev/null @@ -1,111 +0,0 @@ -package discord - -import ( - "bytes" - "encoding/json" - "errors" - "net/http" - "time" -) - -const DISCORD_URl = "https://discord.com/api/v9/" -const USER_AGENT = "DiscordBot (https://jinx.rnrd.eu/, v0.0.0) Jinx" - -type REST interface { - Gateway() (string, error) - - SendMessage(channelID Snowflake, content string) error -} - -var _ REST = &RESTImpl{} - -type RESTImpl struct { - token string - client *http.Client -} - -func NewREST(token string) *RESTImpl { - return &RESTImpl{ - token: token, - client: &http.Client{ - Timeout: time.Second * 5, - }, - } -} - -func (r *RESTImpl) Gateway() (string, error) { - type gatewayResponse struct { - URL string `json:"url"` - } - - res, err := request[gatewayResponse](r, "GET", url("gateway"), nil) - if err != nil { - return "", err - } - - return res.URL + "?v=9&encoding=json", nil -} - -func (r *RESTImpl) SendMessage(channelID Snowflake, content string) error { - msg := struct { - Content string `json:"content"` - }{ - Content: content, - } - - _, err := request[any](r, "POST", url("channels/"+string(channelID)+"/messages"), msg) - if err != nil { - return err - } - - return nil -} - -func request[D any](r *RESTImpl, method string, url string, data any) (*D, error) { - var raw []byte - if data != nil { - var err error - raw, err = json.Marshal(data) - if err != nil { - return nil, err - } - } - - req, err := http.NewRequest(method, url, bytes.NewBuffer(raw)) - if err != nil { - return nil, err - } - - req.Header.Set("Authorization", r.token) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("User-Agent", USER_AGENT) - - resp, err := r.client.Do(req) - if err != nil { - return nil, err - } - - defer resp.Body.Close() - - switch resp.StatusCode { - case 200: - default: - return nil, errors.New("unexpected status code: " + resp.Status) - } - - var buf bytes.Buffer - if _, err = buf.ReadFrom(resp.Body); err != nil { - return nil, err - } - - var res D - if err = json.Unmarshal(buf.Bytes(), &res); err != nil { - return nil, err - } - - return &res, nil -} - -func url(path string) string { - return DISCORD_URl + path -} |
