aboutsummaryrefslogtreecommitdiff
path: root/lib/event.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/event.ml')
-rw-r--r--lib/event.ml38
1 files changed, 29 insertions, 9 deletions
diff --git a/lib/event.ml b/lib/event.ml
index 6e35c75..8e04fee 100644
--- a/lib/event.ml
+++ b/lib/event.ml
@@ -39,14 +39,34 @@ type t =
exception Invalid_event of string
+let wrap_role ~guild_id role =
+ let open Role_t in
+ let {id;name;colour;hoist;position;permissions;managed;mentionable} = role in
+ {id;name;colour;hoist;position;permissions;managed;mentionable;guild_id}
+
+let wrap_member ~guild_id member =
+ let open Member_t in
+ let {nick;roles;joined_at;deaf;mute;user} = member in
+ {nick;roles;joined_at;deaf;mute;user;guild_id}
+
+let wrap_channel s : Channel_t.t =
+ let module J = Yojson.Safe in
+ match J.(from_string s |> Util.member "kind" |> Util.to_int) with
+ | 0 -> `GuildText (Channel_j.guild_text_of_string s)
+ | 1 -> `Private (Channel_j.dm_of_string s)
+ | 2 -> `GuildVoice (Channel_j.guild_voice_of_string s)
+ | 3 -> `Group (Channel_j.group_of_string s)
+ | 4 -> `Category (Channel_j.category_of_string s)
+ | _ -> raise (Invalid_event s)
+
let event_of_string ~contents t = match t with
| "HELLO" -> HELLO (Yojson.Safe.from_string contents)
| "READY" -> READY (Yojson.Safe.from_string contents)
| "RESUMED" -> RESUMED (Yojson.Safe.from_string contents)
| "INVALID_SESSION" -> INVALID_SESSION (Yojson.Safe.from_string contents)
- | "CHANNEL_CREATE" -> CHANNEL_CREATE (Channel_j.t_of_string contents)
- | "CHANNEL_UPDATE" -> CHANNEL_UPDATE (Channel_j.t_of_string contents)
- | "CHANNEL_DELETE" -> CHANNEL_DELETE (Channel_j.t_of_string contents)
+ | "CHANNEL_CREATE" -> CHANNEL_CREATE (wrap_channel contents)
+ | "CHANNEL_UPDATE" -> CHANNEL_UPDATE (wrap_channel contents)
+ | "CHANNEL_DELETE" -> CHANNEL_DELETE (wrap_channel contents)
| "CHANNEL_PINS_UPDATE" -> CHANNEL_PINS_UPDATE (Yojson.Safe.from_string contents)
| "GUILD_CREATE" -> GUILD_CREATE (Guild_j.t_of_string contents)
| "GUILD_UPDATE" -> GUILD_UPDATE (Guild_j.t_of_string contents)
@@ -55,13 +75,13 @@ let event_of_string ~contents t = match t with
| "GUILD_BAN_REMOVE" -> GUILD_BAN_REMOVE (Ban_j.t_of_string contents)
| "GUILD_EMOJIS_UPDATE" -> GUILD_EMOJIS_UPDATE (Yojson.Safe.from_string contents)
| "GUILD_INTEGRATIONS_UPDATE" -> GUILD_INTEGRATIONS_UPDATE (Yojson.Safe.from_string contents)
- | "GUILD_MEMBER_ADD" -> GUILD_MEMBER_ADD (Member_j.t_of_string contents)
- | "GUILD_MEMBER_REMOVE" -> GUILD_MEMBER_REMOVE (Member_j.t_of_string contents)
- | "GUILD_MEMBER_UPDATE" -> GUILD_MEMBER_UPDATE (Member_j.t_of_string contents)
+ | "GUILD_MEMBER_ADD" -> GUILD_MEMBER_ADD (let Member_t.{guild_id;member} = Member_j.member_update_of_string contents in wrap_member ~guild_id member)
+ | "GUILD_MEMBER_REMOVE" -> GUILD_MEMBER_REMOVE (let Member_t.{guild_id;member} = Member_j.member_update_of_string contents in wrap_member ~guild_id member)
+ | "GUILD_MEMBER_UPDATE" -> GUILD_MEMBER_UPDATE (let Member_t.{guild_id;member} = Member_j.member_update_of_string contents in wrap_member ~guild_id member)
| "GUILD_MEMBERS_CHUNK" -> GUILD_MEMBERS_CHUNK (Yojson.Safe.(from_string contents |> Util.to_list) |> List.map ~f:(fun m -> Yojson.Safe.to_string m |> Member_j.t_of_string))
- | "GUILD_ROLE_CREATE" -> GUILD_ROLE_CREATE (Role_j.t_of_string contents)
- | "GUILD_ROLE_UPDATE" -> GUILD_ROLE_UPDATE (Role_j.t_of_string contents)
- | "GUILD_ROLE_DELETE" -> GUILD_ROLE_DELETE (Role_j.t_of_string contents)
+ | "GUILD_ROLE_CREATE" -> GUILD_ROLE_CREATE (let Role_t.{guild_id;role} = Role_j.role_update_of_string contents in wrap_role ~guild_id role)
+ | "GUILD_ROLE_UPDATE" -> GUILD_ROLE_UPDATE (let Role_t.{guild_id;role} = Role_j.role_update_of_string contents in wrap_role ~guild_id role)
+ | "GUILD_ROLE_DELETE" -> GUILD_ROLE_DELETE (let Role_t.{guild_id;role} = Role_j.role_update_of_string contents in wrap_role ~guild_id role)
| "MESSAGE_CREATE" -> MESSAGE_CREATE (Message_j.t_of_string contents)
| "MESSAGE_UPDATE" -> MESSAGE_UPDATE (Message_j.t_of_string contents)
| "MESSAGE_DELETE" -> MESSAGE_DELETE (Message_j.t_of_string contents)