From 527cb01c914bcb13a257bc33107c4573a72cc6dd Mon Sep 17 00:00:00 2001 From: Mishio595 Date: Sun, 18 Nov 2018 19:07:17 -0700 Subject: Add complete event support for client.on --- lib/client/client.ml | 42 +++++++++++++++++++++++++++++++++++++++--- lib/client/sharder.ml | 2 +- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/lib/client/client.ml b/lib/client/client.ml index e07e348..9877714 100644 --- a/lib/client/client.ml +++ b/lib/client/client.ml @@ -60,9 +60,45 @@ let start ?count client = client let on ev client fn = - match ev with - | "MESSAGE_CREATE" -> client.handler <- { client.handler with message_create = Some(fn) } - | _ -> () + client.handler <- (match ev with + | "READY" -> { client.handler with ready = Some(fn) } + | "RESUMED" -> { client.handler with resumed = Some(fn) } + | "CHANNEL_CREATE" -> { client.handler with channel_create = Some(fn) } + | "CHANNEL_DELETE" -> { client.handler with channel_delete = Some(fn) } + | "CHANNEL_UPDATE" -> { client.handler with channel_update = Some(fn) } + | "CHANNEL_PINS_UPDATE" -> { client.handler with channel_pins_update = Some(fn) } + | "GUILD_CREATE" -> { client.handler with guild_create = Some(fn) } + | "GUILD_DELETE" -> { client.handler with guild_delete = Some(fn) } + | "GUILD_UPDATE" -> { client.handler with guild_update = Some(fn) } + | "GUILD_BAN_ADD" -> { client.handler with guild_ban_add = Some(fn) } + | "GUILD_BAN_REMOVE" -> { client.handler with guild_ban_remove = Some(fn) } + | "GUILD_EMOJIS_UPDATE" -> { client.handler with guild_emojis_update = Some(fn) } + | "GUILD_INTEGRATIONS_UPDATE" -> { client.handler with guild_integrations_update = Some(fn) } + | "GUILD_MEMBER_ADD" -> { client.handler with guild_member_add = Some(fn) } + | "GUILD_MEMBER_REMOVE" -> { client.handler with guild_member_remove = Some(fn) } + | "GUILD_MEMBER_UPDATE" -> { client.handler with guild_member_update = Some(fn) } + | "GUILD_MEMBERS_CHUNK" -> { client.handler with guild_members_chunk = Some(fn) } + | "GUILD_ROLE_CREATE" -> { client.handler with guild_role_create = Some(fn) } + | "GUILD_ROLE_DELETE" -> { client.handler with guild_role_delete = Some(fn) } + | "GUILD_ROLE_UPDATE" -> { client.handler with guild_role_update = Some(fn) } + | "MESSAGE_CREATE" -> { client.handler with message_create = Some(fn) } + | "MESSAGE_DELETE" -> { client.handler with message_delete = Some(fn) } + | "MESSAGE_UPDATE" -> { client.handler with message_update = Some(fn) } + | "MESSAGE_DELETE_BULK" -> { client.handler with message_delete_bulk = Some(fn) } + | "MESSAGE_REACTION_ADD" -> { client.handler with message_reaction_add = Some(fn) } + | "MESSAGE_REACTION_REMOVE" -> { client.handler with message_reaction_remove = Some(fn) } + | "MESSAGE_REACTION_REMOVE_ALL" -> { client.handler with message_reaction_remove_all = Some(fn) } + | "PRESENCE_UPDATE" -> { client.handler with presence_update = Some(fn) } + | "TYPING_START" -> { client.handler with typing_start = Some(fn) } + | "USER_UPDATE" -> { client.handler with user_update = Some(fn) } + | "VOICE_STATE_UPDATE" -> { client.handler with voice_state_update = Some(fn) } + | "VOICE_SERVER_UPDATE" -> { client.handler with voice_server_update = Some(fn) } + | "WEBHOOKS_UPDATE" -> { client.handler with webhooks_update = Some(fn) } + | _ -> client.handler); + match Ivar.peek client.sharder with + | Some s -> Sharder.update_handler s client.handler; + | None -> () + let set_status client status = Ivar.read client.sharder diff --git a/lib/client/sharder.ml b/lib/client/sharder.ml index 652358f..8d735b0 100644 --- a/lib/client/sharder.ml +++ b/lib/client/sharder.ml @@ -58,7 +58,7 @@ module Shard = struct let parse frame = match frame with | `Ok s -> Yojson.Basic.from_string s - | `Eof -> raise Invalid_Payload + | `Eof -> raise Invalid_Payload (* This needs to go into reconnect code, or stop using client_ez and handle frames manually *) let push_frame ?payload shard ev = print_endline @@ "Pushing frame. OP: " ^ Opcode.to_string @@ ev; -- cgit v1.2.3 From 45bd36ddf5ec9e9813e5f694946f8e67b1d2aea3 Mon Sep 17 00:00:00 2001 From: Mishio595 Date: Sun, 18 Nov 2018 19:13:35 -0700 Subject: Clean up example bot --- bin/bot.ml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/bin/bot.ml b/bin/bot.ml index 56a1b6f..08a182e 100644 --- a/bin/bot.ml +++ b/bin/bot.ml @@ -2,12 +2,7 @@ open Async open Core open Disml -let main () = - let token = match Sys.getenv "DISCORD_TOKEN" with - | Some s -> s - | None -> failwith "No token" - in - let client = Client.make token in +let hook_events client = Client.on "MESSAGE_CREATE" client (fun msg -> let msg_time = Time.(to_span_since_epoch @@ now ()) in let content = Yojson.Basic.Util.(member "content" msg |> to_string) in @@ -25,6 +20,15 @@ let main () = ] >>> fun _ -> print_endline "Message Edited!" ); + Client.on "GUILD_CREATE" client (fun guild -> print_endline Yojson.Basic.Util.(member "name" guild |> to_string)) + +let main () = + let token = match Sys.getenv "DISCORD_TOKEN" with + | Some s -> s + | None -> failwith "No token" + in + let client = Client.make token in + hook_events client; Client.start client >>> fun client -> Clock.every -- cgit v1.2.3