diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-06-16 11:36:13 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-06-16 11:36:13 -0400 |
| commit | f3d2b8386a188041b823d02b65dad347a324a089 (patch) | |
| tree | 33f54cee9e8da6c48715f310c1279cc215c2d781 /web | |
| parent | 636850d4e9b025d4f799ca5fd2aa7a936c1971f0 (diff) | |
| download | x-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.go | 4 | ||||
| -rw-r--r-- | web/revolt/http.go | 7 | ||||
| -rw-r--r-- | web/revolt/server.go | 12 | ||||
| -rw-r--r-- | web/revolt/websocket.go | 18 |
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 } } |
