Dernière activité 1687625905

d Brut
1func (w *GatewayClient) HandleEvent(event []byte, typ string) {
2 if w.EventHandlers.RawSinkFunc != nil {
3 w.EventHandlers.RawSinkFunc(w, event, typ)
4 }
5
6 if typ == "Bulk" {
7 // Bulk is a bit unique, special handling is required
8 err := w.HandleBulk(event)
9
10 if err != nil {
11 w.Logger.Error(
12 "bulk handler failed",
13 zap.Error(err),
14 )
15 }
16 }
17
18 if typ == "Auth" {
19 // Auth is a bit unique because of event it, handle it
20 err := w.HandleAuth(event)
21
22 if err != nil {
23 w.Logger.Error(
24 "auth handler failed",
25 zap.Error(err),
26 )
27 }
28 }
29
30 var err error
31 switch typ {
32 case "Error":
33 err = CreateEvent[events.Error](w, event, w.EventHandlers.Error)
34 case "Authenticated":
35 err = CreateEvent[events.Authenticated](w, event, w.EventHandlers.Authenticated)
36 case "Bulk":
37 err = CreateEvent[events.Bulk](w, event, w.EventHandlers.Bulk)
38 case "Pong":
39 err = CreateEvent[events.Pong](w, event, w.EventHandlers.Pong)
40 case "Ready":
41 err = CreateEvent[events.Ready](w, event, w.EventHandlers.Ready)
42 case "Message":
43 err = CreateEvent[events.Message](w, event, w.EventHandlers.Message)
44 case "MessageUpdate":
45 err = CreateEvent[events.MessageUpdate](w, event, w.EventHandlers.MessageUpdate)
46 case "MessageAppend":
47 err = CreateEvent[events.MessageAppend](w, event, w.EventHandlers.MessageAppend)
48 case "MessageDelete":
49 err = CreateEvent[events.MessageDelete](w, event, w.EventHandlers.MessageDelete)
50 case "MessageReact":
51 err = CreateEvent[events.MessageReact](w, event, w.EventHandlers.MessageReact)
52 case "MessageUnreact":
53 err = CreateEvent[events.MessageUnreact](w, event, w.EventHandlers.MessageUnreact)
54 case "MessageRemoveReaction":
55 err = CreateEvent[events.MessageRemoveReaction](w, event, w.EventHandlers.MessageRemoveReaction)
56 case "ChannelCreate":
57 err = CreateEvent[events.ChannelCreate](w, event, w.EventHandlers.ChannelCreate)
58 case "ChannelUpdate":
59 err = CreateEvent[events.ChannelUpdate](w, event, w.EventHandlers.ChannelUpdate)
60 case "ChannelDelete":
61 err = CreateEvent[events.ChannelDelete](w, event, w.EventHandlers.ChannelDelete)
62 case "ChannelGroupJoin":
63 err = CreateEvent[events.ChannelGroupJoin](w, event, w.EventHandlers.ChannelGroupJoin)
64 case "ChannelGroupLeave":
65 err = CreateEvent[events.ChannelGroupLeave](w, event, w.EventHandlers.ChannelGroupLeave)
66 case "ChannelStartTyping":
67 err = CreateEvent[events.ChannelStartTyping](w, event, w.EventHandlers.ChannelStartTyping)
68 case "ChannelStopTyping":
69 err = CreateEvent[events.ChannelStopTyping](w, event, w.EventHandlers.ChannelStopTyping)
70 case "ChannelAck":
71 err = CreateEvent[events.ChannelAck](w, event, w.EventHandlers.ChannelAck)
72 case "ServerCreate":
73 err = CreateEvent[events.ServerCreate](w, event, w.EventHandlers.ServerCreate)
74 case "ServerUpdate":
75 err = CreateEvent[events.ServerUpdate](w, event, w.EventHandlers.ServerUpdate)
76 case "ServerDelete":
77 err = CreateEvent[events.ServerDelete](w, event, w.EventHandlers.ServerDelete)
78 case "ServerMemberUpdate":
79 err = CreateEvent[events.ServerMemberUpdate](w, event, w.EventHandlers.ServerMemberUpdate)
80 case "ServerMemberJoin":
81 err = CreateEvent[events.ServerMemberJoin](w, event, w.EventHandlers.ServerMemberJoin)
82 case "ServerMemberLeave":
83 err = CreateEvent[events.ServerMemberLeave](w, event, w.EventHandlers.ServerMemberLeave)
84 case "ServerRoleUpdate":
85 err = CreateEvent[events.ServerRoleUpdate](w, event, w.EventHandlers.ServerRoleUpdate)
86 case "ServerRoleDelete":
87 err = CreateEvent[events.ServerRoleDelete](w, event, w.EventHandlers.ServerRoleDelete)
88 case "UserUpdate":
89 err = CreateEvent[events.UserUpdate](w, event, w.EventHandlers.UserUpdate)
90 case "UserRelationship":
91 err = CreateEvent[events.UserRelationship](w, event, w.EventHandlers.UserRelationship)
92 case "UserSettingsUpdate":
93 err = CreateEvent[events.UserSettingsUpdate](w, event, w.EventHandlers.UserSettingsUpdate)
94 case "UserPlatformWipe":
95 err = CreateEvent[events.UserPlatformWipe](w, event, w.EventHandlers.UserPlatformWipe)
96 case "EmojiCreate":
97 err = CreateEvent[events.EmojiCreate](w, event, w.EventHandlers.EmojiCreate)
98 case "EmojiDelete":
99 err = CreateEvent[events.EmojiDelete](w, event, w.EventHandlers.EmojiDelete)
100 case "WebhookCreate":
101 err = CreateEvent[events.WebhookCreate](w, event, w.EventHandlers.WebhookCreate)
102 case "WebhookUpdate":
103 err = CreateEvent[events.WebhookUpdate](w, event, w.EventHandlers.WebhookUpdate)
104 case "WebhookDelete":
105 err = CreateEvent[events.WebhookDelete](w, event, w.EventHandlers.WebhookDelete)
106 case "ReportCreate":
107 err = CreateEvent[events.ReportCreate](w, event, w.EventHandlers.ReportCreate)
108 case "Auth":
109 err = CreateEvent[events.Auth](w, event, w.EventHandlers.Auth)
110 default:
111 w.Logger.Warn("Unknown event type: " + typ)
112 }
113
114 if err != nil {
115 w.Logger.Error(
116 "Event handling failed",
117 zap.Error(err),
118 )
119 }
120}
121
122type EventHandlers struct {
123 // Not an actual revolt event, this is a sink that allows you to provide a function for raw event handling
124 RawSinkFunc func(w *GatewayClient, data []byte, typ string)
125
126 // An error occurred which meant you couldn't authenticate.
127 //
128 // <Note that grevolt handles these for you in general, but you can provide additional logic here>
129 Error func(w *GatewayClient, ctx *EventContext, e *events.Error)
130
131 // The server has authenticated your connection and you will shortly start receiving data.
132 Authenticated func(w *GatewayClient, ctx *EventContext, e *events.Authenticated)
133
134 // Several events have been sent, process each item of v as its own event.
135 //
136 // <Note that grevolt handles these for you in general, but you can provide additional logic here>
137 Bulk func(w *GatewayClient, ctx *EventContext, e *events.Bulk)
138
139 // Ping response from the server.
140 //
141 // <Note that grevolt handles these for you in general, but you can provide additional logic here>
142 Pong func(w *GatewayClient, ctx *EventContext, e *events.Pong)
143
144 // Data for use by client, data structures match the API specification
145 Ready func(w *GatewayClient, ctx *EventContext, e *events.Ready)
146
147 // Message received, the event object has the same schema as the Message object in the API with the addition of an event type.
148 Message func(w *GatewayClient, ctx *EventContext, e *events.Message)
149
150 // Message edited or otherwise updated.
151 MessageUpdate func(w *GatewayClient, ctx *EventContext, e *events.MessageUpdate)
152
153 // Message has data being appended to it.
154 MessageAppend func(w *GatewayClient, ctx *EventContext, e *events.MessageAppend)
155
156 // Message has been deleted.
157 MessageDelete func(w *GatewayClient, ctx *EventContext, e *events.MessageDelete)
158
159 // A reaction has been added to a message.
160 MessageReact func(w *GatewayClient, ctx *EventContext, e *events.MessageReact)
161
162 // A reaction has been removed from a message.
163 MessageUnreact func(w *GatewayClient, ctx *EventContext, e *events.MessageUnreact)
164
165 // A certain reaction has been removed from the message.
166 //
167 // <the difference between this and MessageUnreact is that
168 // this event is sent when a user with manage messages removes
169 // a reaction while MessageUnreact is sent when a user removes
170 // their own reaction>
171 MessageRemoveReaction func(w *GatewayClient, ctx *EventContext, e *events.MessageRemoveReaction)
172
173 // Channel created, the event object has the same schema as the Channel object in the API with the addition of an event type.
174 ChannelCreate func(w *GatewayClient, ctx *EventContext, e *events.ChannelCreate)
175
176 // Channel details updated.
177 ChannelUpdate func(w *GatewayClient, ctx *EventContext, e *events.ChannelUpdate)
178
179 // Channel has been deleted.
180 ChannelDelete func(w *GatewayClient, ctx *EventContext, e *events.ChannelDelete)
181
182 // A user has joined the group.
183 ChannelGroupJoin func(w *GatewayClient, ctx *EventContext, e *events.ChannelGroupJoin)
184
185 // A user has left the group.
186 ChannelGroupLeave func(w *GatewayClient, ctx *EventContext, e *events.ChannelGroupLeave)
187
188 // A user has started typing in this channel.
189 ChannelStartTyping func(w *GatewayClient, ctx *EventContext, e *events.ChannelStartTyping)
190
191 // A user has stopped typing in this channel.
192 ChannelStopTyping func(w *GatewayClient, ctx *EventContext, e *events.ChannelStopTyping)
193
194 // You have acknowledged new messages in this channel up to this message ID.
195 //
196 // <official docs say the above, but it should be 'A user' instead of 'you'?>
197 ChannelAck func(w *GatewayClient, ctx *EventContext, e *events.ChannelAck)
198
199 // Server created, the event object has the same schema as the SERVER object in the API with the addition of an event type.
200 ServerCreate func(w *GatewayClient, ctx *EventContext, e *events.ServerCreate)
201
202 // Server details updated.
203 ServerUpdate func(w *GatewayClient, ctx *EventContext, e *events.ServerUpdate)
204
205 // Server has been deleted.
206 ServerDelete func(w *GatewayClient, ctx *EventContext, e *events.ServerDelete)
207
208 // Server member details updated.
209 ServerMemberUpdate func(w *GatewayClient, ctx *EventContext, e *events.ServerMemberUpdate)
210
211 // A user has joined the group.
212 //
213 // <this should be server, not group>
214 ServerMemberJoin func(w *GatewayClient, ctx *EventContext, e *events.ServerMemberJoin)
215
216 // A user has left the group.
217 //
218 // <this should be server, not group>
219 ServerMemberLeave func(w *GatewayClient, ctx *EventContext, e *events.ServerMemberLeave)
220
221 // Server role has been updated or created.
222 ServerRoleUpdate func(w *GatewayClient, ctx *EventContext, e *events.ServerRoleUpdate)
223
224 // Server role has been deleted.
225 ServerRoleDelete func(w *GatewayClient, ctx *EventContext, e *events.ServerRoleDelete)
226
227 // User has been updated.
228 UserUpdate func(w *GatewayClient, ctx *EventContext, e *events.UserUpdate)
229
230 // Your relationship with another user has changed.
231 UserRelationship func(w *GatewayClient, ctx *EventContext, e *events.UserRelationship)
232
233 // Settings updated remotely
234 //
235 // <undocumented, will likely be available in a future release>
236 UserSettingsUpdate func(w *GatewayClient, ctx *EventContext, e *events.UserSettingsUpdate)
237
238 // User has been platform banned or deleted their account
239 //
240 // Clients should remove the following associated data:
241 // - Messages
242 // - DM Channels
243 // - Relationships
244 // - Server Memberships
245 //
246 // User flags are specified to explain why a wipe is occurring though not all reasons will necessarily ever appear.
247 UserPlatformWipe func(w *GatewayClient, ctx *EventContext, e *events.UserPlatformWipe)
248
249 // Emoji created, the event object has the same schema as the Emoji object in the API with the addition of an event type.
250 EmojiCreate func(w *GatewayClient, ctx *EventContext, e *events.EmojiCreate)
251
252 // Emoji has been deleted.
253 EmojiDelete func(w *GatewayClient, ctx *EventContext, e *events.EmojiDelete)
254
255 // New report
256 //
257 // <undocumented, will likely be available in a future release>
258 ReportCreate func(w *GatewayClient, ctx *EventContext, e *events.ReportCreate)
259
260 // Forwarded events from rAuth, currently only session deletion events are forwarded.
261 //
262 // <this event is special, you likely want AuthDeleteSession and AuthDeleteAllSessions instead>
263 Auth func(w *GatewayClient, ctx *EventContext, e *events.Auth)
264
265 // A session has been deleted.
266 //
267 // Eq: Auth->DeleteSession
268 AuthDeleteSession func(w *GatewayClient, ctx *EventContext, e *events.AuthDeleteSession)
269
270 // All sessions for this account have been deleted, optionally excluding a given ID.
271 //
272 // Eq: Auth->DeleteAllSessions
273 AuthDeleteAllSessions func(w *GatewayClient, ctx *EventContext, e *events.AuthDeleteAllSessions)
274
275 // New webhook
276 //
277 // <undocumented, will likely be available in a future release>
278 WebhookCreate func(w *GatewayClient, ctx *EventContext, e *events.WebhookCreate)
279
280 // Update existing webhook
281 //
282 // <undocumented, will likely be available in a future release>
283 WebhookUpdate func(w *GatewayClient, ctx *EventContext, e *events.WebhookUpdate)
284
285 // Delete existing webhook
286 //
287 // <undocumented, will likely be available in a future release>
288 WebhookDelete func(w *GatewayClient, ctx *EventContext, e *events.WebhookDelete)
289}
290