aboutsummaryrefslogtreecommitdiff
path: root/web/revolt
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-06-13 08:48:37 -0400
committerXe Iaso <me@xeiaso.net>2023-06-13 08:48:37 -0400
commit0ef92708d95d1b3c741a26d5680c9590cf4b97e0 (patch)
treea6ea9ddfa4c034d3db96a1c552d31b3385b7bc83 /web/revolt
parent8799ea3a9ddfde94dca7541b6c91a55641b59e16 (diff)
downloadx-0ef92708d95d1b3c741a26d5680c9590cf4b97e0.tar.xz
x-0ef92708d95d1b3c741a26d5680c9590cf4b97e0.zip
web/revolt: start to thread through contexts
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'web/revolt')
-rw-r--r--web/revolt/client.go5
-rw-r--r--web/revolt/message.go4
-rw-r--r--web/revolt/websocket.go33
3 files changed, 34 insertions, 8 deletions
diff --git a/web/revolt/client.go b/web/revolt/client.go
index b58479f..e7fdc72 100644
--- a/web/revolt/client.go
+++ b/web/revolt/client.go
@@ -25,6 +25,7 @@ type Client struct {
OnUnknownEventFunctions []func(message string)
OnReadyFunctions []func()
OnMessageFunctions []func(message *Message)
+ OnMessageAppendFunctions []func(channelID, messageID string, payload map[string]any)
OnMessageUpdateFunctions []func(channel_id, message_id string, payload map[string]interface{})
OnMessageDeleteFunctions []func(channel_id, message_id string)
OnChannelCreateFunctions []func(channel *Channel)
@@ -62,6 +63,10 @@ func (c *Client) OnMessage(fn func(message *Message)) {
c.OnMessageFunctions = append(c.OnMessageFunctions, fn)
}
+func (c *Client) OnMessageAppend(fn func(channelID, messageID string, payload map[string]any)) {
+ c.OnMessageAppendFunctions = append(c.OnMessageAppendFunctions, fn)
+}
+
// On message update event will run when someone updates a message.
func (c *Client) OnMessageUpdate(fn func(channel_id, message_id string, payload map[string]interface{})) {
c.OnMessageUpdateFunctions = append(c.OnMessageUpdateFunctions, fn)
diff --git a/web/revolt/message.go b/web/revolt/message.go
index 6b0b7e9..909bfcb 100644
--- a/web/revolt/message.go
+++ b/web/revolt/message.go
@@ -16,7 +16,7 @@ type Message struct {
Nonce string `json:"nonce"`
ChannelId string `json:"channel"`
AuthorId string `json:"author"`
- Content interface{} `json:"content"`
+ Content *string `json:"content"`
Edited interface{} `json:"edited"`
Embeds []*MessageEmbed `json:"embeds"`
Attachments []*Attachment `json:"attachments"`
@@ -101,7 +101,7 @@ func (m *Message) Edit(content string) error {
return err
}
- m.Content = content
+ m.Content = &content
return nil
}
diff --git a/web/revolt/websocket.go b/web/revolt/websocket.go
index e72ada5..44bf798 100644
--- a/web/revolt/websocket.go
+++ b/web/revolt/websocket.go
@@ -1,6 +1,7 @@
package revolt
import (
+ "context"
"encoding/json"
"fmt"
"log"
@@ -8,9 +9,11 @@ import (
"time"
"github.com/sacOO7/gowebsocket"
+ "within.website/ln"
+ "within.website/ln/opname"
)
-func (c *Client) Start() {
+func (c *Client) Start(ctx context.Context) {
// Create new socket
c.Socket = gowebsocket.New(WS_URL)
c.HTTP = &http.Client{}
@@ -44,12 +47,17 @@ func (c *Client) Start() {
}
// Handle events.
- c.handleEvents(rawData, message)
+ c.handleEvents(ctx, rawData, message)
// fmt.Println(message)
}
// Start connection.
c.Socket.Connect()
+
+ go func() {
+ <-ctx.Done()
+ c.Close()
+ }()
}
// Handle on connected.
@@ -75,15 +83,17 @@ func (c *Client) ping() {
}
// Handle events.
-func (c *Client) handleEvents(rawData *struct {
+func (c *Client) handleEvents(ctx context.Context, rawData *struct {
Type string `json:"type"`
}, message string) {
type junk struct {
Channel string `json:"channel"`
- ID string `json:"id"`
- User string `json:"user"`
+ ID string `json:"id"`
+ User string `json:"user"`
}
+ ctx = opname.With(ctx, "handleEvents")
+
switch rawData.Type {
case "Pong", "Authenticated": // ignore these messages
case "Ready":
@@ -108,6 +118,17 @@ func (c *Client) handleEvents(rawData *struct {
for _, i := range c.OnMessageFunctions {
i(msgData)
}
+ case "MessageAppend":
+ data := struct{
+ ChannelId string `json:"channel"`
+ MessageId string `json:"id"`
+ Append map[string]interface{} `json:"append"`
+ }{}
+
+ if err := json.Unmarshal([]byte(message), &data); err != nil {
+ ln.Error(ctx, err, ln.F{"type": rawData.Type})
+ fmt.Printf("Unexcepted Error: %s", err)
+ }
case "MessageUpdate":
// Message update event.
data := &struct {
@@ -248,7 +269,7 @@ func (c *Client) handleEvents(rawData *struct {
Payload map[string]interface{} `json:"data"`
}{}
- if err := json.Unmarshal([]byte(message), data); err != nil {
+ if err := json.Unmarshal([]byte(message), data); err != nil {
fmt.Printf("Unexcepted Error: %s", err)
}