aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdelyn Breedlove <[email protected]>2018-12-14 16:49:37 -0700
committerAdelyn Breedlove <[email protected]>2018-12-14 16:49:37 -0700
commit41fbba7d0b7dd9fff8dcb9985a474cfbbd2408f2 (patch)
tree690861418bed15de47e7cf5672d96fdacc9abe5e
parentMerge branch 'dev' of https://gitlab.com/Mishio595/disml into dev (diff)
parentA few metafile updates (diff)
downloaddisml-41fbba7d0b7dd9fff8dcb9985a474cfbbd2408f2.tar.xz
disml-41fbba7d0b7dd9fff8dcb9985a474cfbbd2408f2.zip
Merging
-rw-r--r--README.md7
-rw-r--r--bin/handler.ml48
-rw-r--r--disml.opam7
-rw-r--r--dune33
-rw-r--r--generate_json.sh7
-rw-r--r--lib/client.ml6
-rw-r--r--lib/dispatch.ml85
-rw-r--r--lib/dispatch.mli1
-rw-r--r--lib/endpoints.ml138
-rw-r--r--lib/event.ml185
-rw-r--r--lib/models.ml17
-rw-r--r--lib/models/activity.ml2
-rw-r--r--lib/models/attachment.ml2
-rw-r--r--lib/models/ban.ml2
-rw-r--r--lib/models/channel.ml2
-rw-r--r--lib/models/embed.ml2
-rw-r--r--lib/models/emoji.ml2
-rw-r--r--lib/models/gen/activity.atd (renamed from lib/models/activity.atd)0
-rw-r--r--lib/models/gen/activity_j.ml (renamed from lib/models/activity_j.ml)0
-rw-r--r--lib/models/gen/activity_j.mli (renamed from lib/models/activity_j.mli)0
-rw-r--r--lib/models/gen/activity_t.ml (renamed from lib/models/activity_t.ml)0
-rw-r--r--lib/models/gen/activity_t.mli (renamed from lib/models/activity_t.mli)0
-rw-r--r--lib/models/gen/attachment.atd (renamed from lib/models/attachment.atd)0
-rw-r--r--lib/models/gen/attachment_j.ml (renamed from lib/models/attachment_j.ml)0
-rw-r--r--lib/models/gen/attachment_j.mli (renamed from lib/models/attachment_j.mli)0
-rw-r--r--lib/models/gen/attachment_t.ml (renamed from lib/models/attachment_t.ml)0
-rw-r--r--lib/models/gen/attachment_t.mli (renamed from lib/models/attachment_t.mli)0
-rw-r--r--lib/models/gen/ban.atd (renamed from lib/models/ban.atd)0
-rw-r--r--lib/models/gen/ban_j.ml (renamed from lib/models/ban_j.ml)0
-rw-r--r--lib/models/gen/ban_j.mli (renamed from lib/models/ban_j.mli)0
-rw-r--r--lib/models/gen/ban_t.ml (renamed from lib/models/ban_t.ml)0
-rw-r--r--lib/models/gen/ban_t.mli (renamed from lib/models/ban_t.mli)0
-rw-r--r--lib/models/gen/channel.atd (renamed from lib/models/channel.atd)0
-rw-r--r--lib/models/gen/channel_j.ml (renamed from lib/models/channel_j.ml)0
-rw-r--r--lib/models/gen/channel_j.mli (renamed from lib/models/channel_j.mli)0
-rw-r--r--lib/models/gen/channel_t.ml (renamed from lib/models/channel_t.ml)0
-rw-r--r--lib/models/gen/channel_t.mli (renamed from lib/models/channel_t.mli)0
-rw-r--r--lib/models/gen/embed.atd (renamed from lib/models/embed.atd)0
-rw-r--r--lib/models/gen/embed_j.ml (renamed from lib/models/embed_j.ml)0
-rw-r--r--lib/models/gen/embed_j.mli (renamed from lib/models/embed_j.mli)0
-rw-r--r--lib/models/gen/embed_t.ml (renamed from lib/models/embed_t.ml)0
-rw-r--r--lib/models/gen/embed_t.mli (renamed from lib/models/embed_t.mli)0
-rw-r--r--lib/models/gen/emoji.atd (renamed from lib/models/emoji.atd)0
-rw-r--r--lib/models/gen/emoji_j.ml (renamed from lib/models/emoji_j.ml)0
-rw-r--r--lib/models/gen/emoji_j.mli (renamed from lib/models/emoji_j.mli)0
-rw-r--r--lib/models/gen/emoji_t.ml (renamed from lib/models/emoji_t.ml)0
-rw-r--r--lib/models/gen/emoji_t.mli (renamed from lib/models/emoji_t.mli)0
-rw-r--r--lib/models/gen/guild.atd (renamed from lib/models/guild.atd)0
-rw-r--r--lib/models/gen/guild_j.ml (renamed from lib/models/guild_j.ml)0
-rw-r--r--lib/models/gen/guild_j.mli (renamed from lib/models/guild_j.mli)0
-rw-r--r--lib/models/gen/guild_t.ml (renamed from lib/models/guild_t.ml)0
-rw-r--r--lib/models/gen/guild_t.mli (renamed from lib/models/guild_t.mli)0
-rw-r--r--lib/models/gen/member.atd (renamed from lib/models/member.atd)0
-rw-r--r--lib/models/gen/member_j.ml (renamed from lib/models/member_j.ml)0
-rw-r--r--lib/models/gen/member_j.mli (renamed from lib/models/member_j.mli)0
-rw-r--r--lib/models/gen/member_t.ml (renamed from lib/models/member_t.ml)0
-rw-r--r--lib/models/gen/member_t.mli (renamed from lib/models/member_t.mli)0
-rw-r--r--lib/models/gen/message.atd (renamed from lib/models/message.atd)9
-rw-r--r--lib/models/gen/message_j.ml (renamed from lib/models/message_j.ml)317
-rw-r--r--lib/models/gen/message_j.mli (renamed from lib/models/message_j.mli)74
-rw-r--r--lib/models/gen/message_t.ml (renamed from lib/models/message_t.ml)14
-rw-r--r--lib/models/gen/message_t.mli (renamed from lib/models/message_t.mli)14
-rw-r--r--lib/models/gen/presence.atd (renamed from lib/models/presence.atd)0
-rw-r--r--lib/models/gen/presence_j.ml (renamed from lib/models/presence_j.ml)0
-rw-r--r--lib/models/gen/presence_j.mli (renamed from lib/models/presence_j.mli)0
-rw-r--r--lib/models/gen/presence_t.ml (renamed from lib/models/presence_t.ml)0
-rw-r--r--lib/models/gen/presence_t.mli (renamed from lib/models/presence_t.mli)0
-rw-r--r--lib/models/gen/reaction.atd (renamed from lib/models/reaction.atd)0
-rw-r--r--lib/models/gen/reaction_j.ml (renamed from lib/models/reaction_j.ml)0
-rw-r--r--lib/models/gen/reaction_j.mli (renamed from lib/models/reaction_j.mli)0
-rw-r--r--lib/models/gen/reaction_t.ml (renamed from lib/models/reaction_t.ml)0
-rw-r--r--lib/models/gen/reaction_t.mli (renamed from lib/models/reaction_t.mli)0
-rw-r--r--lib/models/gen/role.atd (renamed from lib/models/role.atd)0
-rw-r--r--lib/models/gen/role_j.ml (renamed from lib/models/role_j.ml)0
-rw-r--r--lib/models/gen/role_j.mli (renamed from lib/models/role_j.mli)0
-rw-r--r--lib/models/gen/role_t.ml (renamed from lib/models/role_t.ml)0
-rw-r--r--lib/models/gen/role_t.mli (renamed from lib/models/role_t.mli)0
-rw-r--r--lib/models/gen/snowflake.atd (renamed from lib/models/snowflake.atd)0
-rw-r--r--lib/models/gen/snowflake_j.ml (renamed from lib/models/snowflake_j.ml)0
-rw-r--r--lib/models/gen/snowflake_j.mli (renamed from lib/models/snowflake_j.mli)0
-rw-r--r--lib/models/gen/snowflake_t.ml (renamed from lib/models/snowflake_t.ml)0
-rw-r--r--lib/models/gen/snowflake_t.mli (renamed from lib/models/snowflake_t.mli)0
-rw-r--r--lib/models/gen/user.atd (renamed from lib/models/user.atd)0
-rw-r--r--lib/models/gen/user_j.ml (renamed from lib/models/user_j.ml)0
-rw-r--r--lib/models/gen/user_j.mli (renamed from lib/models/user_j.mli)0
-rw-r--r--lib/models/gen/user_t.ml (renamed from lib/models/user_t.ml)0
-rw-r--r--lib/models/gen/user_t.mli (renamed from lib/models/user_t.mli)0
-rw-r--r--lib/models/guild.ml2
-rw-r--r--lib/models/member.ml2
-rw-r--r--lib/models/message.ml43
-rw-r--r--lib/models/message.mli1
-rw-r--r--lib/models/presence.ml2
-rw-r--r--lib/models/reaction.ml2
-rw-r--r--lib/models/role.ml2
-rw-r--r--lib/models/snowflake.ml2
-rw-r--r--lib/models/user.ml2
-rw-r--r--lib/s.ml331
-rw-r--r--lib/sharder.ml1
98 files changed, 689 insertions, 675 deletions
diff --git a/README.md b/README.md
index 08e988e..7f5cd2a 100644
--- a/README.md
+++ b/README.md
@@ -10,10 +10,11 @@ This is being actively developed and is definitely still in the early stages. Wh
* Rudimentary gateway support
* Automatic sharding
* Event dispatch to a user-defined consumer
+* Automatic reconnection of dropped gateway connections
+* Automatic rate limit handling
#### What is not implemented?
-* Abstractions for Discord Objects (Message, Guild, Channel, etc)
-* Automatic reconnection of dropped gateway connections
+* Abstractions for Discord Objects (Message, Guild, Channel, etc) (**IN PROGRESS!**)
* Voice
* Cache
@@ -22,4 +23,4 @@ In order to get started you'll first need to install OCaml (of course). I recomm
I currently don't provide an opam build file nor is the project uploaded to opam. This will happen with the first stable release.
-You'll find an example bot in /bin directory. \ No newline at end of file
+You'll find an example bot in /bin directory.
diff --git a/bin/handler.ml b/bin/handler.ml
index 1dd01cb..74eaefb 100644
--- a/bin/handler.ml
+++ b/bin/handler.ml
@@ -1 +1,47 @@
-let handle_event _a _b = print_endline "Received event!" \ No newline at end of file
+module Make(Models : Disml.S.Models) = struct
+ open Core
+ open Async
+ open Models
+ open Disml.Event
+
+ let check_command (msg:Disml.Message_t.t) =
+ if String.is_prefix ~prefix:"!ping" msg.content then
+ Message.reply msg "Hello!" >>> ignore
+
+ let handle_event = function
+ | HELLO _ -> print_endline "Received HELLO"
+ | READY _ -> print_endline "Received READY"
+ | RESUMED _ -> print_endline "Received RESUMED"
+ | INVALID_SESSION _ -> print_endline "Received INVALID_SESSION"
+ | CHANNEL_CREATE _ -> print_endline "Received CHANNEL_CREATE"
+ | CHANNEL_UPDATE _ -> print_endline "Received CHANNEL_UPDATE"
+ | CHANNEL_DELETE _ -> print_endline "Received CHANNEL_DELETE"
+ | CHANNEL_PINS_UPDATE _ -> print_endline "Received CHANNEL_PINS_UPDATE"
+ | GUILD_CREATE _ -> print_endline "Received GUILD_CREATE"
+ | GUILD_UPDATE _ -> print_endline "Received GUILD_UPDATE"
+ | GUILD_DELETE _ -> print_endline "Received GUILD_DELETE"
+ | GUILD_BAN_ADD _ -> print_endline "Received GUILD_BAN_ADD"
+ | GUILD_BAN_REMOVE _ -> print_endline "Received GUILD_BAN_REMOVE"
+ | GUILD_EMOJIS_UPDATE _ -> print_endline "Received GUILD_EMOJIS_UPDATE"
+ | GUILD_INTEGRATIONS_UPDATE _ -> print_endline "Received GUILD_INTEGRATIONS_UPDATE"
+ | GUILD_MEMBER_ADD _ -> print_endline "Received GUILD_MEMBER_ADD"
+ | GUILD_MEMBER_REMOVE _ -> print_endline "Received GUILD_MEMBER_REMOVE"
+ | GUILD_MEMBER_UPDATE _ -> print_endline "Received GUILD_MEMBER_UPDATE"
+ | GUILD_MEMBERS_CHUNK _ -> print_endline "Received GUILD_MEMBERS_CHUNK"
+ | GUILD_ROLE_CREATE _ -> print_endline "Received GUILD_ROLE_CREATE"
+ | GUILD_ROLE_UPDATE _ -> print_endline "Received GUILD_ROLE_UPDATE"
+ | GUILD_ROLE_DELETE _ -> print_endline "Received GUILD_ROLE_DELETE"
+ | MESSAGE_CREATE msg -> check_command msg; print_endline "Received MESSAGE_CREATE"
+ | MESSAGE_UPDATE _ -> print_endline "Received MESSAGE_UPDATE"
+ | MESSAGE_DELETE _ -> print_endline "Received MESSAGE_DELETE"
+ | MESSAGE_BULK_DELETE _ -> print_endline "Received MESSAGE_BULK_DELETE"
+ | MESSAGE_REACTION_ADD _ -> print_endline "Received MESSAGE_REACTION_ADD"
+ | MESSAGE_REACTION_REMOVE _ -> print_endline "Received MESSAGE_REACTION_REMOVE"
+ | MESSAGE_REACTION_REMOVE_ALL _ -> print_endline "Received MESSAGE_REACTION_REMOVE_ALL"
+ | PRESENCE_UPDATE _ -> print_endline "Received PRESENCE_UPDATE"
+ | TYPING_START _ -> print_endline "Received TYPING_START"
+ | USER_UPDATE _ -> print_endline "Received USER_UPDATE"
+ | VOICE_STATE_UPDATE _ -> print_endline "Received VOICE_STATE_UPDATE"
+ | VOICE_SERVER_UPDATE _ -> print_endline "Received VOICE_SERVER_UPDATE"
+ | WEBHOOKS_UPDATE _ -> print_endline "Received WEBHOOKS_UPDATE"
+end \ No newline at end of file
diff --git a/disml.opam b/disml.opam
index be03a15..cf9c4cc 100644
--- a/disml.opam
+++ b/disml.opam
@@ -1,12 +1,15 @@
opam-version: "2.0"
name: "disml"
version: "~dev"
-synopsis: "A Discord API wrapper"
+synopsis: ""An OCaml library for interfacing with the Discord API""
maintainer: "Adelyn Breedlove <[email protected]>"
authors: "Adelyn Breedlove <[email protected]>"
license: "MIT"
homepage: "https://gitlab.com/Mishio595/disml"
bug-reports: "https://gitlab.com/Mishio595/disml/issues"
-build: [dune build disml]
+build: [
+ ["dune" "subst"] {pinned}
+ ["dune" "build" "-p" name "-j" jobs]
+]
install: [dune install disml]
dev-repo: "git+https://gitlab.com/Mishio595/disml" \ No newline at end of file
diff --git a/dune b/dune
index c9ff57b..4ed0b70 100644
--- a/dune
+++ b/dune
@@ -1,32 +1,35 @@
(library
(name disml)
+ (public_name disml)
+ (synopsis "An OCaml library for interfacing with the Discord API")
(modules
- activity_t activity_j
- attachment_t attachment_j
- ban_t ban_j
- channel_t channel_j
- embed_t embed_j
- emoji_t emoji_j
- guild_t guild_j
- member_t member_j
- message_t message_j
- presence_t presence_j
- reaction_t reaction_j
- role_t role_j
- snowflake_t snowflake_j
- user_t user_j
+ activity activity_t activity_j
+ attachment attachment_t attachment_j
+ ban ban_t ban_j
+ channel channel_t channel_j
+ embed embed_t embed_j
+ emoji emoji_t emoji_j
+ guild guild_t guild_j
+ member member_t member_j
+ message message_t message_j
+ presence presence_t presence_j
+ reaction reaction_t reaction_j
+ role role_t role_j
+ snowflake snowflake_t snowflake_j
+ user user_t user_j
client
dispatch
endpoints
event
http
+ models
opcode
rl
s
sharder
)
(libraries core async_ssl cohttp-async yojson websocket-async zlib atdgen)
- (preprocess (pps ppx_jane))
+ ;(preprocess (pps ppx_jane))
)
; Test executable
diff --git a/generate_json.sh b/generate_json.sh
new file mode 100644
index 0000000..a9c497b
--- /dev/null
+++ b/generate_json.sh
@@ -0,0 +1,7 @@
+# Helper script for running atdgen
+
+for filename in ./lib/models/gen/*.atd; do
+ [ -e "$filename" ] || continue
+ atdgen -t $filename
+ atdgen -j $filename
+done \ No newline at end of file
diff --git a/lib/client.ml b/lib/client.ml
index 9211281..229c9cc 100644
--- a/lib/client.ml
+++ b/lib/client.ml
@@ -1,10 +1,12 @@
open Async
-module Make(T : S.Token)(H : S.Handler) = struct
+module Make(T : S.Token)(H : S.Handler_f) = struct
include T
module Http = Http.Make(T)
- module Dispatch = Dispatch.Make(H)
+ module Models = Models.Make(Http)
+ module Handler = H.Make(Models)
+ module Dispatch = Dispatch.Make(Handler)
module Sharder = Sharder.Make(Http)(Dispatch)
type t = {
diff --git a/lib/dispatch.ml b/lib/dispatch.ml
index a4341e1..c38afe2 100644
--- a/lib/dispatch.ml
+++ b/lib/dispatch.ml
@@ -1,85 +1,6 @@
-open Core
-
module Make(H : S.Handler) : S.Dispatch = struct
- type dispatch_event =
- | HELLO of Yojson.Safe.json
- | READY of Yojson.Safe.json
- | RESUMED of Yojson.Safe.json
- | INVALID_SESSION of Yojson.Safe.json
- | CHANNEL_CREATE of Channel_t.t
- | CHANNEL_UPDATE of Channel_t.t
- | CHANNEL_DELETE of Channel_t.t
- | CHANNEL_PINS_UPDATE of Yojson.Safe.json
- | GUILD_CREATE of Guild_t.t
- | GUILD_UPDATE of Guild_t.t
- | GUILD_DELETE of Guild_t.t
- | GUILD_BAN_ADD of Ban_t.t
- | GUILD_BAN_REMOVE of Ban_t.t
- | GUILD_EMOJIS_UPDATE of Yojson.Safe.json
- | GUILD_INTEGRATIONS_UPDATE of Yojson.Safe.json
- | GUILD_MEMBER_ADD of Member_t.t
- | GUILD_MEMBER_REMOVE of Member_t.t
- | GUILD_MEMBER_UPDATE of Member_t.t
- | GUILD_MEMBERS_CHUNK of Member_t.t list
- | GUILD_ROLE_CREATE of Role_t.t (* * Guild.t *)
- | GUILD_ROLE_UPDATE of Role_t.t (* * Guild.t *)
- | GUILD_ROLE_DELETE of Role_t.t (* * Guild.t *)
- | MESSAGE_CREATE of Message_t.t
- | MESSAGE_UPDATE of Message_t.t
- | MESSAGE_DELETE of Message_t.t
- | MESSAGE_BULK_DELETE of Message_t.t list
- | MESSAGE_REACTION_ADD of (* Message.t * *) Reaction_t.t
- | MESSAGE_REACTION_REMOVE of (* Message.t * *) Reaction_t.t
- | MESSAGE_REACTION_REMOVE_ALL of (* Message.t * *) Reaction_t.t list
- | PRESENCE_UPDATE of Presence_t.t
- | TYPING_START of Yojson.Safe.json
- | USER_UPDATE of Yojson.Safe.json
- | VOICE_STATE_UPDATE of Yojson.Safe.json
- | VOICE_SERVER_UPDATE of Yojson.Safe.json
- | WEBHOOKS_UPDATE of Yojson.Safe.json
-
- exception Invalid_event of string
-
- let event_of_string ~contents t = match t with
- | "HELLO" -> HELLO (Yojson.Safe.from_string contents)
- | "READY" -> READY (Yojson.Safe.from_string contents)
- | "RESUMED" -> RESUMED (Yojson.Safe.from_string contents)
- | "INVALID_SESSION" -> INVALID_SESSION (Yojson.Safe.from_string contents)
- | "CHANNEL_CREATE" -> CHANNEL_CREATE (Channel_j.t_of_string contents)
- | "CHANNEL_UPDATE" -> CHANNEL_UPDATE (Channel_j.t_of_string contents)
- | "CHANNEL_DELETE" -> CHANNEL_DELETE (Channel_j.t_of_string contents)
- | "CHANNEL_PINS_UPDATE" -> CHANNEL_PINS_UPDATE (Yojson.Safe.from_string contents)
- | "GUILD_CREATE" -> GUILD_CREATE (Guild_j.t_of_string contents)
- | "GUILD_UPDATE" -> GUILD_UPDATE (Guild_j.t_of_string contents)
- | "GUILD_DELETE" -> GUILD_DELETE (Guild_j.t_of_string contents)
- | "GUILD_BAN_ADD" -> GUILD_BAN_ADD (Ban_j.t_of_string contents)
- | "GUILD_BAN_REMOVE" -> GUILD_BAN_REMOVE (Ban_j.t_of_string contents)
- | "GUILD_EMOJIS_UPDATE" -> GUILD_EMOJIS_UPDATE (Yojson.Safe.from_string contents)
- | "GUILD_INTEGRATIONS_UPDATE" -> GUILD_INTEGRATIONS_UPDATE (Yojson.Safe.from_string contents)
- | "GUILD_MEMBER_ADD" -> GUILD_MEMBER_ADD (Member_j.t_of_string contents)
- | "GUILD_MEMBER_REMOVE" -> GUILD_MEMBER_REMOVE (Member_j.t_of_string contents)
- | "GUILD_MEMBER_UPDATE" -> GUILD_MEMBER_UPDATE (Member_j.t_of_string contents)
- | "GUILD_MEMBERS_CHUNK" -> GUILD_MEMBERS_CHUNK (Yojson.Safe.(from_string contents |> Util.to_list) |> List.map ~f:(fun m -> Yojson.Safe.to_string m |> Member_j.t_of_string))
- | "GUILD_ROLE_CREATE" -> GUILD_ROLE_CREATE (Role_j.t_of_string contents)
- | "GUILD_ROLE_UPDATE" -> GUILD_ROLE_UPDATE (Role_j.t_of_string contents)
- | "GUILD_ROLE_DELETE" -> GUILD_ROLE_DELETE (Role_j.t_of_string contents)
- | "MESSAGE_CREATE" -> MESSAGE_CREATE (Message_j.t_of_string contents)
- | "MESSAGE_UPDATE" -> MESSAGE_UPDATE (Message_j.t_of_string contents)
- | "MESSAGE_DELETE" -> MESSAGE_DELETE (Message_j.t_of_string contents)
- | "MESSAGE_BULK_DELETE" -> MESSAGE_BULK_DELETE (Yojson.Safe.(from_string contents |> Util.to_list) |> List.map ~f:(fun m -> Yojson.Safe.to_string m |> Message_j.t_of_string))
- | "MESSAGE_REACTION_ADD" -> MESSAGE_REACTION_ADD (Reaction_j.t_of_string contents)
- | "MESSAGE_REACTION_REMOVE" -> MESSAGE_REACTION_REMOVE (Reaction_j.t_of_string contents)
- | "MESSAGE_REACTION_REMOVE_ALL" -> MESSAGE_REACTION_REMOVE_ALL (Yojson.Safe.(from_string contents |> Util.to_list) |> List.map ~f:(fun m -> Yojson.Safe.to_string m |> Reaction_j.t_of_string))
- | "PRESENCE_UPDATE" -> PRESENCE_UPDATE (Presence_j.t_of_string contents)
- | "TYPING_START" -> TYPING_START (Yojson.Safe.from_string contents)
- | "USER_UPDATE" -> USER_UPDATE (Yojson.Safe.from_string contents)
- | "VOICE_STATE_UPDATE" -> VOICE_STATE_UPDATE (Yojson.Safe.from_string contents)
- | "VOICE_SERVER_UPDATE" -> VOICE_SERVER_UPDATE (Yojson.Safe.from_string contents)
- | "WEBHOOKS_UPDATE" -> WEBHOOKS_UPDATE (Yojson.Safe.from_string contents)
- | s -> raise (Invalid_event s)
-
let dispatch ~ev contents =
- let ctx = () in
- event_of_string ~contents ev
- |> H.handle_event ctx
+ print_endline (Yojson.Safe.prettify contents);
+ Event.event_of_string ~contents ev
+ |> H.handle_event
end \ No newline at end of file
diff --git a/lib/dispatch.mli b/lib/dispatch.mli
new file mode 100644
index 0000000..100a34b
--- /dev/null
+++ b/lib/dispatch.mli
@@ -0,0 +1 @@
+module Make(H : S.Handler) : S.Dispatch \ No newline at end of file
diff --git a/lib/endpoints.ml b/lib/endpoints.ml
index 4fc2d1a..12563b0 100644
--- a/lib/endpoints.ml
+++ b/lib/endpoints.ml
@@ -1,96 +1,62 @@
+open Printf
+
let gateway = "/gateway"
let gateway_bot = "/gateway/bot"
-
-let channel channel_id = "/channels/"^channel_id
-let channel_messages channel_id = "/channels/"^channel_id^"/messages"
-
-let channel_message channel_id msg_id =
- "/channels/"^channel_id^"/messages/"^msg_id
-
-let channel_reaction_me channel_id msg_id emoji =
- "/channels/"^channel_id^"/messages/"^msg_id^"/reactions/"^emoji^"/@me"
-
-let channel_reaction channel_id msg_id emoji user_id =
- "/channels/"^channel_id^"/messages/"^msg_id^"/reactions/"^emoji^"/"^user_id
-
-let channel_reactions_get channel_id msg_id emoji =
- "/channels/"^channel_id^"/messages/"^msg_id^"/reactions/"^emoji
-
-let channel_reactions_delete channel_id msg_id =
- "/channels/"^channel_id^"/messages/"^msg_id^"/reactions"
-
-let channel_bulk_delete channel_id = "/channels/"^channel_id
-
-let channel_permission channel_id overwrite_id =
- "/channels/"^channel_id^"/permissions/"^overwrite_id
-
-let channel_permissions channel_id = "/channels"^channel_id^"/permissions"
+let channel = sprintf "/channels/%d"
+let channel_messages = sprintf "/channels/%d/messages"
+let channel_message = sprintf "/channels/%d/messages/%d"
+let channel_reaction_me = sprintf "/channels/%d/messages/%d/reactions/%s/@me"
+let channel_reaction = sprintf "/channels/%d/messages/%d/reactions/%s/%d"
+let channel_reactions_get = sprintf "/channels/%d/messages/%d/reactions/%s"
+let channel_reactions_delete = sprintf "/channels/%d/messages/%d/reactions"
+let channel_bulk_delete = sprintf "/channels/%d"
+let channel_permission = sprintf "/channels/%d/permissions/%d"
+let channel_permissions = sprintf "/channels/%d/permissions"
let channels = "/channels"
-let channel_call_ring channel_id = "/channels/"^channel_id^"/call/ring"
-let channel_invites channel_id = "/channels/"^channel_id^"/invites"
-let channel_typing channel_id = "/channels/"^channel_id^"/typing"
-let channel_pins channel_id = "/channels/"^channel_id^"/pins"
-let channel_pin channel_id msg_id = "/channels/"^channel_id^"/pins/"^msg_id
-
+let channel_call_ring = sprintf "/channels/%d/call/ring"
+let channel_invites = sprintf "/channels/%d/invites"
+let channel_typing = sprintf "/channels/%d/typing"
+let channel_pins = sprintf "/channels/%d/pins"
+let channel_pin = sprintf "/channels/%d/pins/%d"
let guilds = "/guilds"
-let guild guild_id = "/guilds/"^guild_id
-let guild_channels guild_id = "/guilds/"^guild_id^"/channels"
-let guild_members guild_id = "/guilds/"^guild_id^"/members"
-let guild_member guild_id user_id = "/guilds/"^guild_id^"/members/"^user_id
-
-let guild_member_role guild_id user_id role_id =
- "/guilds/"^guild_id^"/members/"^user_id^"/roles/"^role_id
-
-let guild_bans guild_id = "/guilds/"^guild_id^"/bans"
-let guild_ban guild_id user_id = "/guilds/"^guild_id^"/bans"^user_id
-let guild_roles guild_id = "/guilds/"^guild_id^"/roles"
-let guild_role guild_id role_id = "/guilds/"^guild_id^"/roles"^role_id
-let guild_prune guild_id = "/guilds/"^guild_id^"/prune"
-let guild_voice_regions guild_id = "/guilds/"^guild_id^"/regions"
-let guild_invites guild_id = "/guilds/"^guild_id^"/invites"
-let guild_integrations guild_id = "/guilds/"^guild_id^"/integrations"
-
-let guild_integration guild_id integration_id =
- "/guilds/"^guild_id^"/integrations/"^integration_id
-
-let guild_integration_sync guild_id integration_id =
- "/guilds/"^guild_id^"/integrations/"^integration_id^"/sync"
-
-let guild_embed guild_id = "/guilds/"^guild_id^"/embed"
-let guild_emojis guild_id = "/guilds/"^guild_id^"/emojis"
-let guild_emoji guild_id emoji_id = "/guilds/"^guild_id^"/emojis/"^emoji_id
-
-let webhooks_guild guild_id = "/guilds/"^guild_id^"/webhooks"
-let webhooks_channel channel_id = "/channels/"^channel_id^"/webhooks"
-let webhook webhook_id = "/webhooks/"^webhook_id
-let webhook_token webhook_id token = "/webhooks/"^webhook_id^"/"^token
-
-let webhook_git webhook_id token =
- "/webhooks/"^webhook_id^"/"^token^"/github"
-
-let webhook_slack webhook_id token =
- "/webhooks/"^webhook_id^"/"^token^"/slack"
-
-let user user_id = "/users/"^user_id
-
+let guild = sprintf "/guilds/%d"
+let guild_channels = sprintf "/guilds/%d/channels"
+let guild_members = sprintf "/guilds/%d/members"
+let guild_member = sprintf "/guilds/%d/members/%d"
+let guild_member_role = sprintf "/guilds/%d/members/%d/roles/%d"
+let guild_bans = sprintf "/guilds/%d/bans"
+let guild_ban = sprintf "/guilds/%d/bans/%d"
+let guild_roles = sprintf "/guilds/%d/roles"
+let guild_role = sprintf "/guilds/%d/roles/%d"
+let guild_prune = sprintf "/guilds/%d/prune"
+let guild_voice_regions = sprintf "/guilds/%d/regions"
+let guild_invites = sprintf "/guilds/%d/invites"
+let guild_integrations = sprintf "/guilds/%d/integrations"
+let guild_integration = sprintf "/guilds/%d/integrations/%d"
+let guild_integration_sync = sprintf "/guilds/%d/integrations/%d/sync"
+let guild_embed = sprintf "/guilds/%d/embed"
+let guild_emojis = sprintf "/guilds/%d/emojis"
+let guild_emoji = sprintf "/guilds/%d/emojis/%d"
+let webhooks_guild = sprintf "/guilds/%d/webhooks"
+let webhooks_channel = sprintf "/channels/%d/webhooks"
+let webhook = sprintf "/webhooks/%d"
+let webhook_token = sprintf "/webhooks/%d/%s"
+let webhook_git = sprintf "/webhooks/%d/%s/github"
+let webhook_slack = sprintf "/webhooks/%d/%s/slack"
+let user = sprintf "/users/%d"
let me = "/users/@me"
let me_guilds = "/users/@me/guilds"
-let me_guild guild_id = "/users/@me/guilds/"^guild_id
+let me_guild = sprintf "/users/@me/guilds/%d"
let me_channels = "/users/@me/channels"
let me_connections = "/users/@me/connections"
-
-let invite code = "/invites/"^code
+let invite = sprintf "/invites/%s"
let regions = "/voice/regions"
-
let application_information = "/oauth2/applications/@me"
-
-let group_recipient group_id user_id = "/channels/"^group_id^"/recipients/"^user_id
-let guild_me_nick guild_id = "/guilds/"^guild_id^"/members/@me/nick"
-let guild_vanity_url guild_id = "/guilds/"^guild_id^"/vanity-url"
-let guild_audit_logs guild_id = "/guilds/"^guild_id^"/audit-logs"
-
-(* let cdn_avatar id avatar image_format = "/avatars/"^id^"/"^avatar^"."^image_format *)
-let cdn_embed_avatar image_name = "/embed/avatars/"^image_name^".png"
-let cdn_emoji id image_format = "/emojis/"^id^"."^image_format
-let cdn_icon id icon image_format = "/icons/"^id^"/"^icon^"."^image_format
-let cdn_avatar id splash image_format = "/splashes/"^id^"/"^splash^"."^image_format \ No newline at end of file
+let group_recipient = sprintf "/channels/%d/recipients/%d"
+let guild_me_nick = sprintf "/guilds/%d/members/@me/nick"
+let guild_vanity_url = sprintf "/guilds/%d/vanity-url"
+let guild_audit_logs = sprintf "/guilds/%d/audit-logs"
+let cdn_embed_avatar = sprintf "/embed/avatars/%s.png"
+let cdn_emoji = sprintf "/emojis/%s.%s"
+let cdn_icon = sprintf "/icons/%d/%s.%s"
+let cdn_avatar = sprintf "/splashes/%d/%s.%s" \ No newline at end of file
diff --git a/lib/event.ml b/lib/event.ml
index 8b5b125..6e35c75 100644
--- a/lib/event.ml
+++ b/lib/event.ml
@@ -1,113 +1,78 @@
-type t =
-| HELLO
-| READY
-| RESUMED
-| INVALID_SESSION
-| CHANNEL_CREATE
-| CHANNEL_UPDATE
-| CHANNEL_DELETE
-| CHANNEL_PINS_UPDATE
-| GUILD_CREATE
-| GUILD_UPDATE
-| GUILD_DELETE
-| GUILD_BAN_ADD
-| GUILD_BAN_REMOVE
-| GUILD_EMOJIS_UPDATE
-| GUILD_INTEGRATIONS_UPDATE
-| GUILD_MEMBER_ADD
-| GUILD_MEMBER_REMOVE
-| GUILD_MEMBER_UPDATE
-| GUILD_MEMBERS_CHUNK
-| GUILD_ROLE_CREATE
-| GUILD_ROLE_UPDATE
-| GUILD_ROLE_DELETE
-| MESSAGE_CREATE
-| MESSAGE_UPDATE
-| MESSAGE_DELETE
-| MESSAGE_BULK_DELETE
-| MESSAGE_REACTION_ADD
-| MESSAGE_REACTION_REMOVE
-| MESSAGE_REACTION_REMOVE_ALL
-| PRESENCE_UPDATE
-| TYPING_START
-| USER_UPDATE
-| VOICE_STATE_UPDATE
-| VOICE_SERVER_UPDATE
-| WEBHOOKS_UPDATE
+open Core
-exception Invalid_Event of string
+type t =
+| HELLO of Yojson.Safe.json
+| READY of Yojson.Safe.json
+| RESUMED of Yojson.Safe.json
+| INVALID_SESSION of Yojson.Safe.json
+| CHANNEL_CREATE of Channel_t.t
+| CHANNEL_UPDATE of Channel_t.t
+| CHANNEL_DELETE of Channel_t.t
+| CHANNEL_PINS_UPDATE of Yojson.Safe.json
+| GUILD_CREATE of Guild_t.t
+| GUILD_UPDATE of Guild_t.t
+| GUILD_DELETE of Guild_t.t
+| GUILD_BAN_ADD of Ban_t.t
+| GUILD_BAN_REMOVE of Ban_t.t
+| GUILD_EMOJIS_UPDATE of Yojson.Safe.json
+| GUILD_INTEGRATIONS_UPDATE of Yojson.Safe.json
+| GUILD_MEMBER_ADD of Member_t.t
+| GUILD_MEMBER_REMOVE of Member_t.t
+| GUILD_MEMBER_UPDATE of Member_t.t
+| GUILD_MEMBERS_CHUNK of Member_t.t list
+| GUILD_ROLE_CREATE of Role_t.t (* * Guild.t *)
+| GUILD_ROLE_UPDATE of Role_t.t (* * Guild.t *)
+| GUILD_ROLE_DELETE of Role_t.t (* * Guild.t *)
+| MESSAGE_CREATE of Message_t.t
+| MESSAGE_UPDATE of Message_t.t
+| MESSAGE_DELETE of Message_t.t
+| MESSAGE_BULK_DELETE of Message_t.t list
+| MESSAGE_REACTION_ADD of (* Message.t * *) Reaction_t.t
+| MESSAGE_REACTION_REMOVE of (* Message.t * *) Reaction_t.t
+| MESSAGE_REACTION_REMOVE_ALL of (* Message.t * *) Reaction_t.t list
+| PRESENCE_UPDATE of Presence_t.t
+| TYPING_START of Yojson.Safe.json
+| USER_UPDATE of Yojson.Safe.json
+| VOICE_STATE_UPDATE of Yojson.Safe.json
+| VOICE_SERVER_UPDATE of Yojson.Safe.json
+| WEBHOOKS_UPDATE of Yojson.Safe.json
-let from_string = function
- | "HELLO" -> HELLO
- | "READY" -> READY
- | "RESUMED" -> RESUMED
- | "INVALID_SESSION" -> INVALID_SESSION
- | "CHANNEL_CREATE" -> CHANNEL_CREATE
- | "CHANNEL_UPDATE" -> CHANNEL_UPDATE
- | "CHANNEL_DELETE" -> CHANNEL_DELETE
- | "CHANNEL_PINS_UPDATE" -> CHANNEL_PINS_UPDATE
- | "GUILD_CREATE" -> GUILD_CREATE
- | "GUILD_UPDATE" -> GUILD_UPDATE
- | "GUILD_DELETE" -> GUILD_DELETE
- | "GUILD_BAN_ADD" -> GUILD_BAN_ADD
- | "GUILD_BAN_REMOVE" -> GUILD_BAN_REMOVE
- | "GUILD_EMOJIS_UPDATE" -> GUILD_EMOJIS_UPDATE
- | "GUILD_INTEGRATIONS_UPDATE" -> GUILD_INTEGRATIONS_UPDATE
- | "GUILD_MEMBER_ADD" -> GUILD_MEMBER_ADD
- | "GUILD_MEMBER_REMOVE" -> GUILD_MEMBER_REMOVE
- | "GUILD_MEMBER_UPDATE" -> GUILD_MEMBER_UPDATE
- | "GUILD_MEMBERS_CHUNK" -> GUILD_MEMBERS_CHUNK
- | "GUILD_ROLE_CREATE" -> GUILD_ROLE_CREATE
- | "GUILD_ROLE_UPDATE" -> GUILD_ROLE_UPDATE
- | "GUILD_ROLE_DELETE" -> GUILD_ROLE_DELETE
- | "MESSAGE_CREATE" -> MESSAGE_CREATE
- | "MESSAGE_UPDATE" -> MESSAGE_UPDATE
- | "MESSAGE_DELETE" -> MESSAGE_DELETE
- | "MESSAGE_BULK_DELETE" -> MESSAGE_BULK_DELETE
- | "MESSAGE_REACTION_ADD" -> MESSAGE_REACTION_ADD
- | "MESSAGE_REACTION_REMOVE" -> MESSAGE_REACTION_REMOVE
- | "MESSAGE_REACTION_REMOVE_ALL" -> MESSAGE_REACTION_REMOVE_ALL
- | "PRESENCE_UPDATE" -> PRESENCE_UPDATE
- | "TYPING_START" -> TYPING_START
- | "USER_UPDATE" -> USER_UPDATE
- | "VOICE_STATE_UPDATE" -> VOICE_STATE_UPDATE
- | "VOICE_SERVER_UPDATE" -> VOICE_SERVER_UPDATE
- | "WEBHOOKS_UPDATE" -> WEBHOOKS_UPDATE
- | ev -> raise (Invalid_Event ev)
+exception Invalid_event of string
-let to_string = function
- | HELLO -> "HELLO"
- | READY -> "READY"
- | RESUMED -> "RESUMED"
- | INVALID_SESSION -> "INVALID_SESSION"
- | CHANNEL_CREATE -> "CHANNEL_CREATE"
- | CHANNEL_UPDATE -> "CHANNEL_UPDATE"
- | CHANNEL_DELETE -> "CHANNEL_DELETE"
- | CHANNEL_PINS_UPDATE -> "CHANNEL_PINS_UPDATE"
- | GUILD_CREATE -> "GUILD_CREATE"
- | GUILD_UPDATE -> "GUILD_UPDATE"
- | GUILD_DELETE -> "GUILD_DELETE"
- | GUILD_BAN_ADD -> "GUILD_BAN_ADD"
- | GUILD_BAN_REMOVE -> "GUILD_BAN_REMOVE"
- | GUILD_EMOJIS_UPDATE -> "GUILD_EMOJIS_UPDATE"
- | GUILD_INTEGRATIONS_UPDATE -> "GUILD_INTEGRATIONS_UPDATE"
- | GUILD_MEMBER_ADD -> "GUILD_MEMBER_ADD"
- | GUILD_MEMBER_REMOVE -> "GUILD_MEMBER_REMOVE"
- | GUILD_MEMBER_UPDATE -> "GUILD_MEMBER_UPDATE"
- | GUILD_MEMBERS_CHUNK -> "GUILD_MEMBERS_CHUNK"
- | GUILD_ROLE_CREATE -> "GUILD_ROLE_CREATE"
- | GUILD_ROLE_UPDATE -> "GUILD_ROLE_UPDATE"
- | GUILD_ROLE_DELETE -> "GUILD_ROLE_DELETE"
- | MESSAGE_CREATE -> "MESSAGE_CREATE"
- | MESSAGE_UPDATE -> "MESSAGE_UPDATE"
- | MESSAGE_DELETE -> "MESSAGE_DELETE"
- | MESSAGE_BULK_DELETE -> "MESSAGE_BULK_DELETE"
- | MESSAGE_REACTION_ADD -> "MESSAGE_REACTION_ADD"
- | MESSAGE_REACTION_REMOVE -> "MESSAGE_REACTION_REMOVE"
- | MESSAGE_REACTION_REMOVE_ALL -> "MESSAGE_REACTION_REMOVE_ALL"
- | PRESENCE_UPDATE -> "PRESENCE_UPDATE"
- | TYPING_START -> "TYPING_START"
- | USER_UPDATE -> "USER_UPDATE"
- | VOICE_STATE_UPDATE -> "VOICE_STATE_UPDATE"
- | VOICE_SERVER_UPDATE -> "VOICE_SERVER_UPDATE"
- | WEBHOOKS_UPDATE -> "WEBHOOKS_UPDATE" \ No newline at end of file
+let event_of_string ~contents t = match t with
+ | "HELLO" -> HELLO (Yojson.Safe.from_string contents)
+ | "READY" -> READY (Yojson.Safe.from_string contents)
+ | "RESUMED" -> RESUMED (Yojson.Safe.from_string contents)
+ | "INVALID_SESSION" -> INVALID_SESSION (Yojson.Safe.from_string contents)
+ | "CHANNEL_CREATE" -> CHANNEL_CREATE (Channel_j.t_of_string contents)
+ | "CHANNEL_UPDATE" -> CHANNEL_UPDATE (Channel_j.t_of_string contents)
+ | "CHANNEL_DELETE" -> CHANNEL_DELETE (Channel_j.t_of_string contents)
+ | "CHANNEL_PINS_UPDATE" -> CHANNEL_PINS_UPDATE (Yojson.Safe.from_string contents)
+ | "GUILD_CREATE" -> GUILD_CREATE (Guild_j.t_of_string contents)
+ | "GUILD_UPDATE" -> GUILD_UPDATE (Guild_j.t_of_string contents)
+ | "GUILD_DELETE" -> GUILD_DELETE (Guild_j.t_of_string contents)
+ | "GUILD_BAN_ADD" -> GUILD_BAN_ADD (Ban_j.t_of_string contents)
+ | "GUILD_BAN_REMOVE" -> GUILD_BAN_REMOVE (Ban_j.t_of_string contents)
+ | "GUILD_EMOJIS_UPDATE" -> GUILD_EMOJIS_UPDATE (Yojson.Safe.from_string contents)
+ | "GUILD_INTEGRATIONS_UPDATE" -> GUILD_INTEGRATIONS_UPDATE (Yojson.Safe.from_string contents)
+ | "GUILD_MEMBER_ADD" -> GUILD_MEMBER_ADD (Member_j.t_of_string contents)
+ | "GUILD_MEMBER_REMOVE" -> GUILD_MEMBER_REMOVE (Member_j.t_of_string contents)
+ | "GUILD_MEMBER_UPDATE" -> GUILD_MEMBER_UPDATE (Member_j.t_of_string contents)
+ | "GUILD_MEMBERS_CHUNK" -> GUILD_MEMBERS_CHUNK (Yojson.Safe.(from_string contents |> Util.to_list) |> List.map ~f:(fun m -> Yojson.Safe.to_string m |> Member_j.t_of_string))
+ | "GUILD_ROLE_CREATE" -> GUILD_ROLE_CREATE (Role_j.t_of_string contents)
+ | "GUILD_ROLE_UPDATE" -> GUILD_ROLE_UPDATE (Role_j.t_of_string contents)
+ | "GUILD_ROLE_DELETE" -> GUILD_ROLE_DELETE (Role_j.t_of_string contents)
+ | "MESSAGE_CREATE" -> MESSAGE_CREATE (Message_j.t_of_string contents)
+ | "MESSAGE_UPDATE" -> MESSAGE_UPDATE (Message_j.t_of_string contents)
+ | "MESSAGE_DELETE" -> MESSAGE_DELETE (Message_j.t_of_string contents)
+ | "MESSAGE_BULK_DELETE" -> MESSAGE_BULK_DELETE (Yojson.Safe.(from_string contents |> Util.to_list) |> List.map ~f:(fun m -> Yojson.Safe.to_string m |> Message_j.t_of_string))
+ | "MESSAGE_REACTION_ADD" -> MESSAGE_REACTION_ADD (Reaction_j.t_of_string contents)
+ | "MESSAGE_REACTION_REMOVE" -> MESSAGE_REACTION_REMOVE (Reaction_j.t_of_string contents)
+ | "MESSAGE_REACTION_REMOVE_ALL" -> MESSAGE_REACTION_REMOVE_ALL (Yojson.Safe.(from_string contents |> Util.to_list) |> List.map ~f:(fun m -> Yojson.Safe.to_string m |> Reaction_j.t_of_string))
+ | "PRESENCE_UPDATE" -> PRESENCE_UPDATE (Presence_j.t_of_string contents)
+ | "TYPING_START" -> TYPING_START (Yojson.Safe.from_string contents)
+ | "USER_UPDATE" -> USER_UPDATE (Yojson.Safe.from_string contents)
+ | "VOICE_STATE_UPDATE" -> VOICE_STATE_UPDATE (Yojson.Safe.from_string contents)
+ | "VOICE_SERVER_UPDATE" -> VOICE_SERVER_UPDATE (Yojson.Safe.from_string contents)
+ | "WEBHOOKS_UPDATE" -> WEBHOOKS_UPDATE (Yojson.Safe.from_string contents)
+ | s -> raise (Invalid_event s) \ No newline at end of file
diff --git a/lib/models.ml b/lib/models.ml
new file mode 100644
index 0000000..250de34
--- /dev/null
+++ b/lib/models.ml
@@ -0,0 +1,17 @@
+module Make(H : S.Http) = struct
+ module Http = H
+ module Activity = Activity.Make(H)
+ module Attachment = Attachment.Make(H)
+ module Ban = Ban.Make(H)
+ module Channel = Channel.Make(H)
+ module Embed = Embed.Make(H)
+ module Emoji = Emoji.Make(H)
+ module Guild = Guild.Make(H)
+ module Member = Member.Make(H)
+ module Message = Message.Make(H)
+ module Presence = Presence.Make(H)
+ module Reaction = Reaction.Make(H)
+ module Role = Role.Make(H)
+ module Snowflake = Snowflake.Make(H)
+ module User = User.Make(H)
+end \ No newline at end of file
diff --git a/lib/models/activity.ml b/lib/models/activity.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/activity.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/attachment.ml b/lib/models/attachment.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/attachment.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/ban.ml b/lib/models/ban.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/ban.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/channel.ml b/lib/models/channel.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/channel.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/embed.ml b/lib/models/embed.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/embed.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/emoji.ml b/lib/models/emoji.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/emoji.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/activity.atd b/lib/models/gen/activity.atd
index 8e02191..8e02191 100644
--- a/lib/models/activity.atd
+++ b/lib/models/gen/activity.atd
diff --git a/lib/models/activity_j.ml b/lib/models/gen/activity_j.ml
index eb1a62e..eb1a62e 100644
--- a/lib/models/activity_j.ml
+++ b/lib/models/gen/activity_j.ml
diff --git a/lib/models/activity_j.mli b/lib/models/gen/activity_j.mli
index c179efb..c179efb 100644
--- a/lib/models/activity_j.mli
+++ b/lib/models/gen/activity_j.mli
diff --git a/lib/models/activity_t.ml b/lib/models/gen/activity_t.ml
index 6bb2049..6bb2049 100644
--- a/lib/models/activity_t.ml
+++ b/lib/models/gen/activity_t.ml
diff --git a/lib/models/activity_t.mli b/lib/models/gen/activity_t.mli
index 6bb2049..6bb2049 100644
--- a/lib/models/activity_t.mli
+++ b/lib/models/gen/activity_t.mli
diff --git a/lib/models/attachment.atd b/lib/models/gen/attachment.atd
index 9757b49..9757b49 100644
--- a/lib/models/attachment.atd
+++ b/lib/models/gen/attachment.atd
diff --git a/lib/models/attachment_j.ml b/lib/models/gen/attachment_j.ml
index 28f909d..28f909d 100644
--- a/lib/models/attachment_j.ml
+++ b/lib/models/gen/attachment_j.ml
diff --git a/lib/models/attachment_j.mli b/lib/models/gen/attachment_j.mli
index 6b11b08..6b11b08 100644
--- a/lib/models/attachment_j.mli
+++ b/lib/models/gen/attachment_j.mli
diff --git a/lib/models/attachment_t.ml b/lib/models/gen/attachment_t.ml
index 0485dcc..0485dcc 100644
--- a/lib/models/attachment_t.ml
+++ b/lib/models/gen/attachment_t.ml
diff --git a/lib/models/attachment_t.mli b/lib/models/gen/attachment_t.mli
index 0485dcc..0485dcc 100644
--- a/lib/models/attachment_t.mli
+++ b/lib/models/gen/attachment_t.mli
diff --git a/lib/models/ban.atd b/lib/models/gen/ban.atd
index 0a87338..0a87338 100644
--- a/lib/models/ban.atd
+++ b/lib/models/gen/ban.atd
diff --git a/lib/models/ban_j.ml b/lib/models/gen/ban_j.ml
index e608f67..e608f67 100644
--- a/lib/models/ban_j.ml
+++ b/lib/models/gen/ban_j.ml
diff --git a/lib/models/ban_j.mli b/lib/models/gen/ban_j.mli
index 9449b5c..9449b5c 100644
--- a/lib/models/ban_j.mli
+++ b/lib/models/gen/ban_j.mli
diff --git a/lib/models/ban_t.ml b/lib/models/gen/ban_t.ml
index 7d9c5a0..7d9c5a0 100644
--- a/lib/models/ban_t.ml
+++ b/lib/models/gen/ban_t.ml
diff --git a/lib/models/ban_t.mli b/lib/models/gen/ban_t.mli
index 7d9c5a0..7d9c5a0 100644
--- a/lib/models/ban_t.mli
+++ b/lib/models/gen/ban_t.mli
diff --git a/lib/models/channel.atd b/lib/models/gen/channel.atd
index 6ab58cf..6ab58cf 100644
--- a/lib/models/channel.atd
+++ b/lib/models/gen/channel.atd
diff --git a/lib/models/channel_j.ml b/lib/models/gen/channel_j.ml
index 7369230..7369230 100644
--- a/lib/models/channel_j.ml
+++ b/lib/models/gen/channel_j.ml
diff --git a/lib/models/channel_j.mli b/lib/models/gen/channel_j.mli
index ec4048c..ec4048c 100644
--- a/lib/models/channel_j.mli
+++ b/lib/models/gen/channel_j.mli
diff --git a/lib/models/channel_t.ml b/lib/models/gen/channel_t.ml
index a5c9ce4..a5c9ce4 100644
--- a/lib/models/channel_t.ml
+++ b/lib/models/gen/channel_t.ml
diff --git a/lib/models/channel_t.mli b/lib/models/gen/channel_t.mli
index a5c9ce4..a5c9ce4 100644
--- a/lib/models/channel_t.mli
+++ b/lib/models/gen/channel_t.mli
diff --git a/lib/models/embed.atd b/lib/models/gen/embed.atd
index 0d3aed4..0d3aed4 100644
--- a/lib/models/embed.atd
+++ b/lib/models/gen/embed.atd
diff --git a/lib/models/embed_j.ml b/lib/models/gen/embed_j.ml
index 560c517..560c517 100644
--- a/lib/models/embed_j.ml
+++ b/lib/models/gen/embed_j.ml
diff --git a/lib/models/embed_j.mli b/lib/models/gen/embed_j.mli
index 8872d89..8872d89 100644
--- a/lib/models/embed_j.mli
+++ b/lib/models/gen/embed_j.mli
diff --git a/lib/models/embed_t.ml b/lib/models/gen/embed_t.ml
index 9eb5059..9eb5059 100644
--- a/lib/models/embed_t.ml
+++ b/lib/models/gen/embed_t.ml
diff --git a/lib/models/embed_t.mli b/lib/models/gen/embed_t.mli
index 9eb5059..9eb5059 100644
--- a/lib/models/embed_t.mli
+++ b/lib/models/gen/embed_t.mli
diff --git a/lib/models/emoji.atd b/lib/models/gen/emoji.atd
index 877323b..877323b 100644
--- a/lib/models/emoji.atd
+++ b/lib/models/gen/emoji.atd
diff --git a/lib/models/emoji_j.ml b/lib/models/gen/emoji_j.ml
index d621de2..d621de2 100644
--- a/lib/models/emoji_j.ml
+++ b/lib/models/gen/emoji_j.ml
diff --git a/lib/models/emoji_j.mli b/lib/models/gen/emoji_j.mli
index 596deeb..596deeb 100644
--- a/lib/models/emoji_j.mli
+++ b/lib/models/gen/emoji_j.mli
diff --git a/lib/models/emoji_t.ml b/lib/models/gen/emoji_t.ml
index 333939d..333939d 100644
--- a/lib/models/emoji_t.ml
+++ b/lib/models/gen/emoji_t.ml
diff --git a/lib/models/emoji_t.mli b/lib/models/gen/emoji_t.mli
index 333939d..333939d 100644
--- a/lib/models/emoji_t.mli
+++ b/lib/models/gen/emoji_t.mli
diff --git a/lib/models/guild.atd b/lib/models/gen/guild.atd
index c622eea..c622eea 100644
--- a/lib/models/guild.atd
+++ b/lib/models/gen/guild.atd
diff --git a/lib/models/guild_j.ml b/lib/models/gen/guild_j.ml
index 9f7b069..9f7b069 100644
--- a/lib/models/guild_j.ml
+++ b/lib/models/gen/guild_j.ml
diff --git a/lib/models/guild_j.mli b/lib/models/gen/guild_j.mli
index d430b2a..d430b2a 100644
--- a/lib/models/guild_j.mli
+++ b/lib/models/gen/guild_j.mli
diff --git a/lib/models/guild_t.ml b/lib/models/gen/guild_t.ml
index 9ffe83f..9ffe83f 100644
--- a/lib/models/guild_t.ml
+++ b/lib/models/gen/guild_t.ml
diff --git a/lib/models/guild_t.mli b/lib/models/gen/guild_t.mli
index 9ffe83f..9ffe83f 100644
--- a/lib/models/guild_t.mli
+++ b/lib/models/gen/guild_t.mli
diff --git a/lib/models/member.atd b/lib/models/gen/member.atd
index 11d8b62..11d8b62 100644
--- a/lib/models/member.atd
+++ b/lib/models/gen/member.atd
diff --git a/lib/models/member_j.ml b/lib/models/gen/member_j.ml
index 7fd4aec..7fd4aec 100644
--- a/lib/models/member_j.ml
+++ b/lib/models/gen/member_j.ml
diff --git a/lib/models/member_j.mli b/lib/models/gen/member_j.mli
index f160b6d..f160b6d 100644
--- a/lib/models/member_j.mli
+++ b/lib/models/gen/member_j.mli
diff --git a/lib/models/member_t.ml b/lib/models/gen/member_t.ml
index 6262e1b..6262e1b 100644
--- a/lib/models/member_t.ml
+++ b/lib/models/gen/member_t.ml
diff --git a/lib/models/member_t.mli b/lib/models/gen/member_t.mli
index 6262e1b..6262e1b 100644
--- a/lib/models/member_t.mli
+++ b/lib/models/gen/member_t.mli
diff --git a/lib/models/message.atd b/lib/models/gen/message.atd
index 1c90be9..8611f6a 100644
--- a/lib/models/message.atd
+++ b/lib/models/gen/message.atd
@@ -2,7 +2,6 @@ type snowflake <ocaml from="Snowflake" t="t"> = abstract
type user <ocaml from="User" t="t"> = abstract
type member <ocaml from="Member" t="t"> = abstract
type partial_member <ocaml from="Member" t="partial_member"> = abstract
-type role <ocaml from="Role" t="t"> = abstract
type attachment <ocaml from="Attachment" t="t"> = abstract
type embed <ocaml from="Embed" t="t"> = abstract
type reaction <ocaml from="Reaction" t="t"> = abstract
@@ -18,13 +17,13 @@ type t = {
?edited_timestamp: string option;
tts: bool;
mention_everyone: bool;
- mentions: user list;
- role_mentions: role list;
+ mentions: snowflake list;
+ ?role_mentions: snowflake list option;
attachments: attachment list;
embeds: embed list;
- reactions: reaction list;
+ ?reactions: snowflake list option;
?nonce: snowflake option;
pinned: bool;
- webhook_id: snowflake;
+ ?webhook_id: snowflake option;
kind <json name="type">: int;
} \ No newline at end of file
diff --git a/lib/models/message_j.ml b/lib/models/gen/message_j.ml
index 206d69c..faea836 100644
--- a/lib/models/message_j.ml
+++ b/lib/models/gen/message_j.ml
@@ -5,10 +5,6 @@ type user = User_t.t
type snowflake = Snowflake_t.t
-type role = Role_t.t
-
-type reaction = Reaction_t.t
-
type partial_member = Member_t.partial_member
type embed = Embed_t.t
@@ -26,17 +22,19 @@ type t = Message_t.t = {
edited_timestamp: string option;
tts: bool;
mention_everyone: bool;
- mentions: user list;
- role_mentions: role list;
+ mentions: snowflake list;
+ role_mentions: snowflake list option;
attachments: attachment list;
embeds: embed list;
- reactions: reaction list;
+ reactions: snowflake list option;
nonce: snowflake option;
pinned: bool;
- webhook_id: snowflake;
+ webhook_id: snowflake option;
kind: int
}
+type reaction = Reaction_t.t
+
type member = Member_t.t
let write_user = (
@@ -63,30 +61,6 @@ let read_snowflake = (
)
let snowflake_of_string s =
read_snowflake (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
-let write_role = (
- Role_j.write_t
-)
-let string_of_role ?(len = 1024) x =
- let ob = Bi_outbuf.create len in
- write_role ob x;
- Bi_outbuf.contents ob
-let read_role = (
- Role_j.read_t
-)
-let role_of_string s =
- read_role (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
-let write_reaction = (
- Reaction_j.write_t
-)
-let string_of_reaction ?(len = 1024) x =
- let ob = Bi_outbuf.create len in
- write_reaction ob x;
- Bi_outbuf.contents ob
-let read_reaction = (
- Reaction_j.read_t
-)
-let reaction_of_string s =
- read_reaction (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
let write_partial_member = (
Member_j.write_partial_member
)
@@ -123,22 +97,6 @@ let read_attachment = (
)
let attachment_of_string s =
read_attachment (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
-let write__8 = (
- Atdgen_runtime.Oj_run.write_list (
- write_reaction
- )
-)
-let string_of__8 ?(len = 1024) x =
- let ob = Bi_outbuf.create len in
- write__8 ob x;
- Bi_outbuf.contents ob
-let read__8 = (
- Atdgen_runtime.Oj_run.read_list (
- read_reaction
- )
-)
-let _8_of_string s =
- read__8 (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
let write__7 = (
Atdgen_runtime.Oj_run.write_list (
write_embed
@@ -171,25 +129,9 @@ let read__6 = (
)
let _6_of_string s =
read__6 (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
-let write__5 = (
- Atdgen_runtime.Oj_run.write_list (
- write_role
- )
-)
-let string_of__5 ?(len = 1024) x =
- let ob = Bi_outbuf.create len in
- write__5 ob x;
- Bi_outbuf.contents ob
-let read__5 = (
- Atdgen_runtime.Oj_run.read_list (
- read_role
- )
-)
-let _5_of_string s =
- read__5 (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
let write__4 = (
Atdgen_runtime.Oj_run.write_list (
- write_user
+ write_snowflake
)
)
let string_of__4 ?(len = 1024) x =
@@ -198,11 +140,68 @@ let string_of__4 ?(len = 1024) x =
Bi_outbuf.contents ob
let read__4 = (
Atdgen_runtime.Oj_run.read_list (
- read_user
+ read_snowflake
)
)
let _4_of_string s =
read__4 (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
+let write__5 = (
+ Atdgen_runtime.Oj_run.write_option (
+ write__4
+ )
+)
+let string_of__5 ?(len = 1024) x =
+ let ob = Bi_outbuf.create len in
+ write__5 ob x;
+ Bi_outbuf.contents ob
+let read__5 = (
+ fun p lb ->
+ Yojson.Safe.read_space p lb;
+ match Yojson.Safe.start_any_variant p lb with
+ | `Edgy_bracket -> (
+ match Yojson.Safe.read_ident p lb with
+ | "None" ->
+ Yojson.Safe.read_space p lb;
+ Yojson.Safe.read_gt p lb;
+ (None : _ option)
+ | "Some" ->
+ Atdgen_runtime.Oj_run.read_until_field_value p lb;
+ let x = (
+ read__4
+ ) p lb
+ in
+ Yojson.Safe.read_space p lb;
+ Yojson.Safe.read_gt p lb;
+ (Some x : _ option)
+ | x ->
+ Atdgen_runtime.Oj_run.invalid_variant_tag p x
+ )
+ | `Double_quote -> (
+ match Yojson.Safe.finish_string p lb with
+ | "None" ->
+ (None : _ option)
+ | x ->
+ Atdgen_runtime.Oj_run.invalid_variant_tag p x
+ )
+ | `Square_bracket -> (
+ match Atdgen_runtime.Oj_run.read_string p lb with
+ | "Some" ->
+ Yojson.Safe.read_space p lb;
+ Yojson.Safe.read_comma p lb;
+ Yojson.Safe.read_space p lb;
+ let x = (
+ read__4
+ ) p lb
+ in
+ Yojson.Safe.read_space p lb;
+ Yojson.Safe.read_rbr p lb;
+ (Some x : _ option)
+ | x ->
+ Atdgen_runtime.Oj_run.invalid_variant_tag p x
+ )
+)
+let _5_of_string s =
+ read__5 (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
let write__3 = (
Atdgen_runtime.Oj_run.write_option (
Yojson.Safe.write_string
@@ -483,15 +482,17 @@ let write_t : _ -> t -> _ = (
write__4
)
ob x.mentions;
- if !is_first then
- is_first := false
- else
- Bi_outbuf.add_char ob ',';
- Bi_outbuf.add_string ob "\"role_mentions\":";
- (
- write__5
- )
- ob x.role_mentions;
+ (match x.role_mentions with None -> () | Some x ->
+ if !is_first then
+ is_first := false
+ else
+ Bi_outbuf.add_char ob ',';
+ Bi_outbuf.add_string ob "\"role_mentions\":";
+ (
+ write__4
+ )
+ ob x;
+ );
if !is_first then
is_first := false
else
@@ -510,15 +511,17 @@ let write_t : _ -> t -> _ = (
write__7
)
ob x.embeds;
- if !is_first then
- is_first := false
- else
- Bi_outbuf.add_char ob ',';
- Bi_outbuf.add_string ob "\"reactions\":";
- (
- write__8
- )
- ob x.reactions;
+ (match x.reactions with None -> () | Some x ->
+ if !is_first then
+ is_first := false
+ else
+ Bi_outbuf.add_char ob ',';
+ Bi_outbuf.add_string ob "\"reactions\":";
+ (
+ write__4
+ )
+ ob x;
+ );
(match x.nonce with None -> () | Some x ->
if !is_first then
is_first := false
@@ -539,15 +542,17 @@ let write_t : _ -> t -> _ = (
Yojson.Safe.write_bool
)
ob x.pinned;
- if !is_first then
- is_first := false
- else
- Bi_outbuf.add_char ob ',';
- Bi_outbuf.add_string ob "\"webhook_id\":";
- (
- write_snowflake
- )
- ob x.webhook_id;
+ (match x.webhook_id with None -> () | Some x ->
+ if !is_first then
+ is_first := false
+ else
+ Bi_outbuf.add_char ob ',';
+ Bi_outbuf.add_string ob "\"webhook_id\":";
+ (
+ write_snowflake
+ )
+ ob x;
+ );
if !is_first then
is_first := false
else
@@ -578,13 +583,13 @@ let read_t = (
let field_tts = ref (Obj.magic (Sys.opaque_identity 0.0)) in
let field_mention_everyone = ref (Obj.magic (Sys.opaque_identity 0.0)) in
let field_mentions = ref (Obj.magic (Sys.opaque_identity 0.0)) in
- let field_role_mentions = ref (Obj.magic (Sys.opaque_identity 0.0)) in
+ let field_role_mentions = ref (None) in
let field_attachments = ref (Obj.magic (Sys.opaque_identity 0.0)) in
let field_embeds = ref (Obj.magic (Sys.opaque_identity 0.0)) in
- let field_reactions = ref (Obj.magic (Sys.opaque_identity 0.0)) in
+ let field_reactions = ref (None) in
let field_nonce = ref (None) in
let field_pinned = ref (Obj.magic (Sys.opaque_identity 0.0)) in
- let field_webhook_id = ref (Obj.magic (Sys.opaque_identity 0.0)) in
+ let field_webhook_id = ref (None) in
let field_kind = ref (Obj.magic (Sys.opaque_identity 0.0)) in
let bits0 = ref 0 in
try
@@ -873,33 +878,39 @@ let read_t = (
);
bits0 := !bits0 lor 0x80;
| 11 ->
- field_role_mentions := (
- (
- read__5
- ) p lb
- );
- bits0 := !bits0 lor 0x100;
+ if not (Yojson.Safe.read_null_if_possible p lb) then (
+ field_role_mentions := (
+ Some (
+ (
+ read__4
+ ) p lb
+ )
+ );
+ )
| 12 ->
field_attachments := (
(
read__6
) p lb
);
- bits0 := !bits0 lor 0x200;
+ bits0 := !bits0 lor 0x100;
| 13 ->
field_embeds := (
(
read__7
) p lb
);
- bits0 := !bits0 lor 0x400;
+ bits0 := !bits0 lor 0x200;
| 14 ->
- field_reactions := (
- (
- read__8
- ) p lb
- );
- bits0 := !bits0 lor 0x800;
+ if not (Yojson.Safe.read_null_if_possible p lb) then (
+ field_reactions := (
+ Some (
+ (
+ read__4
+ ) p lb
+ )
+ );
+ )
| 15 ->
if not (Yojson.Safe.read_null_if_possible p lb) then (
field_nonce := (
@@ -916,21 +927,24 @@ let read_t = (
Atdgen_runtime.Oj_run.read_bool
) p lb
);
- bits0 := !bits0 lor 0x1000;
+ bits0 := !bits0 lor 0x400;
| 17 ->
- field_webhook_id := (
- (
- read_snowflake
- ) p lb
- );
- bits0 := !bits0 lor 0x2000;
+ if not (Yojson.Safe.read_null_if_possible p lb) then (
+ field_webhook_id := (
+ Some (
+ (
+ read_snowflake
+ ) p lb
+ )
+ );
+ )
| 18 ->
field_kind := (
(
Atdgen_runtime.Oj_run.read_int
) p lb
);
- bits0 := !bits0 lor 0x4000;
+ bits0 := !bits0 lor 0x800;
| _ -> (
Yojson.Safe.skip_json p lb
)
@@ -1221,33 +1235,39 @@ let read_t = (
);
bits0 := !bits0 lor 0x80;
| 11 ->
- field_role_mentions := (
- (
- read__5
- ) p lb
- );
- bits0 := !bits0 lor 0x100;
+ if not (Yojson.Safe.read_null_if_possible p lb) then (
+ field_role_mentions := (
+ Some (
+ (
+ read__4
+ ) p lb
+ )
+ );
+ )
| 12 ->
field_attachments := (
(
read__6
) p lb
);
- bits0 := !bits0 lor 0x200;
+ bits0 := !bits0 lor 0x100;
| 13 ->
field_embeds := (
(
read__7
) p lb
);
- bits0 := !bits0 lor 0x400;
+ bits0 := !bits0 lor 0x200;
| 14 ->
- field_reactions := (
- (
- read__8
- ) p lb
- );
- bits0 := !bits0 lor 0x800;
+ if not (Yojson.Safe.read_null_if_possible p lb) then (
+ field_reactions := (
+ Some (
+ (
+ read__4
+ ) p lb
+ )
+ );
+ )
| 15 ->
if not (Yojson.Safe.read_null_if_possible p lb) then (
field_nonce := (
@@ -1264,21 +1284,24 @@ let read_t = (
Atdgen_runtime.Oj_run.read_bool
) p lb
);
- bits0 := !bits0 lor 0x1000;
+ bits0 := !bits0 lor 0x400;
| 17 ->
- field_webhook_id := (
- (
- read_snowflake
- ) p lb
- );
- bits0 := !bits0 lor 0x2000;
+ if not (Yojson.Safe.read_null_if_possible p lb) then (
+ field_webhook_id := (
+ Some (
+ (
+ read_snowflake
+ ) p lb
+ )
+ );
+ )
| 18 ->
field_kind := (
(
Atdgen_runtime.Oj_run.read_int
) p lb
);
- bits0 := !bits0 lor 0x4000;
+ bits0 := !bits0 lor 0x800;
| _ -> (
Yojson.Safe.skip_json p lb
)
@@ -1286,7 +1309,7 @@ let read_t = (
done;
assert false;
with Yojson.End_of_object -> (
- if !bits0 <> 0x7fff then Atdgen_runtime.Oj_run.missing_fields p [| !bits0 |] [| "id"; "author"; "channel_id"; "content"; "timestamp"; "tts"; "mention_everyone"; "mentions"; "role_mentions"; "attachments"; "embeds"; "reactions"; "pinned"; "webhook_id"; "kind" |];
+ if !bits0 <> 0xfff then Atdgen_runtime.Oj_run.missing_fields p [| !bits0 |] [| "id"; "author"; "channel_id"; "content"; "timestamp"; "tts"; "mention_everyone"; "mentions"; "attachments"; "embeds"; "pinned"; "kind" |];
(
{
id = !field_id;
@@ -1314,6 +1337,18 @@ let read_t = (
)
let t_of_string s =
read_t (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
+let write_reaction = (
+ Reaction_j.write_t
+)
+let string_of_reaction ?(len = 1024) x =
+ let ob = Bi_outbuf.create len in
+ write_reaction ob x;
+ Bi_outbuf.contents ob
+let read_reaction = (
+ Reaction_j.read_t
+)
+let reaction_of_string s =
+ read_reaction (Yojson.Safe.init_lexer ()) (Lexing.from_string s)
let write_member = (
Member_j.write_t
)
diff --git a/lib/models/message_j.mli b/lib/models/gen/message_j.mli
index e3a3e5b..04aa440 100644
--- a/lib/models/message_j.mli
+++ b/lib/models/gen/message_j.mli
@@ -5,10 +5,6 @@ type user = User_t.t
type snowflake = Snowflake_t.t
-type role = Role_t.t
-
-type reaction = Reaction_t.t
-
type partial_member = Member_t.partial_member
type embed = Embed_t.t
@@ -26,17 +22,19 @@ type t = Message_t.t = {
edited_timestamp: string option;
tts: bool;
mention_everyone: bool;
- mentions: user list;
- role_mentions: role list;
+ mentions: snowflake list;
+ role_mentions: snowflake list option;
attachments: attachment list;
embeds: embed list;
- reactions: reaction list;
+ reactions: snowflake list option;
nonce: snowflake option;
pinned: bool;
- webhook_id: snowflake;
+ webhook_id: snowflake option;
kind: int
}
+type reaction = Reaction_t.t
+
type member = Member_t.t
val write_user :
@@ -79,46 +77,6 @@ val snowflake_of_string :
string -> snowflake
(** Deserialize JSON data of type {!snowflake}. *)
-val write_role :
- Bi_outbuf.t -> role -> unit
- (** Output a JSON value of type {!role}. *)
-
-val string_of_role :
- ?len:int -> role -> string
- (** Serialize a value of type {!role}
- into a JSON string.
- @param len specifies the initial length
- of the buffer used internally.
- Default: 1024. *)
-
-val read_role :
- Yojson.Safe.lexer_state -> Lexing.lexbuf -> role
- (** Input JSON data of type {!role}. *)
-
-val role_of_string :
- string -> role
- (** Deserialize JSON data of type {!role}. *)
-
-val write_reaction :
- Bi_outbuf.t -> reaction -> unit
- (** Output a JSON value of type {!reaction}. *)
-
-val string_of_reaction :
- ?len:int -> reaction -> string
- (** Serialize a value of type {!reaction}
- into a JSON string.
- @param len specifies the initial length
- of the buffer used internally.
- Default: 1024. *)
-
-val read_reaction :
- Yojson.Safe.lexer_state -> Lexing.lexbuf -> reaction
- (** Input JSON data of type {!reaction}. *)
-
-val reaction_of_string :
- string -> reaction
- (** Deserialize JSON data of type {!reaction}. *)
-
val write_partial_member :
Bi_outbuf.t -> partial_member -> unit
(** Output a JSON value of type {!partial_member}. *)
@@ -199,6 +157,26 @@ val t_of_string :
string -> t
(** Deserialize JSON data of type {!t}. *)
+val write_reaction :
+ Bi_outbuf.t -> reaction -> unit
+ (** Output a JSON value of type {!reaction}. *)
+
+val string_of_reaction :
+ ?len:int -> reaction -> string
+ (** Serialize a value of type {!reaction}
+ into a JSON string.
+ @param len specifies the initial length
+ of the buffer used internally.
+ Default: 1024. *)
+
+val read_reaction :
+ Yojson.Safe.lexer_state -> Lexing.lexbuf -> reaction
+ (** Input JSON data of type {!reaction}. *)
+
+val reaction_of_string :
+ string -> reaction
+ (** Deserialize JSON data of type {!reaction}. *)
+
val write_member :
Bi_outbuf.t -> member -> unit
(** Output a JSON value of type {!member}. *)
diff --git a/lib/models/message_t.ml b/lib/models/gen/message_t.ml
index 2442d76..ce2d5a4 100644
--- a/lib/models/message_t.ml
+++ b/lib/models/gen/message_t.ml
@@ -5,10 +5,6 @@ type user = User_t.t
type snowflake = Snowflake_t.t
-type role = Role_t.t
-
-type reaction = Reaction_t.t
-
type partial_member = Member_t.partial_member
type embed = Embed_t.t
@@ -26,15 +22,17 @@ type t = {
edited_timestamp: string option;
tts: bool;
mention_everyone: bool;
- mentions: user list;
- role_mentions: role list;
+ mentions: snowflake list;
+ role_mentions: snowflake list option;
attachments: attachment list;
embeds: embed list;
- reactions: reaction list;
+ reactions: snowflake list option;
nonce: snowflake option;
pinned: bool;
- webhook_id: snowflake;
+ webhook_id: snowflake option;
kind: int
}
+type reaction = Reaction_t.t
+
type member = Member_t.t
diff --git a/lib/models/message_t.mli b/lib/models/gen/message_t.mli
index 2442d76..ce2d5a4 100644
--- a/lib/models/message_t.mli
+++ b/lib/models/gen/message_t.mli
@@ -5,10 +5,6 @@ type user = User_t.t
type snowflake = Snowflake_t.t
-type role = Role_t.t
-
-type reaction = Reaction_t.t
-
type partial_member = Member_t.partial_member
type embed = Embed_t.t
@@ -26,15 +22,17 @@ type t = {
edited_timestamp: string option;
tts: bool;
mention_everyone: bool;
- mentions: user list;
- role_mentions: role list;
+ mentions: snowflake list;
+ role_mentions: snowflake list option;
attachments: attachment list;
embeds: embed list;
- reactions: reaction list;
+ reactions: snowflake list option;
nonce: snowflake option;
pinned: bool;
- webhook_id: snowflake;
+ webhook_id: snowflake option;
kind: int
}
+type reaction = Reaction_t.t
+
type member = Member_t.t
diff --git a/lib/models/presence.atd b/lib/models/gen/presence.atd
index da9b3fd..da9b3fd 100644
--- a/lib/models/presence.atd
+++ b/lib/models/gen/presence.atd
diff --git a/lib/models/presence_j.ml b/lib/models/gen/presence_j.ml
index b4ea497..b4ea497 100644
--- a/lib/models/presence_j.ml
+++ b/lib/models/gen/presence_j.ml
diff --git a/lib/models/presence_j.mli b/lib/models/gen/presence_j.mli
index be68b3f..be68b3f 100644
--- a/lib/models/presence_j.mli
+++ b/lib/models/gen/presence_j.mli
diff --git a/lib/models/presence_t.ml b/lib/models/gen/presence_t.ml
index 940d986..940d986 100644
--- a/lib/models/presence_t.ml
+++ b/lib/models/gen/presence_t.ml
diff --git a/lib/models/presence_t.mli b/lib/models/gen/presence_t.mli
index 940d986..940d986 100644
--- a/lib/models/presence_t.mli
+++ b/lib/models/gen/presence_t.mli
diff --git a/lib/models/reaction.atd b/lib/models/gen/reaction.atd
index aa41483..aa41483 100644
--- a/lib/models/reaction.atd
+++ b/lib/models/gen/reaction.atd
diff --git a/lib/models/reaction_j.ml b/lib/models/gen/reaction_j.ml
index fe91833..fe91833 100644
--- a/lib/models/reaction_j.ml
+++ b/lib/models/gen/reaction_j.ml
diff --git a/lib/models/reaction_j.mli b/lib/models/gen/reaction_j.mli
index 0d6a598..0d6a598 100644
--- a/lib/models/reaction_j.mli
+++ b/lib/models/gen/reaction_j.mli
diff --git a/lib/models/reaction_t.ml b/lib/models/gen/reaction_t.ml
index 666030b..666030b 100644
--- a/lib/models/reaction_t.ml
+++ b/lib/models/gen/reaction_t.ml
diff --git a/lib/models/reaction_t.mli b/lib/models/gen/reaction_t.mli
index 666030b..666030b 100644
--- a/lib/models/reaction_t.mli
+++ b/lib/models/gen/reaction_t.mli
diff --git a/lib/models/role.atd b/lib/models/gen/role.atd
index a6bdcba..a6bdcba 100644
--- a/lib/models/role.atd
+++ b/lib/models/gen/role.atd
diff --git a/lib/models/role_j.ml b/lib/models/gen/role_j.ml
index a15b6cf..a15b6cf 100644
--- a/lib/models/role_j.ml
+++ b/lib/models/gen/role_j.ml
diff --git a/lib/models/role_j.mli b/lib/models/gen/role_j.mli
index b4ea78c..b4ea78c 100644
--- a/lib/models/role_j.mli
+++ b/lib/models/gen/role_j.mli
diff --git a/lib/models/role_t.ml b/lib/models/gen/role_t.ml
index a4e83c5..a4e83c5 100644
--- a/lib/models/role_t.ml
+++ b/lib/models/gen/role_t.ml
diff --git a/lib/models/role_t.mli b/lib/models/gen/role_t.mli
index a4e83c5..a4e83c5 100644
--- a/lib/models/role_t.mli
+++ b/lib/models/gen/role_t.mli
diff --git a/lib/models/snowflake.atd b/lib/models/gen/snowflake.atd
index 98dc032..98dc032 100644
--- a/lib/models/snowflake.atd
+++ b/lib/models/gen/snowflake.atd
diff --git a/lib/models/snowflake_j.ml b/lib/models/gen/snowflake_j.ml
index 80f6f63..80f6f63 100644
--- a/lib/models/snowflake_j.ml
+++ b/lib/models/gen/snowflake_j.ml
diff --git a/lib/models/snowflake_j.mli b/lib/models/gen/snowflake_j.mli
index fed97a4..fed97a4 100644
--- a/lib/models/snowflake_j.mli
+++ b/lib/models/gen/snowflake_j.mli
diff --git a/lib/models/snowflake_t.ml b/lib/models/gen/snowflake_t.ml
index a7bdb08..a7bdb08 100644
--- a/lib/models/snowflake_t.ml
+++ b/lib/models/gen/snowflake_t.ml
diff --git a/lib/models/snowflake_t.mli b/lib/models/gen/snowflake_t.mli
index a7bdb08..a7bdb08 100644
--- a/lib/models/snowflake_t.mli
+++ b/lib/models/gen/snowflake_t.mli
diff --git a/lib/models/user.atd b/lib/models/gen/user.atd
index 106b3b0..106b3b0 100644
--- a/lib/models/user.atd
+++ b/lib/models/gen/user.atd
diff --git a/lib/models/user_j.ml b/lib/models/gen/user_j.ml
index 552a20d..552a20d 100644
--- a/lib/models/user_j.ml
+++ b/lib/models/gen/user_j.ml
diff --git a/lib/models/user_j.mli b/lib/models/gen/user_j.mli
index 576768e..576768e 100644
--- a/lib/models/user_j.mli
+++ b/lib/models/gen/user_j.mli
diff --git a/lib/models/user_t.ml b/lib/models/gen/user_t.ml
index 294cf0a..294cf0a 100644
--- a/lib/models/user_t.ml
+++ b/lib/models/gen/user_t.ml
diff --git a/lib/models/user_t.mli b/lib/models/gen/user_t.mli
index 294cf0a..294cf0a 100644
--- a/lib/models/user_t.mli
+++ b/lib/models/gen/user_t.mli
diff --git a/lib/models/guild.ml b/lib/models/guild.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/guild.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/member.ml b/lib/models/member.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/member.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/message.ml b/lib/models/message.ml
new file mode 100644
index 0000000..29148ee
--- /dev/null
+++ b/lib/models/message.ml
@@ -0,0 +1,43 @@
+module Make(Http : S.Http) = struct
+ open Message_t
+
+ let add_reaction msg (emoji:Emoji_t.t) =
+ let e = match emoji.id with
+ | Some i -> Printf.sprintf "%s:%d" emoji.name i
+ | None -> emoji.name
+ in
+ Http.create_reaction msg.channel_id msg.id e
+
+ let remove_reaction msg (emoji:Emoji_t.t) (user:User_t.t) =
+ let e = match emoji.id with
+ | Some i -> Printf.sprintf "%s:%d" emoji.name i
+ | None -> emoji.name
+ in
+ Http.delete_reaction msg.channel_id msg.id e user.id
+
+ let clear_reactions msg =
+ Http.delete_reactions msg.channel_id msg.id
+
+ let delete msg =
+ Http.delete_message msg.channel_id msg.id
+
+ let pin msg =
+ Http.pin_message msg.channel_id msg.id
+
+ let unpin msg =
+ Http.unpin_message msg.channel_id msg.id
+
+ let reply msg cont =
+ let rep = `Assoc [("content", `String cont)] in
+ Http.create_message msg.channel_id rep
+
+ let set_content msg cont =
+ Message_j.string_of_t { msg with content = cont; }
+ |> Yojson.Safe.from_string
+ |> Http.edit_message msg.channel_id msg.id
+
+ let set_embed msg embed =
+ Message_j.string_of_t { msg with embeds = [embed]; }
+ |> Yojson.Safe.from_string
+ |> Http.edit_message msg.channel_id msg.id
+end \ No newline at end of file
diff --git a/lib/models/message.mli b/lib/models/message.mli
new file mode 100644
index 0000000..6f6242f
--- /dev/null
+++ b/lib/models/message.mli
@@ -0,0 +1 @@
+module Make(Http : S.Http) : S.Message \ No newline at end of file
diff --git a/lib/models/presence.ml b/lib/models/presence.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/presence.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/reaction.ml b/lib/models/reaction.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/reaction.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/role.ml b/lib/models/role.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/role.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/snowflake.ml b/lib/models/snowflake.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/snowflake.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/models/user.ml b/lib/models/user.ml
new file mode 100644
index 0000000..36b7d4b
--- /dev/null
+++ b/lib/models/user.ml
@@ -0,0 +1,2 @@
+module Make(Http : S.Http) = struct
+end \ No newline at end of file
diff --git a/lib/s.ml b/lib/s.ml
index 32347cb..afe4209 100644
--- a/lib/s.ml
+++ b/lib/s.ml
@@ -4,57 +4,54 @@ module type Token = sig
val token : string
end
-module type Handler = sig
- val handle_event :
- 'a ->
- 'b ->
- unit
+module type Activity = sig end
+
+module type Attachment = sig end
+
+module type Ban = sig end
+
+module type Channel = sig end
+
+module type Embed = sig end
+
+module type Emoji = sig end
+
+module type Guild = sig end
+
+module type Member = sig
+ (* val add_role : Member_t.t -> Role_t.t -> Yojson.Safe.json Deferred.t
+ val remove_role : Member_t.t -> Role_t.t -> Yojson.Safe.json Deferred.t
+ val ban : ?reason:string -> ?days:int -> Member_t.t -> Yojson.Safe.json Deferred.t
+ val ban : ?reason:string -> Member_t.t -> Yojson.Safe.json Deferred.t
+ val kick : ?reason:string -> Member_t.t -> Yojson.Safe.json Deferred.t
+ val mute : Member_t.t -> Yojson.Safe.json Deferred.t
+ val deafen : Member_t.t -> Yojson.Safe.json Deferred.t
+ val unmute : Member_t.t -> Yojson.Safe.json Deferred.t
+ val undeafen : Member_t.t -> Yojson.Safe.json Deferred.t *)
end
-module type Dispatch = sig
- type dispatch_event =
- | HELLO of Yojson.Safe.json
- | READY of Yojson.Safe.json
- | RESUMED of Yojson.Safe.json
- | INVALID_SESSION of Yojson.Safe.json
- | CHANNEL_CREATE of Channel_t.t
- | CHANNEL_UPDATE of Channel_t.t
- | CHANNEL_DELETE of Channel_t.t
- | CHANNEL_PINS_UPDATE of Yojson.Safe.json
- | GUILD_CREATE of Guild_t.t
- | GUILD_UPDATE of Guild_t.t
- | GUILD_DELETE of Guild_t.t
- | GUILD_BAN_ADD of Ban_t.t
- | GUILD_BAN_REMOVE of Ban_t.t
- | GUILD_EMOJIS_UPDATE of Yojson.Safe.json
- | GUILD_INTEGRATIONS_UPDATE of Yojson.Safe.json
- | GUILD_MEMBER_ADD of Member_t.t
- | GUILD_MEMBER_REMOVE of Member_t.t
- | GUILD_MEMBER_UPDATE of Member_t.t
- | GUILD_MEMBERS_CHUNK of Member_t.t list
- | GUILD_ROLE_CREATE of Role_t.t (* * Guild.t *)
- | GUILD_ROLE_UPDATE of Role_t.t (* * Guild.t *)
- | GUILD_ROLE_DELETE of Role_t.t (* * Guild.t *)
- | MESSAGE_CREATE of Message_t.t
- | MESSAGE_UPDATE of Message_t.t
- | MESSAGE_DELETE of Message_t.t
- | MESSAGE_BULK_DELETE of Message_t.t list
- | MESSAGE_REACTION_ADD of (* Message.t * *) Reaction_t.t
- | MESSAGE_REACTION_REMOVE of (* Message.t * *) Reaction_t.t
- | MESSAGE_REACTION_REMOVE_ALL of (* Message.t * *) Reaction_t.t list
- | PRESENCE_UPDATE of Presence_t.t
- | TYPING_START of Yojson.Safe.json
- | USER_UPDATE of Yojson.Safe.json
- | VOICE_STATE_UPDATE of Yojson.Safe.json
- | VOICE_SERVER_UPDATE of Yojson.Safe.json
- | WEBHOOKS_UPDATE of Yojson.Safe.json
-
- exception Invalid_event of string
-
- val event_of_string : contents:string -> string -> dispatch_event
- val dispatch : ev: -> string -> unit
+module type Message = sig
+ val add_reaction : Message_t.t -> Emoji_t.t -> Yojson.Safe.json Deferred.t
+ val remove_reaction : Message_t.t -> Emoji_t.t -> User_t.t -> Yojson.Safe.json Deferred.t
+ val clear_reactions : Message_t.t -> Yojson.Safe.json Deferred.t
+ val delete : Message_t.t -> Yojson.Safe.json Deferred.t
+ val pin : Message_t.t -> Yojson.Safe.json Deferred.t
+ val unpin : Message_t.t -> Yojson.Safe.json Deferred.t
+ val reply : Message_t.t -> string -> Yojson.Safe.json Deferred.t
+ val set_content : Message_t.t -> string -> Yojson.Safe.json Deferred.t
+ val set_embed : Message_t.t -> Embed_t.t -> Yojson.Safe.json Deferred.t
end
+module type Presence = sig end
+
+module type Reaction = sig end
+
+module type Role = sig end
+
+module type Snowflake = sig end
+
+module type User = sig end
+
module type Http = sig
val token : string
@@ -80,163 +77,171 @@ module type Http = sig
end
(* Auto-generated signatures *)
- val get_gateway : unit -> Yojson.Safe.json Async.Deferred.t
- val get_gateway_bot : unit -> Yojson.Safe.json Async.Deferred.t
- val get_channel : string -> Yojson.Safe.json Async.Deferred.t
+ val get_gateway : unit -> Yojson.Safe.json Conduit_async.io
+ val get_gateway_bot : unit -> Yojson.Safe.json Conduit_async.io
+ val get_channel : int -> Yojson.Safe.json Conduit_async.io
val modify_channel :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val delete_channel : string -> Yojson.Safe.json Async.Deferred.t
- val get_messages : string -> Yojson.Safe.json Async.Deferred.t
- val get_message : string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val delete_channel : int -> Yojson.Safe.json Conduit_async.io
+ val get_messages : int -> Yojson.Safe.json Conduit_async.io
+ val get_message : int -> int -> Yojson.Safe.json Conduit_async.io
val create_message :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val create_reaction :
- string -> string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> string -> Yojson.Safe.json Conduit_async.io
val delete_own_reaction :
- string -> string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> string -> Yojson.Safe.json Conduit_async.io
val delete_reaction :
- string ->
- string -> string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> string -> int -> Yojson.Safe.json Conduit_async.io
val get_reactions :
- string -> string -> string -> Yojson.Safe.json Async.Deferred.t
- val delete_reactions :
- string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> string -> Yojson.Safe.json Conduit_async.io
+ val delete_reactions : int -> int -> Yojson.Safe.json Conduit_async.io
val edit_message :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val delete_message :
- string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val delete_message : int -> int -> Yojson.Safe.json Conduit_async.io
val bulk_delete :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val edit_channel_permissions :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val get_channel_invites : string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val get_channel_invites : int -> Yojson.Safe.json Conduit_async.io
val create_channel_invite :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val delete_channel_permission :
- string -> string -> Yojson.Safe.json Async.Deferred.t
- val broadcast_typing : string -> Yojson.Safe.json Async.Deferred.t
- val get_pinned_messages : string -> Yojson.Safe.json Async.Deferred.t
- val pin_message : string -> string -> Yojson.Safe.json Async.Deferred.t
- val unpin_message :
- string -> string -> Yojson.Safe.json Async.Deferred.t
- val group_recipient_add :
- string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json Conduit_async.io
+ val broadcast_typing : int -> Yojson.Safe.json Conduit_async.io
+ val get_pinned_messages : int -> Yojson.Safe.json Conduit_async.io
+ val pin_message : int -> int -> Yojson.Safe.json Conduit_async.io
+ val unpin_message : int -> int -> Yojson.Safe.json Conduit_async.io
+ val group_recipient_add : int -> int -> Yojson.Safe.json Conduit_async.io
val group_recipient_remove :
- string -> string -> Yojson.Safe.json Async.Deferred.t
- val get_emojis : string -> Yojson.Safe.json Async.Deferred.t
- val get_emoji : string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json Conduit_async.io
+ val get_emojis : int -> Yojson.Safe.json Conduit_async.io
+ val get_emoji : int -> int -> Yojson.Safe.json Conduit_async.io
val create_emoji :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val edit_emoji :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val delete_emoji : string -> string -> Yojson.Safe.json Async.Deferred.t
- val create_guild :
- Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val get_guild : string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val delete_emoji : int -> int -> Yojson.Safe.json Conduit_async.io
+ val create_guild : Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val get_guild : int -> Yojson.Safe.json Conduit_async.io
val edit_guild :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val delete_guild : string -> Yojson.Safe.json Async.Deferred.t
- val get_guild_channels : string -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val delete_guild : int -> Yojson.Safe.json Conduit_async.io
+ val get_guild_channels : int -> Yojson.Safe.json Conduit_async.io
val create_guild_channel :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val modify_guild_channel_positions :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val get_member : string -> string -> Yojson.Safe.json Async.Deferred.t
- val get_members : string -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val get_member : int -> int -> Yojson.Safe.json Conduit_async.io
+ val get_members : int -> Yojson.Safe.json Conduit_async.io
val add_member :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val edit_member :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val remove_member :
- string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val remove_member : int -> int -> Yojson.Safe.json Conduit_async.io
val change_nickname :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val add_member_role :
- string -> string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> int -> Yojson.Safe.json Conduit_async.io
val remove_member_role :
- string -> string -> string -> Yojson.Safe.json Async.Deferred.t
- val get_bans : string -> Yojson.Safe.json Async.Deferred.t
- val get_ban : string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> int -> Yojson.Safe.json Conduit_async.io
+ val get_bans : int -> Yojson.Safe.json Conduit_async.io
+ val get_ban : int -> int -> Yojson.Safe.json Conduit_async.io
val guild_ban_add :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val guild_ban_remove :
- string -> string -> Yojson.Safe.json Async.Deferred.t
- val get_roles : string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val guild_ban_remove : int -> int -> Yojson.Safe.json Conduit_async.io
+ val get_roles : int -> Yojson.Safe.json Conduit_async.io
val guild_role_add :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val guild_roles_edit :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val guild_role_edit :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val guild_role_remove :
- string -> string -> Yojson.Safe.json Async.Deferred.t
- val guild_prune_count : string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val guild_role_remove : int -> int -> Yojson.Safe.json Conduit_async.io
+ val guild_prune_count : int -> Yojson.Safe.json Conduit_async.io
val guild_prune_start :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val get_guild_voice_regions :
- string -> Yojson.Safe.json Async.Deferred.t
- val get_guild_invites : string -> Yojson.Safe.json Async.Deferred.t
- val get_integrations : string -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val get_guild_voice_regions : int -> Yojson.Safe.json Conduit_async.io
+ val get_guild_invites : int -> Yojson.Safe.json Conduit_async.io
+ val get_integrations : int -> Yojson.Safe.json Conduit_async.io
val add_integration :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val edit_integration :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val delete_integration :
- string -> string -> Yojson.Safe.json Async.Deferred.t
- val sync_integration :
- string -> string -> Yojson.Safe.json Async.Deferred.t
- val get_guild_embed : string -> Yojson.Safe.json Async.Deferred.t
+ int -> int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val delete_integration : int -> int -> Yojson.Safe.json Conduit_async.io
+ val sync_integration : int -> int -> Yojson.Safe.json Conduit_async.io
+ val get_guild_embed : int -> Yojson.Safe.json Conduit_async.io
val edit_guild_embed :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val get_vanity_url : string -> Yojson.Safe.json Async.Deferred.t
- val get_invite : string -> Yojson.Safe.json Async.Deferred.t
- val delete_invite : string -> Yojson.Safe.json Async.Deferred.t
- val get_current_user : unit -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val get_vanity_url : int -> Yojson.Safe.json Conduit_async.io
+ val get_invite : string -> Yojson.Safe.json Conduit_async.io
+ val delete_invite : string -> Yojson.Safe.json Conduit_async.io
+ val get_current_user : unit -> Yojson.Safe.json Conduit_async.io
val edit_current_user :
- Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val get_guilds : unit -> Yojson.Safe.json Async.Deferred.t
- val leave_guild : string -> Yojson.Safe.json Async.Deferred.t
- val get_private_channels : unit -> Yojson.Safe.json Async.Deferred.t
- val create_dm : Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val get_guilds : unit -> Yojson.Safe.json Conduit_async.io
+ val leave_guild : int -> Yojson.Safe.json Conduit_async.io
+ val get_private_channels : unit -> Yojson.Safe.json Conduit_async.io
+ val create_dm : Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val create_group_dm :
- Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val get_connections : unit -> Yojson.Safe.json Async.Deferred.t
- val get_user : string -> Yojson.Safe.json Async.Deferred.t
- val get_voice_regions : unit -> Yojson.Safe.json Async.Deferred.t
+ Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val get_connections : unit -> Yojson.Safe.json Conduit_async.io
+ val get_user : int -> Yojson.Safe.json Conduit_async.io
+ val get_voice_regions : unit -> Yojson.Safe.json Conduit_async.io
val create_webhook :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val get_channel_webhooks : string -> Yojson.Safe.json Async.Deferred.t
- val get_guild_webhooks : string -> Yojson.Safe.json Async.Deferred.t
- val get_webhook : string -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val get_channel_webhooks : int -> Yojson.Safe.json Conduit_async.io
+ val get_guild_webhooks : int -> Yojson.Safe.json Conduit_async.io
+ val get_webhook : int -> Yojson.Safe.json Conduit_async.io
val get_webhook_with_token :
- string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> string -> Yojson.Safe.json Conduit_async.io
val edit_webhook :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val edit_webhook_with_token :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
- val delete_webhook : string -> Yojson.Safe.json Async.Deferred.t
+ int -> string -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+ val delete_webhook : int -> Yojson.Safe.json Conduit_async.io
val delete_webhook_with_token :
- string -> string -> Yojson.Safe.json Async.Deferred.t
+ int -> string -> Yojson.Safe.json Conduit_async.io
val execute_webhook :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> string -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val execute_slack_webhook :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> string -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val execute_git_webhook :
- string ->
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> string -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
val get_audit_logs :
- string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
+ int -> Yojson.Safe.json -> Yojson.Safe.json Conduit_async.io
+end
+
+module type Models = sig
+ module Http : Http
+ module Activity : Activity
+ module Attachment : Attachment
+ module Ban : Ban
+ module Channel : Channel
+ module Embed : Embed
+ module Emoji : Emoji
+ module Guild : Guild
+ module Member : Member
+ module Message : Message
+ module Presence : Presence
+ module Reaction : Reaction
+ module Role : Role
+ module Snowflake : Snowflake
+ module User : User
+end
+
+module type Handler = sig
+ val handle_event :
+ Event.t ->
+ unit
+end
+
+module type Handler_f = sig
+ module Make(Models : Models) : Handler
+end
+
+module type Dispatch = sig
+ val dispatch : ev:string -> string -> unit
end
module type Sharder = sig
diff --git a/lib/sharder.ml b/lib/sharder.ml
index 7366fd9..98df132 100644
--- a/lib/sharder.ml
+++ b/lib/sharder.ml
@@ -70,7 +70,6 @@ module Make(H : S.Http)(D : S.Dispatch) : S.Sharder = struct
if t = "READY" then begin
Ivar.fill_if_empty shard.ready ()
end;
- print_endline @@ Yojson.Safe.pretty_to_string data;
D.dispatch ~ev:t (Yojson.Safe.to_string data);
return { shard with
seq = seq;