aboutsummaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-06-13 09:12:14 -0400
committerXe Iaso <me@xeiaso.net>2023-06-13 09:12:14 -0400
commitdc43b4c55db696304a4045705cb772409f0a67a6 (patch)
tree0c474c9455ba7ec6c9b32c8ae5e701d08b49446c /web
parent0ef92708d95d1b3c741a26d5680c9590cf4b97e0 (diff)
downloadx-dc43b4c55db696304a4045705cb772409f0a67a6.tar.xz
x-dc43b4c55db696304a4045705cb772409f0a67a6.zip
web/revolt: thread contexts through, masquerade support
Also start working on integrating ln into the stack Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'web')
-rw-r--r--web/revolt/client.go81
-rw-r--r--web/revolt/message.go11
-rw-r--r--web/revolt/other.go1
-rw-r--r--web/revolt/websocket.go44
4 files changed, 75 insertions, 62 deletions
diff --git a/web/revolt/client.go b/web/revolt/client.go
index e7fdc72..353377b 100644
--- a/web/revolt/client.go
+++ b/web/revolt/client.go
@@ -1,6 +1,7 @@
package revolt
import (
+ "context"
"encoding/json"
"fmt"
"net/http"
@@ -22,26 +23,26 @@ type Client struct {
Cache *Cache
// Event Functions
- 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)
- OnChannelUpdateFunctions []func(channel_id, clear string, payload map[string]interface{})
- OnChannelDeleteFunctions []func(channel_id string)
- OnGroupCreateFunctions []func(group *Group)
- OnGroupMemberAddedFunctions []func(group_id, user_id string)
- OnGroupMemberRemovedFunctions []func(group_id, user_id string)
- OnChannelStartTypingFunctions []func(channel_id, user_id string)
- OnChannelStopTypingFunctions []func(channel_id, user_id string)
- OnServerCreateFunctions []func(server_id *Server)
- OnServerUpdateFunctions []func(server_id, clear string, payload map[string]interface{})
- OnServerDeleteFunctions []func(server_id string)
- OnServerMemberUpdateFunctions []func(server_id, clear string, payload map[string]interface{})
- OnServerMemberJoinFunctions []func(server_id, user_id string)
- OnServerMemberLeaveFunctions []func(server_id, user_id string)
+ OnUnknownEventFunctions []func(ctx context.Context, message string)
+ OnReadyFunctions []func(ctx context.Context)
+ OnMessageFunctions []func(ctx context.Context, message *Message)
+ OnMessageAppendFunctions []func(ctx context.Context, channelID, messageID string, payload map[string]any)
+ OnMessageUpdateFunctions []func(ctx context.Context, channelID, messageID string, payload map[string]interface{})
+ OnMessageDeleteFunctions []func(ctx context.Context, channelID, messageID string)
+ OnChannelCreateFunctions []func(ctx context.Context, channel *Channel)
+ OnChannelUpdateFunctions []func(ctx context.Context, channelID, clear string, payload map[string]interface{})
+ OnChannelDeleteFunctions []func(ctx context.Context, channelID string)
+ OnGroupCreateFunctions []func(ctx context.Context, group *Group)
+ OnGroupMemberAddedFunctions []func(ctx context.Context, groupID, userID string)
+ OnGroupMemberRemovedFunctions []func(ctx context.Context, groupID, userID string)
+ OnChannelStartTypingFunctions []func(ctx context.Context, channelID, userID string)
+ OnChannelStopTypingFunctions []func(ctx context.Context, channelID, userID string)
+ OnServerCreateFunctions []func(ctx context.Context, serverID *Server)
+ OnServerUpdateFunctions []func(ctx context.Context, serverID, clear string, payload map[string]interface{})
+ OnServerDeleteFunctions []func(ctx context.Context, serverID string)
+ OnServerMemberUpdateFunctions []func(ctx context.Context, serverID, clear string, payload map[string]interface{})
+ OnServerMemberJoinFunctions []func(ctx context.Context, serverID, userID string)
+ OnServerMemberLeaveFunctions []func(ctx context.Context, serverID, userID string)
}
// Self bot struct.
@@ -54,101 +55,101 @@ type SelfBot struct {
}
// On ready event will run when websocket connection is started and bot is ready to work.
-func (c *Client) OnReady(fn func()) {
+func (c *Client) OnReady(fn func(context.Context)) {
c.OnReadyFunctions = append(c.OnReadyFunctions, fn)
}
// On message event will run when someone sends a message.
-func (c *Client) OnMessage(fn func(message *Message)) {
+func (c *Client) OnMessage(fn func(ctx context.Context, message *Message)) {
c.OnMessageFunctions = append(c.OnMessageFunctions, fn)
}
-func (c *Client) OnMessageAppend(fn func(channelID, messageID string, payload map[string]any)) {
+func (c *Client) OnMessageAppend(fn func(ctx context.Context, 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{})) {
+func (c *Client) OnMessageUpdate(fn func(ctx context.Context, channel_id, message_id string, payload map[string]interface{})) {
c.OnMessageUpdateFunctions = append(c.OnMessageUpdateFunctions, fn)
}
// On message delete event will run when someone deletes a message.
-func (c *Client) OnMessageDelete(fn func(channel_id, message_id string)) {
+func (c *Client) OnMessageDelete(fn func(ctx context.Context, channel_id, message_id string)) {
c.OnMessageDeleteFunctions = append(c.OnMessageDeleteFunctions, fn)
}
// On channel create event will run when someone creates a channel.
-func (c *Client) OnChannelCreate(fn func(channel *Channel)) {
+func (c *Client) OnChannelCreate(fn func(ctx context.Context, channel *Channel)) {
c.OnChannelCreateFunctions = append(c.OnChannelCreateFunctions, fn)
}
// On channel update event will run when someone updates a channel.
-func (c *Client) OnChannelUpdate(fn func(channel_id, clear string, payload map[string]interface{})) {
+func (c *Client) OnChannelUpdate(fn func(ctx context.Context, channel_id, clear string, payload map[string]interface{})) {
c.OnChannelUpdateFunctions = append(c.OnChannelUpdateFunctions, fn)
}
// On channel delete event will run when someone deletes a channel.
-func (c *Client) OnChannelDelete(fn func(channel_id string)) {
+func (c *Client) OnChannelDelete(fn func(ctx context.Context, channel_id string)) {
c.OnChannelDeleteFunctions = append(c.OnChannelDeleteFunctions, fn)
}
// On group channel create event will run when someones creates a group channel.
-func (c *Client) OnGroupCreate(fn func(group *Group)) {
+func (c *Client) OnGroupCreate(fn func(ctx context.Context, group *Group)) {
c.OnGroupCreateFunctions = append(c.OnGroupCreateFunctions, fn)
}
// On group member added will run when someone is added to a group channel.
-func (c *Client) OnGroupMemberAdded(fn func(group_id string, user_id string)) {
+func (c *Client) OnGroupMemberAdded(fn func(ctx context.Context, group_id string, user_id string)) {
c.OnGroupMemberAddedFunctions = append(c.OnGroupMemberAddedFunctions, fn)
}
// On group member removed will run when someone is removed from a group channel.
-func (c *Client) OnGroupMemberRemoved(fn func(group_id string, user_id string)) {
+func (c *Client) OnGroupMemberRemoved(fn func(ctx context.Context, group_id string, user_id string)) {
c.OnGroupMemberRemovedFunctions = append(c.OnGroupMemberRemovedFunctions, fn)
}
// On unknown event will run when client gets a unknown event.
-func (c *Client) OnUnknownEvent(fn func(message string)) {
+func (c *Client) OnUnknownEvent(fn func(ctx context.Context, message string)) {
c.OnUnknownEventFunctions = append(c.OnUnknownEventFunctions, fn)
}
// On channel start typing will run when someone starts to type a message.
-func (c *Client) OnChannelStartTyping(fn func(channel_id, user_id string)) {
+func (c *Client) OnChannelStartTyping(fn func(ctx context.Context, channel_id, user_id string)) {
c.OnChannelStartTypingFunctions = append(c.OnChannelStartTypingFunctions, fn)
}
// On channel stop typing will run when someone stops the typing status.
-func (c *Client) OnChannelStopTyping(fn func(channel_id, user_id string)) {
+func (c *Client) OnChannelStopTyping(fn func(ctx context.Context, channel_id, user_id string)) {
c.OnChannelStopTypingFunctions = append(c.OnChannelStopTypingFunctions, fn)
}
// On server create event will run when someone creates a server.
-func (c *Client) OnServerCreate(fn func(server *Server)) {
+func (c *Client) OnServerCreate(fn func(ctx context.Context, server *Server)) {
c.OnServerCreateFunctions = append(c.OnServerCreateFunctions, fn)
}
// On server update will run when someone updates a server.
-func (c *Client) OnServerUpdate(fn func(server_id, clear string, payload map[string]interface{})) {
+func (c *Client) OnServerUpdate(fn func(ctx context.Context, server_id, clear string, payload map[string]interface{})) {
c.OnServerUpdateFunctions = append(c.OnServerUpdateFunctions, fn)
}
// On server delete will run when someone deletes a server.
-func (c *Client) OnServerDelete(fn func(server_id string)) {
+func (c *Client) OnServerDelete(fn func(ctx context.Context, server_id string)) {
c.OnServerDeleteFunctions = append(c.OnServerDeleteFunctions, fn)
}
// On server member update will run when a server member updates.
-func (c *Client) OnServerMemberUpdate(fn func(server_id, clear string, payload map[string]interface{})) {
+func (c *Client) OnServerMemberUpdate(fn func(ctx context.Context, server_id, clear string, payload map[string]interface{})) {
c.OnServerMemberUpdateFunctions = append(c.OnServerMemberUpdateFunctions, fn)
}
// On server member join will run when someone joins to the server.
-func (c *Client) OnServerMemberJoin(fn func(server_id string, user_id string)) {
+func (c *Client) OnServerMemberJoin(fn func(ctx context.Context, server_id string, user_id string)) {
c.OnServerMemberJoinFunctions = append(c.OnServerMemberJoinFunctions, fn)
}
// On server member leave will run when someone left from server.
-func (c *Client) OnServerMemberLeave(fn func(server_id string, user_id string)) {
+func (c *Client) OnServerMemberLeave(fn func(ctx context.Context, server_id string, user_id string)) {
c.OnServerMemberLeaveFunctions = append(c.OnServerMemberLeaveFunctions, fn)
}
diff --git a/web/revolt/message.go b/web/revolt/message.go
index 909bfcb..cf7a6dc 100644
--- a/web/revolt/message.go
+++ b/web/revolt/message.go
@@ -16,12 +16,19 @@ type Message struct {
Nonce string `json:"nonce"`
ChannelId string `json:"channel"`
AuthorId string `json:"author"`
- Content *string `json:"content"`
+ Content string `json:"content,omitempty"`
Edited interface{} `json:"edited"`
Embeds []*MessageEmbed `json:"embeds"`
Attachments []*Attachment `json:"attachments"`
Mentions []string `json:"mentions"`
Replies []string `json:"replies"`
+ Masquerade *Masquerade `json:"masquerade"`
+}
+
+type Masquerade struct {
+ Name string `json:"name"`
+ AvatarURL string `json:"avatar"`
+ Color string `json:"colour,omitempty"`
}
// Attachment struct.
@@ -101,7 +108,7 @@ func (m *Message) Edit(content string) error {
return err
}
- m.Content = &content
+ m.Content = content
return nil
}
diff --git a/web/revolt/other.go b/web/revolt/other.go
index cde9b1b..179ee06 100644
--- a/web/revolt/other.go
+++ b/web/revolt/other.go
@@ -13,6 +13,7 @@ type SendMessage struct {
Replies []Replies `json:"replies,omitempty"`
Embeds []SendableEmbed `json:"embeds,omitempty"`
DeleteAfter uint `json:"-"`
+ Masquerade *Masquerade `json:"masquerade,omitempty"`
}
type SendableEmbed struct {
diff --git a/web/revolt/websocket.go b/web/revolt/websocket.go
index 44bf798..c534d45 100644
--- a/web/revolt/websocket.go
+++ b/web/revolt/websocket.go
@@ -92,7 +92,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
User string `json:"user"`
}
- ctx = opname.With(ctx, "handleEvents")
+ ctx = opname.With(ctx, "handleEvents."+rawData.Type)
switch rawData.Type {
case "Pong", "Authenticated": // ignore these messages
@@ -103,7 +103,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
// onReady event
if c.OnReadyFunctions != nil {
for _, i := range c.OnReadyFunctions {
- i()
+ i(ctx)
}
}
case "Message":
@@ -116,7 +116,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnMessageFunctions {
- i(msgData)
+ i(ctx, msgData)
}
case "MessageAppend":
data := struct{
@@ -129,6 +129,10 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
ln.Error(ctx, err, ln.F{"type": rawData.Type})
fmt.Printf("Unexcepted Error: %s", err)
}
+
+ for _, i := range c.OnMessageAppendFunctions {
+ i(ctx, data.ChannelId, data.MessageId, data.Append)
+ }
case "MessageUpdate":
// Message update event.
data := &struct {
@@ -142,7 +146,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnMessageUpdateFunctions {
- i(data.ChannelId, data.MessageId, data.Payload)
+ i(ctx, data.ChannelId, data.MessageId, data.Payload)
}
case "MessageDelete":
// Message delete event.
@@ -153,7 +157,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnMessageDeleteFunctions {
- i(data.Channel, data.ID)
+ i(ctx, data.Channel, data.ID)
}
case "ChannelCreate":
// Channel create event.
@@ -165,7 +169,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnChannelCreateFunctions {
- i(channelData)
+ i(ctx, channelData)
}
case "ChannelUpdate":
// Channel update event.
@@ -180,7 +184,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnChannelUpdateFunctions {
- i(data.ChannelId, data.Clear, data.Payload)
+ i(ctx, data.ChannelId, data.Clear, data.Payload)
}
case "ChannelDelete":
// Channel delete event.
@@ -191,7 +195,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnChannelDeleteFunctions {
- i(data.ID)
+ i(ctx, data.ID)
}
case "GroupCreate":
// Group channel create event.
@@ -203,7 +207,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnGroupCreateFunctions {
- i(groupChannelData)
+ i(ctx, groupChannelData)
}
case "GroupMemeberAdded":
// Group member added event.
@@ -214,7 +218,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnGroupMemberAddedFunctions {
- i(data.ID, data.User)
+ i(ctx, data.ID, data.User)
}
case "GroupMemberRemoved":
// Group member removed event.
@@ -225,7 +229,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnGroupMemberRemovedFunctions {
- i(data.ID, data.User)
+ i(ctx, data.ID, data.User)
}
case "ChannelStartTyping":
// Channel start typing event.
@@ -236,7 +240,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnChannelStartTypingFunctions {
- i(data.ID, data.User)
+ i(ctx, data.ID, data.User)
}
case "ChannelStopTyping":
// Channel stop typing event.
@@ -247,7 +251,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnChannelStopTypingFunctions {
- i(data.ID, data.User)
+ i(ctx, data.ID, data.User)
}
case "ServerCreate":
// Server create event.
@@ -259,7 +263,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnServerCreateFunctions {
- i(serverData)
+ i(ctx, serverData)
}
case "ServerUpdate":
// Server update event.
@@ -274,7 +278,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnServerUpdateFunctions {
- i(data.ServerId, data.Clear, data.Payload)
+ i(ctx, data.ServerId, data.Clear, data.Payload)
}
case "ServerDelete":
// Server delete event.
@@ -285,7 +289,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnServerDeleteFunctions {
- i(data.ID)
+ i(ctx, data.ID)
}
case "ServerMemberUpdate":
// Member update event.
@@ -300,7 +304,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnServerMemberUpdateFunctions {
- i(data.ServerId, data.Clear, data.Payload)
+ i(ctx, data.ServerId, data.Clear, data.Payload)
}
case "ServerMemberJoin":
// Member join event.
@@ -311,7 +315,7 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnServerMemberJoinFunctions {
- i(data.ID, data.User)
+ i(ctx, data.ID, data.User)
}
case "ServerMemberLeave":
// Member left event.
@@ -322,14 +326,14 @@ func (c *Client) handleEvents(ctx context.Context, rawData *struct {
}
for _, i := range c.OnServerMemberLeaveFunctions {
- i(data.ID, data.User)
+ i(ctx, data.ID, data.User)
}
default:
log.Printf("unknown event %s", rawData.Type)
// Unknown event.
if c.OnUnknownEventFunctions != nil {
for _, i := range c.OnUnknownEventFunctions {
- i(message)
+ i(ctx, message)
}
}
}