aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAdelyn Breedlove <[email protected]>2019-01-27 14:09:33 -0700
committerAdelyn Breedlove <[email protected]>2019-01-27 14:09:33 -0700
commitfbd3597c7ab798cf10a447eb2b477dd4e3ed6d33 (patch)
tree16d1ef889e9c6f1090dd911e6fb31392625066c2 /lib
parenthopeful reconnection fix (diff)
downloaddisml-fbd3597c7ab798cf10a447eb2b477dd4e3ed6d33.tar.xz
disml-fbd3597c7ab798cf10a447eb2b477dd4e3ed6d33.zip
Switch to ID abstractions internally
Diffstat (limited to 'lib')
-rw-r--r--lib/models/channel/channel_t.ml48
-rw-r--r--lib/models/channel/channel_t.mli38
-rw-r--r--lib/models/channel/message/message.ml61
-rw-r--r--lib/models/channel/message/message_t.ml10
-rw-r--r--lib/models/channel/message/message_t.mli10
-rw-r--r--lib/models/channel/message/reaction_t.ml8
-rw-r--r--lib/models/channel/message/reaction_t.mli8
-rw-r--r--lib/models/emoji.ml2
-rw-r--r--lib/models/emoji.mli2
-rw-r--r--lib/models/guild/guild.ml11
-rw-r--r--lib/models/guild/guild.mli6
-rw-r--r--lib/models/guild/guild_t.ml21
-rw-r--r--lib/models/guild/guild_t.mli16
-rw-r--r--lib/models/guild/member.ml34
-rw-r--r--lib/models/guild/member_t.ml16
-rw-r--r--lib/models/guild/member_t.mli14
-rw-r--r--lib/models/guild/role.ml10
-rw-r--r--lib/models/guild/role_t.ml8
-rw-r--r--lib/models/guild/role_t.mli6
-rw-r--r--lib/models/user/user.ml9
-rw-r--r--lib/models/user/user_t.ml4
-rw-r--r--lib/models/user/user_t.mli4
22 files changed, 187 insertions, 159 deletions
diff --git a/lib/models/channel/channel_t.ml b/lib/models/channel/channel_t.ml
index dce1d54..62d6ac0 100644
--- a/lib/models/channel/channel_t.ml
+++ b/lib/models/channel/channel_t.ml
@@ -3,27 +3,27 @@ open Core
exception Invalid_channel of Yojson.Safe.json
type group = {
- id: Snowflake.t;
- last_message_id: Snowflake.t option [@default None];
+ id: Channel_id_t.t;
+ last_message_id: Message_id.t option [@default None];
last_pin_timestamp: string option [@default None];
icon: string option [@default None];
name: string option [@default None];
- owner_id: Snowflake.t;
+ owner_id: User_id_t.t;
recipients: User_t.t list [@default []];
} [@@deriving sexp, yojson { strict = false}]
type dm = {
- id: Snowflake.t;
- last_message_id: Snowflake.t option [@default None];
+ id: Channel_id_t.t;
+ last_message_id: Message_id.t option [@default None];
last_pin_timestamp: string option [@default None];
} [@@deriving sexp, yojson { strict = false}]
type guild_text = {
- id: Snowflake.t;
- last_message_id: Snowflake.t option [@default None];
+ id: Channel_id_t.t;
+ last_message_id: Message_id.t option [@default None];
last_pin_timestamp: string option [@default None];
- category_id: Snowflake.t option [@default None][@key "parent_id"];
- guild_id: Snowflake.t option [@default None];
+ category_id: Channel_id_t.t option [@default None][@key "parent_id"];
+ guild_id: Guild_id_t.t option [@default None];
name: string;
position: int;
topic: string option [@default None];
@@ -32,9 +32,9 @@ type guild_text = {
} [@@deriving sexp, yojson { strict = false}]
type guild_voice = {
- id: Snowflake.t;
- category_id: Snowflake.t option [@default None][@key "parent_id"];
- guild_id: Snowflake.t option [@default None];
+ id: Channel_id_t.t;
+ category_id: Channel_id_t.t option [@default None][@key "parent_id"];
+ guild_id: Guild_id_t.t option [@default None];
name: string;
position: int;
user_limit: int [@default -1];
@@ -42,8 +42,8 @@ type guild_voice = {
} [@@deriving sexp, yojson { strict = false}]
type category = {
- id: Snowflake.t;
- guild_id: Snowflake.t option [@default None];
+ id: Channel_id_t.t;
+ guild_id: Guild_id_t.t option [@default None];
position: int;
name: string;
} [@@deriving sexp, yojson { strict = false}]
@@ -57,22 +57,22 @@ type t =
[@@deriving sexp, yojson { strict = false}]
type channel_wrapper = {
- id: Snowflake.t;
+ id: Channel_id_t.t;
kind: int [@key "type"];
- guild_id: Snowflake.t option [@default None];
+ guild_id: Guild_id_t.t option [@default None];
position: int option [@default None];
name: string option [@default None];
topic: string option [@default None];
nsfw: bool option [@default None];
- last_message_id: Snowflake.t option [@default None];
+ last_message_id: Message_id.t option [@default None];
bitrate: int option [@default None];
user_limit: int option [@default None];
slow_mode_timeout: int option [@default None];
recipients: User_t.t list option [@default None];
icon: string option [@default None];
- owner_id: Snowflake.t option [@default None];
+ owner_id: User_id_t.t option [@default None];
application_id: Snowflake.t option [@default None];
- category_id: Snowflake.t option [@default None][@key "parent_id"];
+ category_id: Channel_id_t.t option [@default None][@key "parent_id"];
last_pin_timestamp: string option [@default None];
} [@@deriving sexp, yojson { strict = false}]
@@ -111,8 +111,8 @@ let wrap s =
| _ -> raise (Invalid_channel (channel_wrapper_to_yojson s))
let get_id = function
-| Group g -> g.id
-| Private p -> p.id
-| GuildText t -> t.id
-| GuildVoice v -> v.id
-| Category c -> c.id \ No newline at end of file
+| Group g -> let `Channel_id id = g.id in id
+| Private p -> let `Channel_id id = p.id in id
+| GuildText t -> let `Channel_id id = t.id in id
+| GuildVoice v -> let `Channel_id id = v.id in id
+| Category c -> let `Channel_id id = c.id in id \ No newline at end of file
diff --git a/lib/models/channel/channel_t.mli b/lib/models/channel/channel_t.mli
index f3974d4..9deea82 100644
--- a/lib/models/channel/channel_t.mli
+++ b/lib/models/channel/channel_t.mli
@@ -2,29 +2,29 @@ exception Invalid_channel of Yojson.Safe.json
(** Represents a Group channel object. *)
type group = {
- id: Snowflake.t;
- last_message_id: Snowflake.t option;
+ id: Channel_id_t.t;
+ last_message_id: Message_id.t option;
last_pin_timestamp: string option;
icon: string option;
name: string option;
- owner_id: Snowflake.t;
+ owner_id: User_id_t.t;
recipients: User_t.t list;
} [@@deriving sexp, yojson]
(** Represents a private channel with a single user. *)
type dm = {
- id: Snowflake.t;
- last_message_id: Snowflake.t option;
+ id: Channel_id_t.t;
+ last_message_id: Message_id.t option;
last_pin_timestamp: string option;
} [@@deriving sexp, yojson]
(** Represents a text channel in a guild. *)
type guild_text = {
- id: Snowflake.t;
- last_message_id: Snowflake.t option;
+ id: Channel_id_t.t;
+ last_message_id: Message_id.t option;
last_pin_timestamp: string option;
- category_id: Snowflake.t option;
- guild_id: Snowflake.t option;
+ category_id: Channel_id_t.t option;
+ guild_id: Guild_id_t.t option;
name: string;
position: int;
topic: string option;
@@ -34,9 +34,9 @@ type guild_text = {
(** Represents a voice channel in a guild. *)
type guild_voice = {
- id: Snowflake.t;
- category_id: Snowflake.t option;
- guild_id: Snowflake.t option;
+ id: Channel_id_t.t;
+ category_id: Channel_id_t.t option;
+ guild_id: Guild_id_t.t option;
name: string;
position: int;
user_limit: int;
@@ -45,8 +45,8 @@ type guild_voice = {
(** Represents a guild category. *)
type category = {
- id: Snowflake.t;
- guild_id: Snowflake.t option;
+ id: Channel_id_t.t;
+ guild_id: Guild_id_t.t option;
position: int;
name: string;
} [@@deriving sexp, yojson]
@@ -62,22 +62,22 @@ type t =
(** Intermediate used internally. *)
type channel_wrapper = {
- id: Snowflake.t;
+ id: Channel_id_t.t;
kind: int;
- guild_id: Snowflake.t option;
+ guild_id: Guild_id_t.t option;
position: int option;
name: string option;
topic: string option;
nsfw: bool option;
- last_message_id: Snowflake.t option;
+ last_message_id: Message_id.t option;
bitrate: int option;
user_limit: int option;
slow_mode_timeout: int option;
recipients: User_t.t list option;
icon: string option;
- owner_id: Snowflake.t option;
+ owner_id: User_id_t.t option;
application_id: Snowflake.t option;
- category_id: Snowflake.t option;
+ category_id: Channel_id_t.t option;
last_pin_timestamp: string option;
} [@@deriving sexp, yojson]
diff --git a/lib/models/channel/message/message.ml b/lib/models/channel/message/message.ml
index 39ee0f3..a64c09d 100644
--- a/lib/models/channel/message/message.ml
+++ b/lib/models/channel/message/message.ml
@@ -1,70 +1,67 @@
-open Core
open Async
include Message_t
let add_reaction msg (emoji:Emoji.t) =
+ let `Message_id id = msg.id in
+ let `Channel_id channel_id = msg.channel_id in
let e = match emoji.id with
| Some i -> Printf.sprintf "%s:%d" emoji.name i
| None -> emoji.name
in
- Http.create_reaction msg.channel_id msg.id e
+ Http.create_reaction channel_id id e
let remove_reaction msg (emoji:Emoji.t) (user:User_t.t) =
+ let `Message_id id = msg.id in
+ let `Channel_id channel_id = msg.channel_id in
+ let `User_id user_id = user.id in
let e = match emoji.id with
| Some i -> Printf.sprintf "%s:%d" emoji.name i
| None -> emoji.name
in
- Http.delete_reaction msg.channel_id msg.id e user.id
+ Http.delete_reaction channel_id id e user_id
let clear_reactions msg =
- Http.delete_reactions msg.channel_id msg.id
+ let `Message_id id = msg.id in
+ let `Channel_id channel_id = msg.channel_id in
+ Http.delete_reactions channel_id id
let delete msg =
- Http.delete_message msg.channel_id msg.id
+ let `Message_id id = msg.id in
+ let `Channel_id channel_id = msg.channel_id in
+ Http.delete_message channel_id id
let pin msg =
- Http.pin_message msg.channel_id msg.id
+ let `Message_id id = msg.id in
+ let `Channel_id channel_id = msg.channel_id in
+ Http.pin_message channel_id id
let unpin msg =
- Http.unpin_message msg.channel_id msg.id
+ let `Message_id id = msg.id in
+ let `Channel_id channel_id = msg.channel_id in
+ Http.unpin_message channel_id id
-let reply msg cont =
- let rep = `Assoc [("content", `String cont)] in
- Http.create_message msg.channel_id rep
-
+let reply msg content =
+ Channel_id.say content msg.channel_id
-let reply_with ?embed ?content ?file ?(tts=false) msg =
- let embed = match embed with
- | Some e -> Embed.to_yojson e
- | None -> `Null in
- let content = match content with
- | Some c -> `String c
- | None -> `Null in
- let file = match file with
- | Some f -> `String f
- | None -> `Null in
- let () = match embed, content with
- | `Null, `Null -> raise Channel.Invalid_message
- | _ -> () in
- Http.create_message (msg.channel_id) (`Assoc [
- ("embed", embed);
- ("content", content);
- ("file", file);
- ("tts", `Bool tts);
- ])
+let reply_with ?embed ?content ?file ?tts msg =
+ Channel_id.send_message ?embed ?content ?file ?tts msg.channel_id
let set_content msg cont =
+ let `Message_id id = msg.id in
+ let `Channel_id channel_id = msg.channel_id in
to_yojson { msg with content = cont; }
- |> Http.edit_message msg.channel_id msg.id
+ |> Http.edit_message channel_id id
let set_embed msg embed =
+ let `Message_id id = msg.id in
+ let `Channel_id channel_id = msg.channel_id in
to_yojson { msg with embeds = [embed]; }
- |> Http.edit_message msg.channel_id msg.id
+ |> Http.edit_message channel_id id
\ No newline at end of file
diff --git a/lib/models/channel/message/message_t.ml b/lib/models/channel/message/message_t.ml
index 47b5803..20dc03f 100644
--- a/lib/models/channel/message/message_t.ml
+++ b/lib/models/channel/message/message_t.ml
@@ -1,18 +1,18 @@
open Core
type t = {
- id: Snowflake.t;
+ id: Message_id.t;
author: User_t.t;
- channel_id: Snowflake.t;
+ channel_id: Channel_id_t.t;
member: Member_t.partial_member option [@default None];
- guild_id: Snowflake.t option [@default None];
+ guild_id: Guild_id_t.t option [@default None];
content: string;
timestamp: string;
editedimestamp: string option [@default None];
tts: bool;
mention_everyone: bool;
- (* mentions: Snowflake.t list [@default []]; *)
- (* role_mentions: Snowflake.t list [@default []]; *)
+ mentions: User_id_t.t list [@default []];
+ role_mentions: Role_id.t list [@default []];
attachments: Attachment.t list [@default []];
embeds: Embed.t list [@default []];
reactions: Snowflake.t list [@default []];
diff --git a/lib/models/channel/message/message_t.mli b/lib/models/channel/message/message_t.mli
index 14086fe..d829dc5 100644
--- a/lib/models/channel/message/message_t.mli
+++ b/lib/models/channel/message/message_t.mli
@@ -1,17 +1,17 @@
(** Represents a message object. *)
type t = {
- id: Snowflake.t;
+ id: Message_id.t;
author: User_t.t;
- channel_id: Snowflake.t;
+ channel_id: Channel_id_t.t;
member: Member_t.partial_member option;
- guild_id: Snowflake.t option;
+ guild_id: Guild_id_t.t option;
content: string;
timestamp: string;
editedimestamp: string option;
tts: bool;
mention_everyone: bool;
- (* mentions: Snowflake.t list; *)
- (* role_mentions: Snowflake.t list; *)
+ mentions: User_id_t.t list;
+ role_mentions: Role_id.t list;
attachments: Attachment.t list;
embeds: Embed.t list;
reactions: Snowflake.t list;
diff --git a/lib/models/channel/message/reaction_t.ml b/lib/models/channel/message/reaction_t.ml
index c382b68..1aa3c84 100644
--- a/lib/models/channel/message/reaction_t.ml
+++ b/lib/models/channel/message/reaction_t.ml
@@ -1,10 +1,10 @@
open Core
type reaction_event = {
- user_id: Snowflake.t;
- channel_id: Snowflake.t;
- message_id: Snowflake.t;
- guild_id: Snowflake.t option [@default None];
+ user_id: User_id_t.t;
+ channel_id: Channel_id_t.t;
+ message_id: Message_id.t;
+ guild_id: Guild_id_t.t option [@default None];
emoji: Emoji.partial_emoji;
} [@@deriving sexp, yojson]
diff --git a/lib/models/channel/message/reaction_t.mli b/lib/models/channel/message/reaction_t.mli
index db95521..6c2782a 100644
--- a/lib/models/channel/message/reaction_t.mli
+++ b/lib/models/channel/message/reaction_t.mli
@@ -1,9 +1,9 @@
(** Represents a single reaction as received over the gateway. *)
type reaction_event = {
- user_id: Snowflake.t;
- channel_id: Snowflake.t;
- message_id: Snowflake.t;
- guild_id: Snowflake.t option;
+ user_id: User_id_t.t;
+ channel_id: Channel_id_t.t;
+ message_id: Message_id.t;
+ guild_id: Guild_id_t.t option;
emoji: Emoji.partial_emoji;
} [@@deriving sexp, yojson]
diff --git a/lib/models/emoji.ml b/lib/models/emoji.ml
index 2b7cf1d..9debfe2 100644
--- a/lib/models/emoji.ml
+++ b/lib/models/emoji.ml
@@ -8,7 +8,7 @@ type partial_emoji = {
type t = {
id: Snowflake.t option [@default None];
name: string;
- roles: Snowflake.t list [@default []];
+ roles: Role_id.t list [@default []];
user: User_t.t option [@default None];
require_colons: bool option [@default None];
managed: bool option [@default None];
diff --git a/lib/models/emoji.mli b/lib/models/emoji.mli
index 4bbfc2a..10b12d5 100644
--- a/lib/models/emoji.mli
+++ b/lib/models/emoji.mli
@@ -6,7 +6,7 @@ type partial_emoji = {
type t = {
id: Snowflake.t option;
name: string;
- roles: Snowflake.t list;
+ roles: Role_id.t list;
user: User_t.t option;
require_colons: bool option;
managed: bool option;
diff --git a/lib/models/guild/guild.ml b/lib/models/guild/guild.ml
index 926b152..812a49e 100644
--- a/lib/models/guild/guild.ml
+++ b/lib/models/guild/guild.ml
@@ -4,16 +4,19 @@ open Async
include Guild_t
include Impl.Guild(Guild_t)
-let get_member ~id guild =
+let get_member ~(id:User_id_t.t) guild =
match List.find ~f:(fun m -> m.user.id = id) guild.members with
| Some m -> Deferred.Or_error.return m
- | None -> Http.get_member (get_id guild) id
+ | None ->
+ let `User_id id = id in
+ Http.get_member (get_id guild) id
-let get_channel ~id guild =
+let get_channel ~(id:Channel_id_t.t) guild =
+ let `Channel_id id = id in
match List.find ~f:(fun c -> Channel_t.get_id c = id) guild.channels with
| Some c -> Deferred.Or_error.return c
| None -> Http.get_channel id
(* TODO add HTTP fallback *)
-let get_role ~id guild =
+let get_role ~(id:Role_id.t) guild =
List.find ~f:(fun r -> r.id = id) guild.roles \ No newline at end of file
diff --git a/lib/models/guild/guild.mli b/lib/models/guild/guild.mli
index a6d3bcf..81055a1 100644
--- a/lib/models/guild/guild.mli
+++ b/lib/models/guild/guild.mli
@@ -4,6 +4,6 @@ include module type of Guild_t
include S.GuildImpl with
type t := Guild_t.t
-val get_channel : id:Snowflake.t -> t -> Channel_t.t Deferred.Or_error.t
-val get_member : id:Snowflake.t -> t -> Member_t.t Deferred.Or_error.t
-val get_role : id:Snowflake.t -> t -> Role_t.t option \ No newline at end of file
+val get_channel : id:Channel_id_t.t -> t -> Channel_t.t Deferred.Or_error.t
+val get_member : id:User_id_t.t -> t -> Member_t.t Deferred.Or_error.t
+val get_role : id:Role_id.t -> t -> Role_t.t option \ No newline at end of file
diff --git a/lib/models/guild/guild_t.ml b/lib/models/guild/guild_t.ml
index 97e3c48..42e373c 100644
--- a/lib/models/guild/guild_t.ml
+++ b/lib/models/guild/guild_t.ml
@@ -5,16 +5,16 @@ type unavailable = {
} [@@deriving sexp, yojson { strict = false }]
type pre = {
- id: Snowflake.t;
+ id: Guild_id_t.t;
name: string;
icon: string option [@default None];
splash: string option [@default None];
- owner_id: Snowflake.t;
+ owner_id: User_id_t.t;
region: string;
- afk_channel_id: Snowflake.t option [@default None];
+ afk_channel_id: Channel_id_t.t option [@default None];
afk_timeout: int;
embed_enabled: bool option [@default None];
- embed_channel_id: Snowflake.t option [@default None];
+ embed_channel_id: Channel_id_t.t option [@default None];
verification_level: int;
default_message_notifications: int;
explicit_content_filter: int;
@@ -34,16 +34,16 @@ type pre = {
} [@@deriving sexp, yojson { strict = false }]
type t = {
- id: Snowflake.t;
+ id: Guild_id_t.t;
name: string;
icon: string option [@default None];
splash: string option [@default None];
- owner_id: Snowflake.t;
+ owner_id: User_id_t.t;
region: string;
- afk_channel_id: Snowflake.t option [@default None];
+ afk_channel_id: Channel_id_t.t option [@default None];
afk_timeout: int;
embed_enabled: bool option [@default None];
- embed_channel_id: Snowflake.t option [@default None];
+ embed_channel_id: Channel_id_t.t option [@default None];
verification_level: int;
default_message_notifications: int;
explicit_content_filter: int;
@@ -63,11 +63,12 @@ type t = {
} [@@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 `Guild_id id = id in
let roles = List.map ~f:(Role_t.wrap ~guild_id:id) roles in
let members = List.map ~f:(Member_t.wrap ~guild_id:id) members in
let channels = List.map ~f:Channel_t.wrap channels in
let widget_channel = Option.map ~f:Channel_t.wrap widget_channel in
let system_channel = Option.map ~f:Channel_t.wrap system_channel in
- {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}
+ {id = `Guild_id 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}
-let get_id guild = guild.id \ No newline at end of file
+let get_id guild = let `Guild_id id = guild.id in id \ No newline at end of file
diff --git a/lib/models/guild/guild_t.mli b/lib/models/guild/guild_t.mli
index 8fdd9a7..0b1ec92 100644
--- a/lib/models/guild/guild_t.mli
+++ b/lib/models/guild/guild_t.mli
@@ -3,16 +3,16 @@ type unavailable = {
} [@@deriving sexp, yojson]
type pre = {
- id: Snowflake.t;
+ id: Guild_id_t.t;
name: string;
icon: string option;
splash: string option;
- owner_id: Snowflake.t;
+ owner_id: User_id_t.t;
region: string;
- afk_channel_id: Snowflake.t option;
+ afk_channel_id: Channel_id_t.t option;
afk_timeout: int;
embed_enabled: bool option;
- embed_channel_id: Snowflake.t option;
+ embed_channel_id: Channel_id_t.t option;
verification_level: int;
default_message_notifications: int;
explicit_content_filter: int;
@@ -32,16 +32,16 @@ type pre = {
} [@@deriving sexp, yojson]
type t = {
- id: Snowflake.t;
+ id: Guild_id_t.t;
name: string;
icon: string option;
splash: string option;
- owner_id: Snowflake.t;
+ owner_id: User_id_t.t;
region: string;
- afk_channel_id: Snowflake.t option;
+ afk_channel_id: Channel_id_t.t option;
afk_timeout: int;
embed_enabled: bool option;
- embed_channel_id: Snowflake.t option;
+ embed_channel_id: Channel_id_t.t option;
verification_level: int;
default_message_notifications: int;
explicit_content_filter: int;
diff --git a/lib/models/guild/member.ml b/lib/models/guild/member.ml
index 7634d85..f083cce 100644
--- a/lib/models/guild/member.ml
+++ b/lib/models/guild/member.ml
@@ -1,39 +1,57 @@
include Member_t
let add_role ~(role:Role_t.t) member =
- Http.add_member_role member.guild_id member.user.id role.id
+ let `Guild_id guild_id = member.guild_id in
+ let `User_id user_id = member.user.id in
+ let `Role_id role_id = role.id in
+ Http.add_member_role guild_id user_id role_id
let remove_role ~(role:Role_t.t) member =
- Http.remove_member_role member.guild_id member.user.id role.id
+ let `Guild_id guild_id = member.guild_id in
+ let `User_id user_id = member.user.id in
+ let `Role_id role_id = role.id in
+ Http.remove_member_role guild_id user_id role_id
let ban ?(reason="") ?(days=0) member =
- Http.guild_ban_add member.guild_id member.user.id (`Assoc [
+ let `Guild_id guild_id = member.guild_id in
+ let `User_id user_id = member.user.id in
+ Http.guild_ban_add guild_id user_id (`Assoc [
("delete-message-days", `Int days);
("reason", `String reason);
])
let kick ?reason member =
+ let `Guild_id guild_id = member.guild_id in
+ let `User_id user_id = member.user.id in
let payload = match reason with
| Some r -> `Assoc [("reason", `String r)]
| None -> `Null
- in Http.remove_member member.guild_id member.user.id payload
+ in Http.remove_member guild_id user_id payload
let mute member =
- Http.edit_member member.guild_id member.user.id (`Assoc [
+ let `Guild_id guild_id = member.guild_id in
+ let `User_id user_id = member.user.id in
+ Http.edit_member guild_id user_id (`Assoc [
("mute", `Bool true);
])
let deafen member =
- Http.edit_member member.guild_id member.user.id (`Assoc [
+ let `Guild_id guild_id = member.guild_id in
+ let `User_id user_id = member.user.id in
+ Http.edit_member guild_id user_id (`Assoc [
("deaf", `Bool true);
])
let unmute member =
- Http.edit_member member.guild_id member.user.id (`Assoc [
+ let `Guild_id guild_id = member.guild_id in
+ let `User_id user_id = member.user.id in
+ Http.edit_member guild_id user_id (`Assoc [
("mute", `Bool false);
])
let undeafen member =
- Http.edit_member member.guild_id member.user.id (`Assoc [
+ let `Guild_id guild_id = member.guild_id in
+ let `User_id user_id = member.user.id in
+ Http.edit_member guild_id user_id (`Assoc [
("deaf", `Bool false);
])
diff --git a/lib/models/guild/member_t.ml b/lib/models/guild/member_t.ml
index e6edb61..10f1cf0 100644
--- a/lib/models/guild/member_t.ml
+++ b/lib/models/guild/member_t.ml
@@ -2,7 +2,7 @@ open Core
type partial_member = {
nick: string option [@default None];
- roles: Snowflake.t list;
+ roles: Role_id.t list;
joined_at: string;
deaf: bool;
mute: bool;
@@ -10,7 +10,7 @@ type partial_member = {
type member = {
nick: string option [@default None];
- roles: Snowflake.t list;
+ roles: Role_id.t list;
joined_at: string;
deaf: bool;
mute: bool;
@@ -18,26 +18,26 @@ type member = {
} [@@deriving sexp, yojson { strict = false}]
type member_wrapper = {
- guild_id: Snowflake.t;
+ guild_id: Guild_id_t.t;
user: User_t.t;
} [@@deriving sexp, yojson { strict = false }]
type member_update = {
- guild_id: Snowflake.t;
- roles: Snowflake.t list [@default []];
+ guild_id: Guild_id_t.t;
+ roles: Role_id.t list [@default []];
user: User_t.t;
nick: string option [@default None];
} [@@deriving sexp, yojson { strict = false}]
type t = {
nick: string option [@default None];
- roles: Snowflake.t list;
+ roles: Role_id.t list;
joined_at: string;
deaf: bool;
mute: bool;
user: User_t.t;
- guild_id: Snowflake.t;
+ guild_id: Guild_id_t.t;
} [@@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
+ {nick;roles;joined_at;deaf;mute;user;guild_id = `Guild_id guild_id} \ No newline at end of file
diff --git a/lib/models/guild/member_t.mli b/lib/models/guild/member_t.mli
index 4655b33..4f39b6c 100644
--- a/lib/models/guild/member_t.mli
+++ b/lib/models/guild/member_t.mli
@@ -1,6 +1,6 @@
type partial_member = {
nick: string option;
- roles: Snowflake.t list;
+ roles: Role_id.t list;
joined_at: string;
deaf: bool;
mute: bool;
@@ -8,7 +8,7 @@ type partial_member = {
type member = {
nick: string option;
- roles: Snowflake.t list;
+ roles: Role_id.t list;
joined_at: string;
deaf: bool;
mute: bool;
@@ -16,25 +16,25 @@ type member = {
} [@@deriving sexp, yojson]
type member_wrapper = {
- guild_id: Snowflake.t;
+ guild_id: Guild_id_t.t;
user: User_t.t;
} [@@deriving sexp, yojson]
type member_update = {
- guild_id: Snowflake.t;
- roles: Snowflake.t list;
+ guild_id: Guild_id_t.t;
+ roles: Role_id.t list;
user: User_t.t;
nick: string option;
} [@@deriving sexp, yojson]
type t = {
nick: string option;
- roles: Snowflake.t list;
+ roles: Role_id.t list;
joined_at: string;
deaf: bool;
mute: bool;
user: User_t.t;
- guild_id: Snowflake.t;
+ guild_id: Guild_id_t.t;
} [@@deriving sexp, yojson]
val wrap : guild_id:Snowflake.t -> member -> t \ No newline at end of file
diff --git a/lib/models/guild/role.ml b/lib/models/guild/role.ml
index ee6bb0a..46f908b 100644
--- a/lib/models/guild/role.ml
+++ b/lib/models/guild/role.ml
@@ -1,11 +1,17 @@
include Role_t
-let edit_role ~body (role:t) = Http.guild_role_edit role.guild_id role.id body
+let edit_role ~body (role:t) =
+ let `Role_id id = role.id in
+ let `Guild_id guild_id = role.guild_id in
+ Http.guild_role_edit guild_id id body
let allow_mention role =
edit_role ~body:(`Assoc [("mentionable", `Bool true)]) role
-let delete (role:t) = Http.guild_role_remove role.guild_id role.id
+let delete (role:t) =
+ let `Role_id id = role.id in
+ let `Guild_id guild_id = role.guild_id in
+ Http.guild_role_remove guild_id id
let disallow_mention role =
edit_role ~body:(`Assoc [("mentionable", `Bool false)]) role
diff --git a/lib/models/guild/role_t.ml b/lib/models/guild/role_t.ml
index 9ae53a1..f012a15 100644
--- a/lib/models/guild/role_t.ml
+++ b/lib/models/guild/role_t.ml
@@ -1,7 +1,7 @@
open Core
type role = {
- id: Snowflake.t;
+ id: Role_id.t;
name: string;
colour: int [@key "color"];
hoist: bool;
@@ -12,7 +12,7 @@ type role = {
} [@@deriving sexp, yojson { strict = false}]
type t = {
- id: Snowflake.t;
+ id: Role_id.t;
name: string;
colour: int [@key "color"];
hoist: bool;
@@ -20,8 +20,8 @@ type t = {
permissions: int;
managed: bool;
mentionable: bool;
- guild_id: Snowflake.t;
+ guild_id: Guild_id_t.t;
} [@@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
+ {id;name;colour;hoist;position;permissions;managed;mentionable;guild_id = `Guild_id guild_id} \ No newline at end of file
diff --git a/lib/models/guild/role_t.mli b/lib/models/guild/role_t.mli
index cd536fe..99517b8 100644
--- a/lib/models/guild/role_t.mli
+++ b/lib/models/guild/role_t.mli
@@ -1,5 +1,5 @@
type role = {
- id: Snowflake.t;
+ id: Role_id.t;
name: string;
colour: int;
hoist: bool;
@@ -10,7 +10,7 @@ type role = {
} [@@deriving sexp, yojson]
type t = {
- id: Snowflake.t;
+ id: Role_id.t;
name: string;
colour: int;
hoist: bool;
@@ -18,7 +18,7 @@ type t = {
permissions: int;
managed: bool;
mentionable: bool;
- guild_id: Snowflake.t;
+ guild_id: Guild_id_t.t;
} [@@deriving sexp, yojson]
val wrap : guild_id:Snowflake.t -> role -> t \ No newline at end of file
diff --git a/lib/models/user/user.ml b/lib/models/user/user.ml
index bd6583c..de7ce01 100644
--- a/lib/models/user/user.ml
+++ b/lib/models/user/user.ml
@@ -5,16 +5,19 @@ let tag user =
Printf.sprintf "%s#%s" user.username user.discriminator
let mention user =
- Printf.sprintf "<@%d>" user.id
+ let `User_id id = user.id in
+ Printf.sprintf "<@%d>" id
let default_avatar user =
let avatar = Int.of_string user.discriminator % 5 in
Endpoints.cdn_default_avatar avatar
-let face user = match user.avatar with
+let face user =
+ let `User_id id = user.id in
+ match user.avatar with
| Some avatar ->
let ext = if String.is_substring ~substring:"a_" avatar
then "gif"
else "png" in
- Endpoints.cdn_avatar user.id avatar ext
+ Endpoints.cdn_avatar id avatar ext
| None -> default_avatar user \ No newline at end of file
diff --git a/lib/models/user/user_t.ml b/lib/models/user/user_t.ml
index 52dbaf4..89a6895 100644
--- a/lib/models/user/user_t.ml
+++ b/lib/models/user/user_t.ml
@@ -1,11 +1,11 @@
open Core
type partial_user = {
- id: Snowflake.t;
+ id: User_id_t.t;
} [@@deriving sexp, yojson { strict = false}]
type t = {
- id: Snowflake.t;
+ id: User_id_t.t;
username: string;
discriminator: string;
avatar: string option [@default None];
diff --git a/lib/models/user/user_t.mli b/lib/models/user/user_t.mli
index 50e9059..b0228f9 100644
--- a/lib/models/user/user_t.mli
+++ b/lib/models/user/user_t.mli
@@ -1,9 +1,9 @@
type partial_user = {
- id: Snowflake.t;
+ id: User_id_t.t;
} [@@deriving sexp, yojson]
type t = {
- id: Snowflake.t;
+ id: User_id_t.t;
username: string;
discriminator: string;
avatar: string option;