diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-06-13 09:12:14 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-06-13 09:12:14 -0400 |
| commit | dc43b4c55db696304a4045705cb772409f0a67a6 (patch) | |
| tree | 0c474c9455ba7ec6c9b32c8ae5e701d08b49446c /web | |
| parent | 0ef92708d95d1b3c741a26d5680c9590cf4b97e0 (diff) | |
| download | x-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.go | 81 | ||||
| -rw-r--r-- | web/revolt/message.go | 11 | ||||
| -rw-r--r-- | web/revolt/other.go | 1 | ||||
| -rw-r--r-- | web/revolt/websocket.go | 44 |
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) } } } |
