From 18f4b7e8cada448f6fc15ee8ee18944dcb0b1676 Mon Sep 17 00:00:00 2001 From: Adelyn Breelove Date: Thu, 29 Nov 2018 13:50:53 -0700 Subject: Try to make it a more properly structured lib --- lib/http.ml | 1 - lib/http.mli | 1 + lib/s.ml | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- lib/sharder.ml | 6 +++--- lib/sharder.mli | 1 + 5 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 lib/http.mli create mode 100644 lib/sharder.mli diff --git a/lib/http.ml b/lib/http.ml index a8e6b22..8cc56fb 100644 --- a/lib/http.ml +++ b/lib/http.ml @@ -8,7 +8,6 @@ module Make(T : S.Token) = struct exception Invalid_Method let base_url = "https://discordapp.com/api/v7" - let cdn_url = "https://cdn.discordapp.com" let process_url path = Uri.of_string (base_url ^ path) diff --git a/lib/http.mli b/lib/http.mli new file mode 100644 index 0000000..caf2ad7 --- /dev/null +++ b/lib/http.mli @@ -0,0 +1 @@ +module Make(T: S.Token) : S.Http \ No newline at end of file diff --git a/lib/s.ml b/lib/s.ml index 92259a0..454d2e7 100644 --- a/lib/s.ml +++ b/lib/s.ml @@ -27,5 +27,64 @@ module type Http = sig end (* TODO add abstraction sigs *) - val token : string +end + +module type Sharder = sig + exception Invalid_Payload + exception Failure_to_Establish_Heartbeat + + type t + + val start : + ?count:int -> + string -> + t Deferred.t + + val set_status : + status:Yojson.Basic.json -> + t -> + (Shard.shard Shard.t) list Deferred.t + + val set_status_with : + f:(Shard.shard -> Yojson.Basic.json) -> + t -> + (Shard.shard Shard.t) list Deferred.t + + val request_guild_members : + ?query:string -> + ?count:string -> + guild:Snowflake.t -> + t -> + (Shard.shard Shard.t) list Deferred.t + + module Shard : sig + type shard + type 'a t + + val bind : + f:('a -> unit) -> + 'a t -> + unit + + val heartbeat : + shard -> + shard Deferred.t + + val set_status : + status:Yojson.Basic.json -> + shard -> + shard Deferred.t + + val request_guild_members : + ?query:string -> + ?limit:int -> + guild:Snowflake.t + + val create : + url:string -> + shards:int * int -> + token:string -> + unit -> + t Deferred.t + end end \ No newline at end of file diff --git a/lib/sharder.ml b/lib/sharder.ml index 1fa97a0..0984050 100644 --- a/lib/sharder.ml +++ b/lib/sharder.ml @@ -104,7 +104,7 @@ module Make(H: S.Http) = struct let request_guild_members ~guild ?(query="") ?(limit=0) shard = let payload = `Assoc [ - ("guild_id", `String (string_of_int guild)); + ("guild_id", `String (Snowflake.to_string guild)); ("query", `String query); ("limit", `Int limit); ] in @@ -287,12 +287,12 @@ module Make(H: S.Http) = struct >>| fun shards -> { shards; } - let set_status sharder status = + let set_status ~status sharder = Deferred.all @@ List.map ~f:(fun t -> Shard.set_status ~status t.shard ) sharder.shards - let set_status_with sharder f = + let set_status_with ~f sharder = Deferred.all @@ List.map ~f:(fun t -> Shard.set_status ~status:(f t.shard) t.shard ) sharder.shards diff --git a/lib/sharder.mli b/lib/sharder.mli new file mode 100644 index 0000000..d872c8c --- /dev/null +++ b/lib/sharder.mli @@ -0,0 +1 @@ +module Make(H : S.Http) : S.Sharder \ No newline at end of file -- cgit v1.2.3