aboutsummaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-06-16 11:36:13 -0400
committerXe Iaso <me@xeiaso.net>2023-06-16 11:36:13 -0400
commitf3d2b8386a188041b823d02b65dad347a324a089 (patch)
tree33f54cee9e8da6c48715f310c1279cc215c2d781 /web
parent636850d4e9b025d4f799ca5fd2aa7a936c1971f0 (diff)
downloadx-f3d2b8386a188041b823d02b65dad347a324a089.tar.xz
x-f3d2b8386a188041b823d02b65dad347a324a089.zip
fix the bot
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'web')
-rw-r--r--web/revolt/client.go4
-rw-r--r--web/revolt/http.go7
-rw-r--r--web/revolt/server.go12
-rw-r--r--web/revolt/websocket.go18
4 files changed, 22 insertions, 19 deletions
diff --git a/web/revolt/client.go b/web/revolt/client.go
index c68a090..60cc001 100644
--- a/web/revolt/client.go
+++ b/web/revolt/client.go
@@ -5,6 +5,7 @@ import (
"encoding/json"
"fmt"
"net/http"
+ "time"
"github.com/sacOO7/gowebsocket"
)
@@ -18,6 +19,7 @@ func New(token string) *Client {
Token: token,
BaseURL: "https://api.revolt.chat",
WSURL: "wss://ws.revolt.chat",
+ Ticker: time.NewTicker(3 * time.Second),
}
}
@@ -30,6 +32,7 @@ func NewWithEndpoint(token, baseURL, wsURL string) *Client {
Token: token,
BaseURL: baseURL,
WSURL: wsURL,
+ Ticker: time.NewTicker(3 * time.Second),
}
}
@@ -42,6 +45,7 @@ type Client struct {
Cache *Cache
BaseURL string
WSURL string
+ Ticker *time.Ticker
}
// Self bot struct.
diff --git a/web/revolt/http.go b/web/revolt/http.go
index 6be6853..b7293d2 100644
--- a/web/revolt/http.go
+++ b/web/revolt/http.go
@@ -3,15 +3,18 @@ package revolt
import (
"bytes"
"context"
- "fmt"
"io"
"net/http"
+
+ "within.website/x/web"
)
// Send http request
func (c Client) Request(ctx context.Context, method, path string, data []byte) ([]byte, error) {
reqBody := bytes.NewBuffer(data)
+ <-c.Ticker.C
+
// Prepare request
req, err := http.NewRequestWithContext(ctx, method, c.BaseURL+path, reqBody)
if err != nil {
@@ -42,7 +45,7 @@ func (c Client) Request(ctx context.Context, method, path string, data []byte) (
}
if !(resp.StatusCode >= 200 && resp.StatusCode < 300) {
- return []byte{}, fmt.Errorf("%s: %s", resp.Status, body)
+ return []byte{}, web.NewError(200, resp)
}
return body, nil
diff --git a/web/revolt/server.go b/web/revolt/server.go
index 06652d2..6e5fe9b 100644
--- a/web/revolt/server.go
+++ b/web/revolt/server.go
@@ -295,8 +295,8 @@ func (c *Client) ServerSetRolePermissions(ctx context.Context, serverID, roleID
}
// Create a new role for server.
-// Returns string (role id), uint (server perms), uint (channel perms) and error.
-func (c *Client) ServerCreateRole(ctx context.Context, serverID, name string) (string, uint, uint, error) {
+// Returns string (role id) and error.
+func (c *Client) ServerCreateRole(ctx context.Context, serverID, name string) (string, error) {
role := &struct {
ID string `json:"id"`
Permissions []uint `json:"permissions"`
@@ -306,20 +306,20 @@ func (c *Client) ServerCreateRole(ctx context.Context, serverID, name string) (s
"name": name,
})
if err != nil {
- return role.ID, 0, 0, err
+ return role.ID, err
}
data, err = c.Request(ctx, "POST", "/servers/"+serverID+"/roles", data)
if err != nil {
- return role.ID, 0, 0, err
+ return role.ID, err
}
err = json.Unmarshal(data, role)
if err != nil {
- return role.ID, 0, 0, err
+ return role.ID, err
}
- return role.ID, role.Permissions[0], role.Permissions[1], nil
+ return role.ID, nil
}
// Edit a server role.
diff --git a/web/revolt/websocket.go b/web/revolt/websocket.go
index 1994b0a..87a35b4 100644
--- a/web/revolt/websocket.go
+++ b/web/revolt/websocket.go
@@ -52,13 +52,14 @@ func (c *Client) doWebsocket(ctx context.Context, token, wsURL string, handler H
return err
}
- heartbeat, faster, slower := cardio.Heartbeat(opname.With(ctx, "websocket-pingloop"), time.Minute, 30*time.Second)
+ t := time.NewTicker(30 * time.Second)
+ defer t.Stop()
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return
- case <-heartbeat:
+ case <-t.C:
data, err := json.Marshal(struct {
Type string `json:"type"`
Data int `json:"data"`
@@ -68,16 +69,12 @@ func (c *Client) doWebsocket(ctx context.Context, token, wsURL string, handler H
})
if err != nil {
ln.Error(ctx, err, ln.Info("error marshaling ping"))
- slower()
continue
}
if err := conn.Write(ctx, websocket.MessageText, data); err != nil {
ln.Error(ctx, err, ln.Info("error writing ping"))
- slower()
continue
}
- default:
- faster()
}
}
}(ctx)
@@ -92,7 +89,7 @@ func (c *Client) doWebsocket(ctx context.Context, token, wsURL string, handler H
select {
case <-ctx.Done():
return
- case <-heartbeat:
+ case <-t.C:
if time.Since(lastMsgSeen) > 5*time.Minute {
conn.Close(websocket.StatusNormalClosure, "ping timeout")
return
@@ -111,13 +108,13 @@ func (c *Client) doWebsocket(ctx context.Context, token, wsURL string, handler H
}
lastMsgSeen = time.Now()
- if err := c.handleOneMessage(ctx, data, handler, slower); err != nil {
+ if err := c.handleOneMessage(ctx, data, handler); err != nil {
return err
}
}
}
-func (c *Client) handleOneMessage(ctx context.Context, data []byte, handler Handler, slower func()) error {
+func (c *Client) handleOneMessage(ctx context.Context, data []byte, handler Handler) error {
var msg typeResolver
if err := json.Unmarshal(data, &msg); err != nil {
return err
@@ -125,7 +122,6 @@ func (c *Client) handleOneMessage(ctx context.Context, data []byte, handler Hand
ctx = opname.With(ctx, msg.Type)
switch msg.Type {
case "Pong":
- slower()
case "Authenticated":
if err := handler.Authenticated(ctx); err != nil {
ln.Error(ctx, err, ln.Info("error in handler.Authenticated"))
@@ -149,7 +145,7 @@ func (c *Client) handleOneMessage(ctx context.Context, data []byte, handler Hand
return err
}
for _, msg := range bulk.Messages {
- if err := c.handleOneMessage(ctx, msg, handler, slower); err != nil {
+ if err := c.handleOneMessage(ctx, msg, handler); err != nil {
return err
}
}