diff options
| author | Adelyn Breedlove <[email protected]> | 2019-01-27 14:09:33 -0700 |
|---|---|---|
| committer | Adelyn Breedlove <[email protected]> | 2019-01-27 14:09:33 -0700 |
| commit | fbd3597c7ab798cf10a447eb2b477dd4e3ed6d33 (patch) | |
| tree | 16d1ef889e9c6f1090dd911e6fb31392625066c2 /lib | |
| parent | hopeful reconnection fix (diff) | |
| download | disml-fbd3597c7ab798cf10a447eb2b477dd4e3ed6d33.tar.xz disml-fbd3597c7ab798cf10a447eb2b477dd4e3ed6d33.zip | |
Switch to ID abstractions internally
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/models/channel/channel_t.ml | 48 | ||||
| -rw-r--r-- | lib/models/channel/channel_t.mli | 38 | ||||
| -rw-r--r-- | lib/models/channel/message/message.ml | 61 | ||||
| -rw-r--r-- | lib/models/channel/message/message_t.ml | 10 | ||||
| -rw-r--r-- | lib/models/channel/message/message_t.mli | 10 | ||||
| -rw-r--r-- | lib/models/channel/message/reaction_t.ml | 8 | ||||
| -rw-r--r-- | lib/models/channel/message/reaction_t.mli | 8 | ||||
| -rw-r--r-- | lib/models/emoji.ml | 2 | ||||
| -rw-r--r-- | lib/models/emoji.mli | 2 | ||||
| -rw-r--r-- | lib/models/guild/guild.ml | 11 | ||||
| -rw-r--r-- | lib/models/guild/guild.mli | 6 | ||||
| -rw-r--r-- | lib/models/guild/guild_t.ml | 21 | ||||
| -rw-r--r-- | lib/models/guild/guild_t.mli | 16 | ||||
| -rw-r--r-- | lib/models/guild/member.ml | 34 | ||||
| -rw-r--r-- | lib/models/guild/member_t.ml | 16 | ||||
| -rw-r--r-- | lib/models/guild/member_t.mli | 14 | ||||
| -rw-r--r-- | lib/models/guild/role.ml | 10 | ||||
| -rw-r--r-- | lib/models/guild/role_t.ml | 8 | ||||
| -rw-r--r-- | lib/models/guild/role_t.mli | 6 | ||||
| -rw-r--r-- | lib/models/user/user.ml | 9 | ||||
| -rw-r--r-- | lib/models/user/user_t.ml | 4 | ||||
| -rw-r--r-- | lib/models/user/user_t.mli | 4 |
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; |