diff options
| author | Mishio595 <[email protected]> | 2018-11-18 12:04:19 -0700 |
|---|---|---|
| committer | Mishio595 <[email protected]> | 2018-11-18 12:04:19 -0700 |
| commit | a7340eba42bcef93a4e6f9ece7c86043f9a01747 (patch) | |
| tree | 7ec65e89673ad8d9e70b12482206e27e9fa77704 /lib/client/client.ml | |
| parent | Rewrite from Lwt to Async (diff) | |
| download | disml-a7340eba42bcef93a4e6f9ece7c86043f9a01747.tar.xz disml-a7340eba42bcef93a4e6f9ece7c86043f9a01747.zip | |
Event dispatch and client abstraction
Diffstat (limited to 'lib/client/client.ml')
| -rw-r--r-- | lib/client/client.ml | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/lib/client/client.ml b/lib/client/client.ml index e69de29..e07e348 100644 --- a/lib/client/client.ml +++ b/lib/client/client.ml @@ -0,0 +1,80 @@ +open Async + +type t = { + sharder: Sharder.t Ivar.t; + (* events: (Events.t, Core_kernel.write) Bvar.t list; *) + mutable handler: Sharder.handler; + token: string; +} + +let make ?handler token = + let handler = match handler with + | Some h -> h + | None -> begin + Sharder.{ + ready = None; + resumed = None; + channel_create = None; + channel_delete = None; + channel_update = None; + channel_pins_update = None; + guild_create = None; + guild_delete = None; + guild_update = None; + guild_ban_add = None; + guild_ban_remove = None; + guild_emojis_update = None; + guild_integrations_update = None; + guild_member_add = None; + guild_member_remove = None; + guild_member_update = None; + guild_members_chunk = None; + guild_role_create = None; + guild_role_delete = None; + guild_role_update = None; + message_create = None; + message_delete = None; + message_update = None; + message_delete_bulk = None; + message_reaction_add = None; + message_reaction_remove = None; + message_reaction_remove_all = None; + presence_update = None; + typing_start = None; + user_update = None; + voice_state_update = None; + voice_server_update = None; + webhooks_update = None; + } + end in + { + sharder = Ivar.create (); + handler; + token; + } + +let start ?count client = + Sharder.start ?count ~handler:client.handler client.token + >>| fun sharder -> + Ivar.fill_if_empty client.sharder sharder; + client + +let on ev client fn = + match ev with + | "MESSAGE_CREATE" -> client.handler <- { client.handler with message_create = Some(fn) } + | _ -> () + +let set_status client status = + Ivar.read client.sharder + >>= fun sharder -> + Sharder.set_status sharder status + +let set_status_with client f = + Ivar.read client.sharder + >>= fun sharder -> + Sharder.set_status_with sharder f + +let request_guild_members ~guild ?query ?limit client = + Ivar.read client.sharder + >>= fun sharder -> + Sharder.request_guild_members ~guild ?query ?limit sharder
\ No newline at end of file |