aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdelyn Breedlove <[email protected]>2019-01-13 16:51:04 -0700
committerAdelyn Breedlove <[email protected]>2019-01-13 16:51:04 -0700
commitc5bfc108ca6a1e7a21492b4318de78a74ed801f9 (patch)
tree191164d198c07cf388d9aae8a54013e5613c272c
parentMore deserialization fixes (diff)
downloaddisml-c5bfc108ca6a1e7a21492b4318de78a74ed801f9.tar.xz
disml-c5bfc108ca6a1e7a21492b4318de78a74ed801f9.zip
Add deriving sexp to models
-rw-r--r--bin/handler.ml73
-rw-r--r--lib/models/activity.ml4
-rw-r--r--lib/models/attachment.ml4
-rw-r--r--lib/models/ban_t.ml4
-rw-r--r--lib/models/channel_t.ml14
-rw-r--r--lib/models/embed.ml16
-rw-r--r--lib/models/emoji.ml6
-rw-r--r--lib/models/guild_t.ml4
-rw-r--r--lib/models/member_t.ml12
-rw-r--r--lib/models/message_t.ml6
-rw-r--r--lib/models/presence.ml4
-rw-r--r--lib/models/reaction_t.ml6
-rw-r--r--lib/models/role_t.ml8
-rw-r--r--lib/models/snowflake.ml2
-rw-r--r--lib/models/user_t.ml6
15 files changed, 96 insertions, 73 deletions
diff --git a/bin/handler.ml b/bin/handler.ml
index 43d908e..5afbbee 100644
--- a/bin/handler.ml
+++ b/bin/handler.ml
@@ -8,7 +8,8 @@ module Make(Models : Disml.S.Models) = struct
if String.is_prefix ~prefix:"!ping" msg.content then
Message.reply msg "Pong!" >>> ignore
else if String.is_prefix ~prefix:"!spam" msg.content then
- List.range 0 20
+ let count = String.chop_prefix_exn ~prefix:"!spam" msg.content |> String.strip |> Int.of_string in
+ List.range 0 count
|> List.iter ~f:(fun i -> Message.reply msg (string_of_int i) >>> ignore)
else if String.is_prefix ~prefix:"!list" msg.content then
let count = String.chop_prefix_exn ~prefix:"!list" msg.content |> String.strip |> Int.of_string in
@@ -24,39 +25,39 @@ module Make(Models : Disml.S.Models) = struct
Message.reply msg list >>> ignore
let handle_event = function
- | HELLO _ -> print_endline "Received HELLO"
- | READY _ -> print_endline "Received READY"
- | RESUMED _ -> print_endline "Received RESUMED"
- | INVALID_SESSION _ -> print_endline "Received INVALID_SESSION"
- | CHANNEL_CREATE _ -> print_endline "Received CHANNEL_CREATE"
- | CHANNEL_UPDATE _ -> print_endline "Received CHANNEL_UPDATE"
- | CHANNEL_DELETE _ -> print_endline "Received CHANNEL_DELETE"
- | CHANNEL_PINS_UPDATE _ -> print_endline "Received CHANNEL_PINS_UPDATE"
- | GUILD_CREATE _ -> print_endline "Received GUILD_CREATE"
- | GUILD_UPDATE _ -> print_endline "Received GUILD_UPDATE"
- | GUILD_DELETE _ -> print_endline "Received GUILD_DELETE"
- | GUILD_BAN_ADD _ -> print_endline "Received GUILD_BAN_ADD"
- | GUILD_BAN_REMOVE _ -> print_endline "Received GUILD_BAN_REMOVE"
- | GUILD_EMOJIS_UPDATE _ -> print_endline "Received GUILD_EMOJIS_UPDATE"
- | GUILD_INTEGRATIONS_UPDATE _ -> print_endline "Received GUILD_INTEGRATIONS_UPDATE"
- | GUILD_MEMBER_ADD _ -> print_endline "Received GUILD_MEMBER_ADD"
- | GUILD_MEMBER_REMOVE _ -> print_endline "Received GUILD_MEMBER_REMOVE"
- | GUILD_MEMBER_UPDATE _ -> print_endline "Received GUILD_MEMBER_UPDATE"
- | GUILD_MEMBERS_CHUNK _ -> print_endline "Received GUILD_MEMBERS_CHUNK"
- | GUILD_ROLE_CREATE _ -> print_endline "Received GUILD_ROLE_CREATE"
- | GUILD_ROLE_UPDATE _ -> print_endline "Received GUILD_ROLE_UPDATE"
- | GUILD_ROLE_DELETE _ -> print_endline "Received GUILD_ROLE_DELETE"
- | MESSAGE_CREATE msg -> check_command msg; print_endline "Received MESSAGE_CREATE"
- | MESSAGE_UPDATE _ -> print_endline "Received MESSAGE_UPDATE"
- | MESSAGE_DELETE _ -> print_endline "Received MESSAGE_DELETE"
- | MESSAGE_BULK_DELETE _ -> print_endline "Received MESSAGE_BULK_DELETE"
- | MESSAGE_REACTION_ADD _ -> print_endline "Received MESSAGE_REACTION_ADD"
- | MESSAGE_REACTION_REMOVE _ -> print_endline "Received MESSAGE_REACTION_REMOVE"
- | MESSAGE_REACTION_REMOVE_ALL _ -> print_endline "Received MESSAGE_REACTION_REMOVE_ALL"
- | PRESENCE_UPDATE _ -> print_endline "Received PRESENCE_UPDATE"
- | TYPING_START _ -> print_endline "Received TYPING_START"
- | USER_UPDATE _ -> print_endline "Received USER_UPDATE"
- | VOICE_STATE_UPDATE _ -> print_endline "Received VOICE_STATE_UPDATE"
- | VOICE_SERVER_UPDATE _ -> print_endline "Received VOICE_SERVER_UPDATE"
+ | HELLO _ -> print_endline "Received HELLO"
+ | READY _ -> print_endline "Received READY"
+ | RESUMED _ -> print_endline "Received RESUMED"
+ | INVALID_SESSION _ -> print_endline "Received INVALID_SESSION"
+ | CHANNEL_CREATE _ -> print_endline "Received CHANNEL_CREATE"
+ | CHANNEL_UPDATE _ -> print_endline "Received CHANNEL_UPDATE"
+ | CHANNEL_DELETE _ -> print_endline "Received CHANNEL_DELETE"
+ | CHANNEL_PINS_UPDATE _ -> print_endline "Received CHANNEL_PINS_UPDATE"
+ | GUILD_CREATE _ -> print_endline "Received GUILD_CREATE"
+ | GUILD_UPDATE _ -> print_endline "Received GUILD_UPDATE"
+ | GUILD_DELETE _ -> print_endline "Received GUILD_DELETE"
+ | GUILD_BAN_ADD _ -> print_endline "Received GUILD_BAN_ADD"
+ | GUILD_BAN_REMOVE _ -> print_endline "Received GUILD_BAN_REMOVE"
+ | GUILD_EMOJIS_UPDATE _ -> print_endline "Received GUILD_EMOJIS_UPDATE"
+ | GUILD_INTEGRATIONS_UPDATE _ -> print_endline "Received GUILD_INTEGRATIONS_UPDATE"
+ | GUILD_MEMBER_ADD _ -> print_endline "Received GUILD_MEMBER_ADD"
+ | GUILD_MEMBER_REMOVE _ -> print_endline "Received GUILD_MEMBER_REMOVE"
+ | GUILD_MEMBER_UPDATE _ -> print_endline "Received GUILD_MEMBER_UPDATE"
+ | GUILD_MEMBERS_CHUNK _ -> print_endline "Received GUILD_MEMBERS_CHUNK"
+ | GUILD_ROLE_CREATE _ -> print_endline "Received GUILD_ROLE_CREATE"
+ | GUILD_ROLE_UPDATE _ -> print_endline "Received GUILD_ROLE_UPDATE"
+ | GUILD_ROLE_DELETE _ -> print_endline "Received GUILD_ROLE_DELETE"
+ | MESSAGE_CREATE msg -> check_command msg; print_endline "Received MESSAGE_CREATE"
+ | MESSAGE_UPDATE _ -> print_endline "Received MESSAGE_UPDATE"
+ | MESSAGE_DELETE _ -> print_endline "Received MESSAGE_DELETE"
+ | MESSAGE_BULK_DELETE _ -> print_endline "Received MESSAGE_BULK_DELETE"
+ | MESSAGE_REACTION_ADD _ -> print_endline "Received MESSAGE_REACTION_ADD"
+ | MESSAGE_REACTION_REMOVE _ -> print_endline "Received MESSAGE_REACTION_REMOVE"
+ | MESSAGE_REACTION_REMOVE_ALL _ -> print_endline "Received MESSAGE_REACTION_REMOVE_ALL"
+ | PRESENCE_UPDATE _ -> print_endline "Received PRESENCE_UPDATE"
+ | TYPING_START _ -> print_endline "Received TYPING_START"
+ | USER_UPDATE _ -> print_endline "Received USER_UPDATE"
+ | VOICE_STATE_UPDATE _ -> print_endline "Received VOICE_STATE_UPDATE"
+ | VOICE_SERVER_UPDATE _ -> print_endline "Received VOICE_SERVER_UPDATE"
| WEBHOOKS_UPDATE _ -> print_endline "Received WEBHOOKS_UPDATE"
-end \ No newline at end of file
+end
diff --git a/lib/models/activity.ml b/lib/models/activity.ml
index 6193ce9..8e6ff80 100644
--- a/lib/models/activity.ml
+++ b/lib/models/activity.ml
@@ -1,5 +1,7 @@
+open Core
+
type t = {
name: string;
kind: int [@key "type"];
url: string [@default ""];
-} [@@deriving yojson { strict = false}] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false}] \ No newline at end of file
diff --git a/lib/models/attachment.ml b/lib/models/attachment.ml
index 5f17a16..c56b389 100644
--- a/lib/models/attachment.ml
+++ b/lib/models/attachment.ml
@@ -1,3 +1,5 @@
+open Core
+
type t = {
id: Snowflake.t;
filename: string;
@@ -6,4 +8,4 @@ type t = {
proxy_url: string;
height: int [@default -1];
width: int [@default -1];
-} [@@deriving yojson { strict = false}] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false}] \ No newline at end of file
diff --git a/lib/models/ban_t.ml b/lib/models/ban_t.ml
index 640db34..b49eefc 100644
--- a/lib/models/ban_t.ml
+++ b/lib/models/ban_t.ml
@@ -1,4 +1,6 @@
+open Core
+
type t = {
reason: string [@default ""];
user: User_t.t;
-} [@@deriving yojson { strict = false}] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false}] \ No newline at end of file
diff --git a/lib/models/channel_t.ml b/lib/models/channel_t.ml
index 2fd2e5a..dce1d54 100644
--- a/lib/models/channel_t.ml
+++ b/lib/models/channel_t.ml
@@ -10,13 +10,13 @@ type group = {
name: string option [@default None];
owner_id: Snowflake.t;
recipients: User_t.t list [@default []];
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type dm = {
id: Snowflake.t;
last_message_id: Snowflake.t option [@default None];
last_pin_timestamp: string option [@default None];
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type guild_text = {
id: Snowflake.t;
@@ -29,7 +29,7 @@ type guild_text = {
topic: string option [@default None];
nsfw: bool;
slow_mode_timeout: int option [@default None];
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type guild_voice = {
id: Snowflake.t;
@@ -39,14 +39,14 @@ type guild_voice = {
position: int;
user_limit: int [@default -1];
bitrate: int option [@default None];
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type category = {
id: Snowflake.t;
guild_id: Snowflake.t option [@default None];
position: int;
name: string;
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type t =
| Group of group
@@ -54,7 +54,7 @@ type t =
| GuildText of guild_text
| GuildVoice of guild_voice
| Category of category
-[@@deriving yojson { strict = false}]
+[@@deriving sexp, yojson { strict = false}]
type channel_wrapper = {
id: Snowflake.t;
@@ -74,7 +74,7 @@ type channel_wrapper = {
application_id: Snowflake.t option [@default None];
category_id: Snowflake.t option [@default None][@key "parent_id"];
last_pin_timestamp: string option [@default None];
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
let unwrap_as_guild_text {id;guild_id;position;name;topic;nsfw;last_message_id;slow_mode_timeout;category_id;last_pin_timestamp;_} =
let position = Option.value_exn position in
diff --git a/lib/models/embed.ml b/lib/models/embed.ml
index 627d617..4faaba7 100644
--- a/lib/models/embed.ml
+++ b/lib/models/embed.ml
@@ -1,39 +1,41 @@
+open Core
+
type footer = {
text: string;
icon_url: string option [@default None];
proxy_icon_url: string option [@default None];
-} [@@deriving yojson]
+} [@@deriving sexp, yojson]
type image = {
url: string option [@default None];
proxy_url: string option [@default None];
height: int option [@default None];
width: int option [@default None];
-} [@@deriving yojson]
+} [@@deriving sexp, yojson]
type video = {
url: string option [@default None];
height: int option [@default None];
width: int option [@default None];
-} [@@deriving yojson]
+} [@@deriving sexp, yojson]
type provider = {
name: string option [@default None];
url: string option [@default None];
-} [@@deriving yojson]
+} [@@deriving sexp, yojson]
type author = {
name: string option [@default None];
url: string option [@default None];
icon_url: string option [@default None];
proxy_icon_url: string option [@default None];
-} [@@deriving yojson]
+} [@@deriving sexp, yojson]
type field = {
name: string;
value: string;
inline: bool [@default true];
-} [@@deriving yojson]
+} [@@deriving sexp, yojson]
type t = {
title: string option [@default None];
@@ -49,4 +51,4 @@ type t = {
provider: provider option [@default None];
author: author option [@default None];
fields: field list [@default []];
-} [@@deriving yojson { strict = false }] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false }] \ No newline at end of file
diff --git a/lib/models/emoji.ml b/lib/models/emoji.ml
index 62e5bd7..2b7cf1d 100644
--- a/lib/models/emoji.ml
+++ b/lib/models/emoji.ml
@@ -1,7 +1,9 @@
+open Core
+
type partial_emoji = {
id: Snowflake.t option [@default None];
name: string;
-} [@@deriving yojson { strict = false }]
+} [@@deriving sexp, yojson { strict = false }]
type t = {
id: Snowflake.t option [@default None];
@@ -11,4 +13,4 @@ type t = {
require_colons: bool option [@default None];
managed: bool option [@default None];
animated: bool option [@default None];
-} [@@deriving yojson { strict = false}] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false}] \ No newline at end of file
diff --git a/lib/models/guild_t.ml b/lib/models/guild_t.ml
index 5183fc7..6bb5090 100644
--- a/lib/models/guild_t.ml
+++ b/lib/models/guild_t.ml
@@ -27,7 +27,7 @@ type pre = {
member_count: int option [@default None];
members: Member_t.member list;
channels: Channel_t.channel_wrapper list;
-} [@@deriving yojson { strict = false }]
+} [@@deriving sexp, yojson { strict = false }]
type t = {
id: Snowflake.t;
@@ -56,7 +56,7 @@ type t = {
member_count: int option [@default None];
members: Member_t.t list;
channels: Channel_t.t list;
-} [@@deriving yojson { strict = false }]
+} [@@deriving sexp, yojson { strict = false }]
let wrap ({id;name;icon;splash;owner_id;region;afk_channel_id;afk_timeout;embed_enabled;embed_channel_id;verification_level;default_message_notifications;explicit_content_filter;roles;emojis;features;mfa_level;application_id;widget_enabled;widget_channel;system_channel;large;unavailable;member_count;members;channels}:pre) =
let roles = List.map ~f:(Role_t.wrap ~guild_id:id) roles in
diff --git a/lib/models/member_t.ml b/lib/models/member_t.ml
index ca39092..e6edb61 100644
--- a/lib/models/member_t.ml
+++ b/lib/models/member_t.ml
@@ -1,10 +1,12 @@
+open Core
+
type partial_member = {
nick: string option [@default None];
roles: Snowflake.t list;
joined_at: string;
deaf: bool;
mute: bool;
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type member = {
nick: string option [@default None];
@@ -13,19 +15,19 @@ type member = {
deaf: bool;
mute: bool;
user: User_t.t;
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type member_wrapper = {
guild_id: Snowflake.t;
user: User_t.t;
-} [@@deriving yojson { strict = false }]
+} [@@deriving sexp, yojson { strict = false }]
type member_update = {
guild_id: Snowflake.t;
roles: Snowflake.t list [@default []];
user: User_t.t;
nick: string option [@default None];
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type t = {
nick: string option [@default None];
@@ -35,7 +37,7 @@ type t = {
mute: bool;
user: User_t.t;
guild_id: Snowflake.t;
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
let wrap ~guild_id ({nick;roles;joined_at;deaf;mute;user}:member) =
{nick;roles;joined_at;deaf;mute;user;guild_id} \ No newline at end of file
diff --git a/lib/models/message_t.ml b/lib/models/message_t.ml
index f793223..c4253d5 100644
--- a/lib/models/message_t.ml
+++ b/lib/models/message_t.ml
@@ -1,3 +1,5 @@
+open Core
+
type message_update = {
id: Snowflake.t;
author: User_t.t option [@default None];
@@ -18,7 +20,7 @@ type message_update = {
pinned: bool option [@default None];
webhook_id: Snowflake.t option [@default None];
kind: int option [@default None][@key "type"];
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type t = {
id: Snowflake.t;
@@ -40,4 +42,4 @@ type t = {
pinned: bool;
webhook_id: Snowflake.t option [@default None];
kind: int [@key "type"];
-} [@@deriving yojson { strict = false}] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false}] \ No newline at end of file
diff --git a/lib/models/presence.ml b/lib/models/presence.ml
index 955a930..ab245a7 100644
--- a/lib/models/presence.ml
+++ b/lib/models/presence.ml
@@ -1,3 +1,5 @@
+open Core
+
type t = {
user: User_t.partial_user;
roles: Snowflake.t list;
@@ -5,4 +7,4 @@ type t = {
guild_id: Snowflake.t;
status: string;
activities: Activity.t list;
-} [@@deriving yojson { strict = false}] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false}] \ No newline at end of file
diff --git a/lib/models/reaction_t.ml b/lib/models/reaction_t.ml
index 2e9aad5..c382b68 100644
--- a/lib/models/reaction_t.ml
+++ b/lib/models/reaction_t.ml
@@ -1,12 +1,14 @@
+open Core
+
type reaction_event = {
user_id: Snowflake.t;
channel_id: Snowflake.t;
message_id: Snowflake.t;
guild_id: Snowflake.t option [@default None];
emoji: Emoji.partial_emoji;
-} [@@deriving yojson]
+} [@@deriving sexp, yojson]
type t = {
count: int;
emoji: Emoji.t;
-} [@@deriving yojson { strict = false}] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false}] \ No newline at end of file
diff --git a/lib/models/role_t.ml b/lib/models/role_t.ml
index ae54f7a..e41f31d 100644
--- a/lib/models/role_t.ml
+++ b/lib/models/role_t.ml
@@ -1,3 +1,5 @@
+open Core
+
type role = {
id: Snowflake.t;
name: string;
@@ -7,12 +9,12 @@ type role = {
permissions: int;
managed: bool;
mentionable: bool;
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type role_update = {
role: role;
guild_id: Snowflake.t;
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type t = {
id: Snowflake.t;
@@ -24,7 +26,7 @@ type t = {
managed: bool;
mentionable: bool;
guild_id: Snowflake.t;
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
let wrap ~guild_id ({id;name;colour;hoist;position;permissions;managed;mentionable}:role) =
{id;name;colour;hoist;position;permissions;managed;mentionable;guild_id} \ No newline at end of file
diff --git a/lib/models/snowflake.ml b/lib/models/snowflake.ml
index 21846fc..0122da8 100644
--- a/lib/models/snowflake.ml
+++ b/lib/models/snowflake.ml
@@ -1,6 +1,6 @@
open Core
-type t = int
+type t = Int.t [@@deriving sexp]
let of_yojson_exn d = Yojson.Safe.Util.to_string d |> Int.of_string
diff --git a/lib/models/user_t.ml b/lib/models/user_t.ml
index 9980f43..52dbaf4 100644
--- a/lib/models/user_t.ml
+++ b/lib/models/user_t.ml
@@ -1,6 +1,8 @@
+open Core
+
type partial_user = {
id: Snowflake.t;
-} [@@deriving yojson { strict = false}]
+} [@@deriving sexp, yojson { strict = false}]
type t = {
id: Snowflake.t;
@@ -8,4 +10,4 @@ type t = {
discriminator: string;
avatar: string option [@default None];
bot: bool [@default false];
-} [@@deriving yojson { strict = false }] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false }] \ No newline at end of file