blob: 88dd50de0d13b4dc302e72a33abe99266db0c60d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
open Async
open Core
open Event_models
type t =
| READY of Ready.t
| RESUMED of Resumed.t
| CHANNEL_CREATE of ChannelCreate.t
| CHANNEL_UPDATE of ChannelUpdate.t
| CHANNEL_DELETE of ChannelDelete.t
| CHANNEL_PINS_UPDATE of ChannelPinsUpdate.t
| GUILD_CREATE of GuildCreate.t
| GUILD_UPDATE of GuildUpdate.t
| GUILD_DELETE of GuildDelete.t
| GUILD_BAN_ADD of GuildBanAdd.t
| GUILD_BAN_REMOVE of GuildBanRemove.t
| GUILD_EMOJIS_UPDATE of GuildEmojisUpdate.t
(* | GUILD_INTEGRATIONS_UPDATE of Yojson.Safe.t *)
| GUILD_MEMBER_ADD of GuildMemberAdd.t
| GUILD_MEMBER_REMOVE of GuildMemberRemove.t
| GUILD_MEMBER_UPDATE of GuildMemberUpdate.t
| GUILD_MEMBERS_CHUNK of GuildMembersChunk.t
| GUILD_ROLE_CREATE of GuildRoleCreate.t
| GUILD_ROLE_UPDATE of GuildRoleUpdate.t
| GUILD_ROLE_DELETE of GuildRoleDelete.t
| MESSAGE_CREATE of MessageCreate.t
| MESSAGE_UPDATE of MessageUpdate.t
| MESSAGE_DELETE of MessageDelete.t
| MESSAGE_DELETE_BULK of MessageDeleteBulk.t
| REACTION_ADD of ReactionAdd.t
| REACTION_REMOVE of ReactionRemove.t
| REACTION_REMOVE_ALL of ReactionRemoveAll.t
| PRESENCE_UPDATE of PresenceUpdate.t
| TYPING_START of TypingStart.t
| USER_UPDATE of UserUpdate.t
(* | VOICE_STATE_UPDATE of Yojson.Safe.t *)
(* | VOICE_SERVER_UPDATE of Yojson.Safe.t *)
| WEBHOOK_UPDATE of WebhookUpdate.t
| UNKNOWN of Unknown.t
let event_of_yojson ~contents = function
| "READY" -> READY Ready.(deserialize contents)
| "RESUMED" -> RESUMED Resumed.(deserialize contents)
| "CHANNEL_CREATE" -> CHANNEL_CREATE ChannelCreate.(deserialize contents)
| "CHANNEL_UPDATE" -> CHANNEL_UPDATE ChannelUpdate.(deserialize contents)
| "CHANNEL_DELETE" -> CHANNEL_DELETE ChannelDelete.(deserialize contents)
| "CHANNEL_PINS_UPDATE" -> CHANNEL_PINS_UPDATE ChannelPinsUpdate.(deserialize contents)
| "GUILD_CREATE" -> GUILD_CREATE GuildCreate.(deserialize contents)
| "GUILD_UPDATE" -> GUILD_UPDATE GuildUpdate.(deserialize contents)
| "GUILD_DELETE" -> GUILD_DELETE GuildDelete.(deserialize contents)
| "GUILD_BAN_ADD" -> GUILD_BAN_ADD GuildBanAdd.(deserialize contents)
| "GUILD_BAN_REMOVE" -> GUILD_BAN_REMOVE GuildBanRemove.(deserialize contents)
| "GUILD_EMOJIS_UPDATE" -> GUILD_EMOJIS_UPDATE GuildEmojisUpdate.(deserialize contents)
(* | "GUILD_INTEGRATIONS_UPDATE" -> GUILD_INTEGRATIONS_UPDATE contents *)
| "GUILD_MEMBER_ADD" -> GUILD_MEMBER_ADD GuildMemberAdd.(deserialize contents)
| "GUILD_MEMBER_REMOVE" -> GUILD_MEMBER_REMOVE GuildMemberRemove.(deserialize contents)
| "GUILD_MEMBER_UPDATE" -> GUILD_MEMBER_UPDATE GuildMemberUpdate.(deserialize contents)
| "GUILD_MEMBERS_CHUNK" -> GUILD_MEMBERS_CHUNK GuildMembersChunk.(deserialize contents)
| "GUILD_ROLE_CREATE" -> GUILD_ROLE_CREATE GuildRoleCreate.(deserialize contents)
| "GUILD_ROLE_UPDATE" -> GUILD_ROLE_UPDATE GuildRoleUpdate.(deserialize contents)
| "GUILD_ROLE_DELETE" -> GUILD_ROLE_DELETE GuildRoleDelete.(deserialize contents)
| "MESSAGE_CREATE" -> MESSAGE_CREATE MessageCreate.(deserialize contents)
| "MESSAGE_UPDATE" -> MESSAGE_UPDATE MessageUpdate.(deserialize contents)
| "MESSAGE_DELETE" -> MESSAGE_DELETE MessageDelete.(deserialize contents)
| "MESSAGE_DELETE_BULK" -> MESSAGE_DELETE_BULK MessageDeleteBulk.(deserialize contents)
| "MESSAGE_REACTION_ADD" -> REACTION_ADD ReactionAdd.(deserialize contents)
| "MESSAGE_REACTION_REMOVE" -> REACTION_REMOVE ReactionRemove.(deserialize contents)
| "MESSAGE_REACTION_REMOVE_ALL" -> REACTION_REMOVE_ALL ReactionRemoveAll.(deserialize contents)
| "PRESENCE_UPDATE" -> PRESENCE_UPDATE PresenceUpdate.(deserialize contents)
| "TYPING_START" -> TYPING_START TypingStart.(deserialize contents)
| "USER_UPDATE" -> USER_UPDATE UserUpdate.(deserialize contents)
(* | "VOICE_STATE_UPDATE" -> VOICE_STATE_UPDATE contents *)
(* | "VOICE_SERVER_UPDATE" -> VOICE_SERVER_UPDATE contents *)
| "WEBHOOK_UPDATE" -> WEBHOOK_UPDATE WebhookUpdate.(deserialize contents)
| s -> UNKNOWN Unknown.(deserialize s contents)
let dispatch ev =
match ev with
| READY d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> Ready.update_cache cache d);
!Dispatch.ready d
| RESUMED d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> Resumed.update_cache cache d);
!Dispatch.resumed d
| CHANNEL_CREATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> ChannelCreate.update_cache cache d);
!Dispatch.channel_create d
| CHANNEL_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> ChannelUpdate.update_cache cache d);
!Dispatch.channel_update d
| CHANNEL_DELETE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> ChannelDelete.update_cache cache d);
!Dispatch.channel_delete d
| CHANNEL_PINS_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> ChannelPinsUpdate.update_cache cache d);
!Dispatch.channel_pins_update d
| GUILD_CREATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildCreate.update_cache cache d);
!Dispatch.guild_create d
| GUILD_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildUpdate.update_cache cache d);
!Dispatch.guild_update d
| GUILD_DELETE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildDelete.update_cache cache d);
!Dispatch.guild_delete d
| GUILD_BAN_ADD d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildBanAdd.update_cache cache d);
!Dispatch.member_ban d
| GUILD_BAN_REMOVE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildBanRemove.update_cache cache d);
!Dispatch.member_unban d
| GUILD_EMOJIS_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildEmojisUpdate.update_cache cache d);
!Dispatch.guild_emojis_update d
(* | GUILD_INTEGRATIONS_UPDATE d -> !Dispatch.integrations_update d *)
| GUILD_MEMBER_ADD d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildMemberAdd.update_cache cache d);
!Dispatch.member_join d
| GUILD_MEMBER_REMOVE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildMemberRemove.update_cache cache d);
!Dispatch.member_leave d
| GUILD_MEMBER_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildMemberUpdate.update_cache cache d);
!Dispatch.member_update d
| GUILD_MEMBERS_CHUNK d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildMembersChunk.update_cache cache d);
!Dispatch.members_chunk d
| GUILD_ROLE_CREATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildRoleCreate.update_cache cache d);
!Dispatch.role_create d
| GUILD_ROLE_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildRoleUpdate.update_cache cache d);
!Dispatch.role_update d
| GUILD_ROLE_DELETE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> GuildRoleDelete.update_cache cache d);
!Dispatch.role_delete d
| MESSAGE_CREATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> MessageCreate.update_cache cache d);
!Dispatch.message_create d
| MESSAGE_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> MessageUpdate.update_cache cache d);
!Dispatch.message_update d
| MESSAGE_DELETE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> MessageDelete.update_cache cache d);
!Dispatch.message_delete d
| MESSAGE_DELETE_BULK d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> MessageDeleteBulk.update_cache cache d);
!Dispatch.message_delete_bulk d
| REACTION_ADD d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> ReactionAdd.update_cache cache d);
!Dispatch.reaction_add d
| REACTION_REMOVE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> ReactionRemove.update_cache cache d);
!Dispatch.reaction_remove d
| REACTION_REMOVE_ALL d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> ReactionRemoveAll.update_cache cache d);
!Dispatch.reaction_remove_all d
| PRESENCE_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> PresenceUpdate.update_cache cache d);
!Dispatch.presence_update d
| TYPING_START d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> TypingStart.update_cache cache d);
!Dispatch.typing_start d
| USER_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> UserUpdate.update_cache cache d);
!Dispatch.user_update d
(* | VOICE_STATE_UPDATE d -> !Dispatch.voice_state_update d *)
(* | VOICE_SERVER_UPDATE d -> !Dispatch.voice_server_update d *)
| WEBHOOK_UPDATE d ->
Mvar.update_exn Cache.cache ~f:(fun cache -> WebhookUpdate.update_cache cache d);
!Dispatch.webhook_update d
| UNKNOWN d -> !Dispatch.unknown d
let handle_event ~ev contents =
event_of_yojson ~contents ev
|> dispatch
|