From 54830153a07f466cd20b25f12847ba447be4ecc5 Mon Sep 17 00:00:00 2001 From: Adelyn Breelove Date: Mon, 25 Feb 2019 09:17:17 -0700 Subject: Add permission overwrites --- lib/models/channel/channel_t.ml | 16 ++++++++++------ lib/models/channel/channel_t.mli | 4 ++++ lib/models/overwrites.ml | 8 ++++++++ lib/models/overwrites.mli | 6 ++++++ 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 lib/models/overwrites.ml create mode 100644 lib/models/overwrites.mli (limited to 'lib/models') diff --git a/lib/models/channel/channel_t.ml b/lib/models/channel/channel_t.ml index 0734c63..e332c36 100644 --- a/lib/models/channel/channel_t.ml +++ b/lib/models/channel/channel_t.ml @@ -29,6 +29,7 @@ type guild_text = { topic: string option [@default None]; nsfw: bool; slow_mode_timeout: int option [@default None]; + permission_overwrites: Overwrites.t list [@default []]; } [@@deriving sexp, yojson { strict = false; exn = true }] type guild_voice = { @@ -39,6 +40,7 @@ type guild_voice = { position: int; user_limit: int [@default -1]; bitrate: int option [@default None]; + permission_overwrites: Overwrites.t list [@default []]; } [@@deriving sexp, yojson { strict = false; exn = true }] type category = { @@ -46,6 +48,7 @@ type category = { guild_id: Guild_id_t.t option [@default None]; position: int; name: string; + permission_overwrites: Overwrites.t list [@default []]; } [@@deriving sexp, yojson { strict = false; exn = true }] type t = [ @@ -74,19 +77,20 @@ type channel_wrapper = { application_id: Snowflake.t option [@default None]; category_id: Channel_id_t.t option [@default None][@key "parent_id"]; last_pin_timestamp: string option [@default None]; + permission_overwrites: Overwrites.t list [@default []]; } [@@deriving sexp, yojson { strict = false; exn = true }] -let unwrap_as_guild_text {id;guild_id;position;name;topic;nsfw;last_message_id;slow_mode_timeout;category_id;last_pin_timestamp;_} = +let unwrap_as_guild_text {id;guild_id;position;name;topic;nsfw;last_message_id;slow_mode_timeout;category_id;last_pin_timestamp;permission_overwrites;_} = let position = Option.value_exn position in let name = Option.value_exn name in let nsfw = Option.value ~default:false nsfw in - { id; guild_id; position; name; topic; nsfw; last_message_id; slow_mode_timeout; category_id; last_pin_timestamp } + { id; guild_id; position; name; topic; nsfw; last_message_id; slow_mode_timeout; category_id; last_pin_timestamp; permission_overwrites } -let unwrap_as_guild_voice {id;guild_id;position;name;bitrate;user_limit;category_id;_} = +let unwrap_as_guild_voice {id;guild_id;position;name;bitrate;user_limit;category_id;permission_overwrites;_} = let position = Option.value_exn position in let name = Option.value_exn name in let user_limit = Option.value ~default:(-1) user_limit in - { id; guild_id; position; name; user_limit; bitrate ; category_id; } + { id; guild_id; position; name; user_limit; bitrate ; category_id; permission_overwrites } let unwrap_as_dm {id;last_message_id;last_pin_timestamp;_} = { id; last_message_id; last_pin_timestamp; } @@ -96,10 +100,10 @@ let unwrap_as_group {id;name;last_message_id;recipients;icon;owner_id;last_pin_t let owner_id = Option.value_exn owner_id in { id; name; last_message_id; recipients; icon; owner_id; last_pin_timestamp; } -let unwrap_as_category {id;guild_id;position;name;_} = +let unwrap_as_category {id;guild_id;position;name;permission_overwrites;_} = let position = Option.value_exn position in let name = Option.value_exn name in - { id; guild_id; position; name; } + { id; guild_id; position; name; permission_overwrites } let wrap s = match s.kind with diff --git a/lib/models/channel/channel_t.mli b/lib/models/channel/channel_t.mli index 4193c47..c6c6a0b 100644 --- a/lib/models/channel/channel_t.mli +++ b/lib/models/channel/channel_t.mli @@ -30,6 +30,7 @@ type guild_text = { topic: string option; nsfw: bool; slow_mode_timeout: int option; + permission_overwrites: Overwrites.t list; } [@@deriving sexp, yojson { exn = true }] (** Represents a voice channel in a guild. *) @@ -41,6 +42,7 @@ type guild_voice = { position: int; user_limit: int; bitrate: int option; + permission_overwrites: Overwrites.t list; } [@@deriving sexp, yojson { exn = true }] (** Represents a guild category. *) @@ -49,6 +51,7 @@ type category = { guild_id: Guild_id_t.t option; position: int; name: string; + permission_overwrites: Overwrites.t list; } [@@deriving sexp, yojson { exn = true }] (** Wrapper variant for all channel types. *) @@ -79,6 +82,7 @@ type channel_wrapper = { application_id: Snowflake.t option; category_id: Channel_id_t.t option; last_pin_timestamp: string option; + permission_overwrites: Overwrites.t list; } [@@deriving sexp, yojson { exn = true }] val unwrap_as_guild_text : channel_wrapper -> guild_text diff --git a/lib/models/overwrites.ml b/lib/models/overwrites.ml new file mode 100644 index 0000000..4603c91 --- /dev/null +++ b/lib/models/overwrites.ml @@ -0,0 +1,8 @@ +open Core + +type t = +{ id: Snowflake.t +; kind: string [@key "type"] +; allow: Permissions.t +; deny: Permissions.t +} [@@deriving sexp, yojson { strict = false; exn = true }] \ No newline at end of file diff --git a/lib/models/overwrites.mli b/lib/models/overwrites.mli new file mode 100644 index 0000000..ed823dc --- /dev/null +++ b/lib/models/overwrites.mli @@ -0,0 +1,6 @@ +type t = +{ id: Snowflake.t +; kind: string +; allow: Permissions.t +; deny: Permissions.t +} [@@deriving sexp, yojson { exn = true }] \ No newline at end of file -- cgit v1.2.3