aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdelyn Breelove <[email protected]>2019-02-25 09:17:17 -0700
committerAdelyn Breelove <[email protected]>2019-02-25 09:17:17 -0700
commit54830153a07f466cd20b25f12847ba447be4ecc5 (patch)
treec70fb3ef5ba67d5f5f820fddfba32e14fb2b368b
parenttidy add_seq (diff)
downloaddisml-54830153a07f466cd20b25f12847ba447be4ecc5.tar.xz
disml-54830153a07f466cd20b25f12847ba447be4ecc5.zip
Add permission overwrites
-rw-r--r--lib/disml.ml6
-rw-r--r--lib/dune1
-rw-r--r--lib/models/channel/channel_t.ml16
-rw-r--r--lib/models/channel/channel_t.mli4
-rw-r--r--lib/models/overwrites.ml8
-rw-r--r--lib/models/overwrites.mli6
6 files changed, 34 insertions, 7 deletions
diff --git a/lib/disml.ml b/lib/disml.ml
index d7a2874..c142af4 100644
--- a/lib/disml.ml
+++ b/lib/disml.ml
@@ -99,7 +99,11 @@ module Models = struct
module Message_id = Message_id
(** Represents a permission integer as bitmask, allowing for constant set representation. *)
- module Permissions = Permissions
+ module Permissions = struct
+ include Permissions
+
+ module Overwrite = Overwrites
+ end
(** Represents a user presence. See {!Models.Event.PresenceUpdate}. *)
module Presence = Presence
diff --git a/lib/dune b/lib/dune
index 0b13c69..9351197 100644
--- a/lib/dune
+++ b/lib/dune
@@ -12,6 +12,7 @@
guild guild_t guild_id guild_id_t
member member_t
message message_t message_id
+ overwrites
permissions
presence
reaction reaction_t
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