aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdelyn Breedlove <[email protected]>2018-11-19 02:14:54 +0000
committerAdelyn Breedlove <[email protected]>2018-11-19 02:14:54 +0000
commit5edd251dd0d72a2712b429e246e172a37cf832be (patch)
treee6f30307444b3ebf213bfcb612790e6599909d80
parentMerge branch 'dev' into 'master' (diff)
parentClean up example bot (diff)
downloaddisml-5edd251dd0d72a2712b429e246e172a37cf832be.tar.xz
disml-5edd251dd0d72a2712b429e246e172a37cf832be.zip
Merge branch 'dev' into 'master'
Dev See merge request Mishio595/disml!6
-rw-r--r--bin/bot.ml16
-rw-r--r--lib/client/client.ml42
-rw-r--r--lib/client/sharder.ml2
3 files changed, 50 insertions, 10 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
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;