aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/bot.ml3
-rw-r--r--disml.install174
-rw-r--r--disml.opam6
-rw-r--r--lib/client_options.mli1
-rw-r--r--lib/dispatch.mli19
-rw-r--r--lib/event.ml72
-rw-r--r--lib/models/channel.ml2
-rw-r--r--lib/models/channel.mli24
-rw-r--r--lib/models/embed.ml18
-rw-r--r--lib/models/message.ml20
-rw-r--r--lib/models/message.mli7
11 files changed, 158 insertions, 188 deletions
diff --git a/bin/bot.ml b/bin/bot.ml
index a42fd16..05d836d 100644
--- a/bin/bot.ml
+++ b/bin/bot.ml
@@ -29,6 +29,9 @@ let check_command (msg:Message.t) =
|> List.fold ~init:0 ~f:(+)
|> Int.to_string in
Message.reply msg list >>> ignore
+ | "!embed" ->
+ let embed = { Embed.default with description = Some "Hello World!" } in
+ Message.reply_with ~embed msg >>> ignore
| _ -> ()
let main () =
diff --git a/disml.install b/disml.install
index 71598ec..0ab6369 100644
--- a/disml.install
+++ b/disml.install
@@ -1,26 +1,16 @@
lib: [
"_build/install/default/lib/disml/META" {"META"}
"_build/install/default/lib/disml/activity.ml" {"activity.ml"}
- "_build/install/default/lib/disml/activity_j.ml" {"activity_j.ml"}
- "_build/install/default/lib/disml/activity_j.mli" {"activity_j.mli"}
- "_build/install/default/lib/disml/activity_t.ml" {"activity_t.ml"}
- "_build/install/default/lib/disml/activity_t.mli" {"activity_t.mli"}
"_build/install/default/lib/disml/attachment.ml" {"attachment.ml"}
- "_build/install/default/lib/disml/attachment_j.ml" {"attachment_j.ml"}
- "_build/install/default/lib/disml/attachment_j.mli" {"attachment_j.mli"}
- "_build/install/default/lib/disml/attachment_t.ml" {"attachment_t.ml"}
- "_build/install/default/lib/disml/attachment_t.mli" {"attachment_t.mli"}
"_build/install/default/lib/disml/ban.ml" {"ban.ml"}
- "_build/install/default/lib/disml/ban_j.ml" {"ban_j.ml"}
- "_build/install/default/lib/disml/ban_j.mli" {"ban_j.mli"}
+ "_build/install/default/lib/disml/ban.mli" {"ban.mli"}
"_build/install/default/lib/disml/ban_t.ml" {"ban_t.ml"}
- "_build/install/default/lib/disml/ban_t.mli" {"ban_t.mli"}
"_build/install/default/lib/disml/channel.ml" {"channel.ml"}
- "_build/install/default/lib/disml/channel_j.ml" {"channel_j.ml"}
- "_build/install/default/lib/disml/channel_j.mli" {"channel_j.mli"}
+ "_build/install/default/lib/disml/channel.mli" {"channel.mli"}
"_build/install/default/lib/disml/channel_t.ml" {"channel_t.ml"}
- "_build/install/default/lib/disml/channel_t.mli" {"channel_t.mli"}
"_build/install/default/lib/disml/client.ml" {"client.ml"}
+ "_build/install/default/lib/disml/client_options.ml" {"client_options.ml"}
+ "_build/install/default/lib/disml/client_options.mli" {"client_options.mli"}
"_build/install/default/lib/disml/disml.a" {"disml.a"}
"_build/install/default/lib/disml/disml.cma" {"disml.cma"}
"_build/install/default/lib/disml/disml.cmi" {"disml.cmi"}
@@ -33,50 +23,30 @@ lib: [
"_build/install/default/lib/disml/disml__Activity.cmi" {"disml__Activity.cmi"}
"_build/install/default/lib/disml/disml__Activity.cmt" {"disml__Activity.cmt"}
"_build/install/default/lib/disml/disml__Activity.cmx" {"disml__Activity.cmx"}
- "_build/install/default/lib/disml/disml__Activity_j.cmi" {"disml__Activity_j.cmi"}
- "_build/install/default/lib/disml/disml__Activity_j.cmt" {"disml__Activity_j.cmt"}
- "_build/install/default/lib/disml/disml__Activity_j.cmti" {"disml__Activity_j.cmti"}
- "_build/install/default/lib/disml/disml__Activity_j.cmx" {"disml__Activity_j.cmx"}
- "_build/install/default/lib/disml/disml__Activity_t.cmi" {"disml__Activity_t.cmi"}
- "_build/install/default/lib/disml/disml__Activity_t.cmt" {"disml__Activity_t.cmt"}
- "_build/install/default/lib/disml/disml__Activity_t.cmti" {"disml__Activity_t.cmti"}
- "_build/install/default/lib/disml/disml__Activity_t.cmx" {"disml__Activity_t.cmx"}
"_build/install/default/lib/disml/disml__Attachment.cmi" {"disml__Attachment.cmi"}
"_build/install/default/lib/disml/disml__Attachment.cmt" {"disml__Attachment.cmt"}
"_build/install/default/lib/disml/disml__Attachment.cmx" {"disml__Attachment.cmx"}
- "_build/install/default/lib/disml/disml__Attachment_j.cmi" {"disml__Attachment_j.cmi"}
- "_build/install/default/lib/disml/disml__Attachment_j.cmt" {"disml__Attachment_j.cmt"}
- "_build/install/default/lib/disml/disml__Attachment_j.cmti" {"disml__Attachment_j.cmti"}
- "_build/install/default/lib/disml/disml__Attachment_j.cmx" {"disml__Attachment_j.cmx"}
- "_build/install/default/lib/disml/disml__Attachment_t.cmi" {"disml__Attachment_t.cmi"}
- "_build/install/default/lib/disml/disml__Attachment_t.cmt" {"disml__Attachment_t.cmt"}
- "_build/install/default/lib/disml/disml__Attachment_t.cmti" {"disml__Attachment_t.cmti"}
- "_build/install/default/lib/disml/disml__Attachment_t.cmx" {"disml__Attachment_t.cmx"}
"_build/install/default/lib/disml/disml__Ban.cmi" {"disml__Ban.cmi"}
"_build/install/default/lib/disml/disml__Ban.cmt" {"disml__Ban.cmt"}
+ "_build/install/default/lib/disml/disml__Ban.cmti" {"disml__Ban.cmti"}
"_build/install/default/lib/disml/disml__Ban.cmx" {"disml__Ban.cmx"}
- "_build/install/default/lib/disml/disml__Ban_j.cmi" {"disml__Ban_j.cmi"}
- "_build/install/default/lib/disml/disml__Ban_j.cmt" {"disml__Ban_j.cmt"}
- "_build/install/default/lib/disml/disml__Ban_j.cmti" {"disml__Ban_j.cmti"}
- "_build/install/default/lib/disml/disml__Ban_j.cmx" {"disml__Ban_j.cmx"}
"_build/install/default/lib/disml/disml__Ban_t.cmi" {"disml__Ban_t.cmi"}
"_build/install/default/lib/disml/disml__Ban_t.cmt" {"disml__Ban_t.cmt"}
- "_build/install/default/lib/disml/disml__Ban_t.cmti" {"disml__Ban_t.cmti"}
"_build/install/default/lib/disml/disml__Ban_t.cmx" {"disml__Ban_t.cmx"}
"_build/install/default/lib/disml/disml__Channel.cmi" {"disml__Channel.cmi"}
"_build/install/default/lib/disml/disml__Channel.cmt" {"disml__Channel.cmt"}
+ "_build/install/default/lib/disml/disml__Channel.cmti" {"disml__Channel.cmti"}
"_build/install/default/lib/disml/disml__Channel.cmx" {"disml__Channel.cmx"}
- "_build/install/default/lib/disml/disml__Channel_j.cmi" {"disml__Channel_j.cmi"}
- "_build/install/default/lib/disml/disml__Channel_j.cmt" {"disml__Channel_j.cmt"}
- "_build/install/default/lib/disml/disml__Channel_j.cmti" {"disml__Channel_j.cmti"}
- "_build/install/default/lib/disml/disml__Channel_j.cmx" {"disml__Channel_j.cmx"}
"_build/install/default/lib/disml/disml__Channel_t.cmi" {"disml__Channel_t.cmi"}
"_build/install/default/lib/disml/disml__Channel_t.cmt" {"disml__Channel_t.cmt"}
- "_build/install/default/lib/disml/disml__Channel_t.cmti" {"disml__Channel_t.cmti"}
"_build/install/default/lib/disml/disml__Channel_t.cmx" {"disml__Channel_t.cmx"}
"_build/install/default/lib/disml/disml__Client.cmi" {"disml__Client.cmi"}
"_build/install/default/lib/disml/disml__Client.cmt" {"disml__Client.cmt"}
"_build/install/default/lib/disml/disml__Client.cmx" {"disml__Client.cmx"}
+ "_build/install/default/lib/disml/disml__Client_options.cmi" {"disml__Client_options.cmi"}
+ "_build/install/default/lib/disml/disml__Client_options.cmt" {"disml__Client_options.cmt"}
+ "_build/install/default/lib/disml/disml__Client_options.cmti" {"disml__Client_options.cmti"}
+ "_build/install/default/lib/disml/disml__Client_options.cmx" {"disml__Client_options.cmx"}
"_build/install/default/lib/disml/disml__Dispatch.cmi" {"disml__Dispatch.cmi"}
"_build/install/default/lib/disml/disml__Dispatch.cmt" {"disml__Dispatch.cmt"}
"_build/install/default/lib/disml/disml__Dispatch.cmti" {"disml__Dispatch.cmti"}
@@ -84,41 +54,22 @@ lib: [
"_build/install/default/lib/disml/disml__Embed.cmi" {"disml__Embed.cmi"}
"_build/install/default/lib/disml/disml__Embed.cmt" {"disml__Embed.cmt"}
"_build/install/default/lib/disml/disml__Embed.cmx" {"disml__Embed.cmx"}
- "_build/install/default/lib/disml/disml__Embed_j.cmi" {"disml__Embed_j.cmi"}
- "_build/install/default/lib/disml/disml__Embed_j.cmt" {"disml__Embed_j.cmt"}
- "_build/install/default/lib/disml/disml__Embed_j.cmti" {"disml__Embed_j.cmti"}
- "_build/install/default/lib/disml/disml__Embed_j.cmx" {"disml__Embed_j.cmx"}
- "_build/install/default/lib/disml/disml__Embed_t.cmi" {"disml__Embed_t.cmi"}
- "_build/install/default/lib/disml/disml__Embed_t.cmt" {"disml__Embed_t.cmt"}
- "_build/install/default/lib/disml/disml__Embed_t.cmti" {"disml__Embed_t.cmti"}
- "_build/install/default/lib/disml/disml__Embed_t.cmx" {"disml__Embed_t.cmx"}
"_build/install/default/lib/disml/disml__Emoji.cmi" {"disml__Emoji.cmi"}
"_build/install/default/lib/disml/disml__Emoji.cmt" {"disml__Emoji.cmt"}
"_build/install/default/lib/disml/disml__Emoji.cmx" {"disml__Emoji.cmx"}
- "_build/install/default/lib/disml/disml__Emoji_j.cmi" {"disml__Emoji_j.cmi"}
- "_build/install/default/lib/disml/disml__Emoji_j.cmt" {"disml__Emoji_j.cmt"}
- "_build/install/default/lib/disml/disml__Emoji_j.cmti" {"disml__Emoji_j.cmti"}
- "_build/install/default/lib/disml/disml__Emoji_j.cmx" {"disml__Emoji_j.cmx"}
- "_build/install/default/lib/disml/disml__Emoji_t.cmi" {"disml__Emoji_t.cmi"}
- "_build/install/default/lib/disml/disml__Emoji_t.cmt" {"disml__Emoji_t.cmt"}
- "_build/install/default/lib/disml/disml__Emoji_t.cmti" {"disml__Emoji_t.cmti"}
- "_build/install/default/lib/disml/disml__Emoji_t.cmx" {"disml__Emoji_t.cmx"}
"_build/install/default/lib/disml/disml__Endpoints.cmi" {"disml__Endpoints.cmi"}
"_build/install/default/lib/disml/disml__Endpoints.cmt" {"disml__Endpoints.cmt"}
+ "_build/install/default/lib/disml/disml__Endpoints.cmti" {"disml__Endpoints.cmti"}
"_build/install/default/lib/disml/disml__Endpoints.cmx" {"disml__Endpoints.cmx"}
"_build/install/default/lib/disml/disml__Event.cmi" {"disml__Event.cmi"}
"_build/install/default/lib/disml/disml__Event.cmt" {"disml__Event.cmt"}
"_build/install/default/lib/disml/disml__Event.cmx" {"disml__Event.cmx"}
"_build/install/default/lib/disml/disml__Guild.cmi" {"disml__Guild.cmi"}
"_build/install/default/lib/disml/disml__Guild.cmt" {"disml__Guild.cmt"}
+ "_build/install/default/lib/disml/disml__Guild.cmti" {"disml__Guild.cmti"}
"_build/install/default/lib/disml/disml__Guild.cmx" {"disml__Guild.cmx"}
- "_build/install/default/lib/disml/disml__Guild_j.cmi" {"disml__Guild_j.cmi"}
- "_build/install/default/lib/disml/disml__Guild_j.cmt" {"disml__Guild_j.cmt"}
- "_build/install/default/lib/disml/disml__Guild_j.cmti" {"disml__Guild_j.cmti"}
- "_build/install/default/lib/disml/disml__Guild_j.cmx" {"disml__Guild_j.cmx"}
"_build/install/default/lib/disml/disml__Guild_t.cmi" {"disml__Guild_t.cmi"}
"_build/install/default/lib/disml/disml__Guild_t.cmt" {"disml__Guild_t.cmt"}
- "_build/install/default/lib/disml/disml__Guild_t.cmti" {"disml__Guild_t.cmti"}
"_build/install/default/lib/disml/disml__Guild_t.cmx" {"disml__Guild_t.cmx"}
"_build/install/default/lib/disml/disml__Http.cmi" {"disml__Http.cmi"}
"_build/install/default/lib/disml/disml__Http.cmt" {"disml__Http.cmt"}
@@ -126,72 +77,43 @@ lib: [
"_build/install/default/lib/disml/disml__Http.cmx" {"disml__Http.cmx"}
"_build/install/default/lib/disml/disml__Member.cmi" {"disml__Member.cmi"}
"_build/install/default/lib/disml/disml__Member.cmt" {"disml__Member.cmt"}
+ "_build/install/default/lib/disml/disml__Member.cmti" {"disml__Member.cmti"}
"_build/install/default/lib/disml/disml__Member.cmx" {"disml__Member.cmx"}
- "_build/install/default/lib/disml/disml__Member_j.cmi" {"disml__Member_j.cmi"}
- "_build/install/default/lib/disml/disml__Member_j.cmt" {"disml__Member_j.cmt"}
- "_build/install/default/lib/disml/disml__Member_j.cmti" {"disml__Member_j.cmti"}
- "_build/install/default/lib/disml/disml__Member_j.cmx" {"disml__Member_j.cmx"}
"_build/install/default/lib/disml/disml__Member_t.cmi" {"disml__Member_t.cmi"}
"_build/install/default/lib/disml/disml__Member_t.cmt" {"disml__Member_t.cmt"}
- "_build/install/default/lib/disml/disml__Member_t.cmti" {"disml__Member_t.cmti"}
"_build/install/default/lib/disml/disml__Member_t.cmx" {"disml__Member_t.cmx"}
"_build/install/default/lib/disml/disml__Message.cmi" {"disml__Message.cmi"}
"_build/install/default/lib/disml/disml__Message.cmt" {"disml__Message.cmt"}
+ "_build/install/default/lib/disml/disml__Message.cmti" {"disml__Message.cmti"}
"_build/install/default/lib/disml/disml__Message.cmx" {"disml__Message.cmx"}
- "_build/install/default/lib/disml/disml__Message_j.cmi" {"disml__Message_j.cmi"}
- "_build/install/default/lib/disml/disml__Message_j.cmt" {"disml__Message_j.cmt"}
- "_build/install/default/lib/disml/disml__Message_j.cmti" {"disml__Message_j.cmti"}
- "_build/install/default/lib/disml/disml__Message_j.cmx" {"disml__Message_j.cmx"}
"_build/install/default/lib/disml/disml__Message_t.cmi" {"disml__Message_t.cmi"}
"_build/install/default/lib/disml/disml__Message_t.cmt" {"disml__Message_t.cmt"}
- "_build/install/default/lib/disml/disml__Message_t.cmti" {"disml__Message_t.cmti"}
"_build/install/default/lib/disml/disml__Message_t.cmx" {"disml__Message_t.cmx"}
- "_build/install/default/lib/disml/disml__Models.cmi" {"disml__Models.cmi"}
- "_build/install/default/lib/disml/disml__Models.cmt" {"disml__Models.cmt"}
- "_build/install/default/lib/disml/disml__Models.cmti" {"disml__Models.cmti"}
- "_build/install/default/lib/disml/disml__Models.cmx" {"disml__Models.cmx"}
"_build/install/default/lib/disml/disml__Opcode.cmi" {"disml__Opcode.cmi"}
"_build/install/default/lib/disml/disml__Opcode.cmt" {"disml__Opcode.cmt"}
+ "_build/install/default/lib/disml/disml__Opcode.cmti" {"disml__Opcode.cmti"}
"_build/install/default/lib/disml/disml__Opcode.cmx" {"disml__Opcode.cmx"}
"_build/install/default/lib/disml/disml__Presence.cmi" {"disml__Presence.cmi"}
"_build/install/default/lib/disml/disml__Presence.cmt" {"disml__Presence.cmt"}
"_build/install/default/lib/disml/disml__Presence.cmx" {"disml__Presence.cmx"}
- "_build/install/default/lib/disml/disml__Presence_j.cmi" {"disml__Presence_j.cmi"}
- "_build/install/default/lib/disml/disml__Presence_j.cmt" {"disml__Presence_j.cmt"}
- "_build/install/default/lib/disml/disml__Presence_j.cmti" {"disml__Presence_j.cmti"}
- "_build/install/default/lib/disml/disml__Presence_j.cmx" {"disml__Presence_j.cmx"}
- "_build/install/default/lib/disml/disml__Presence_t.cmi" {"disml__Presence_t.cmi"}
- "_build/install/default/lib/disml/disml__Presence_t.cmt" {"disml__Presence_t.cmt"}
- "_build/install/default/lib/disml/disml__Presence_t.cmti" {"disml__Presence_t.cmti"}
- "_build/install/default/lib/disml/disml__Presence_t.cmx" {"disml__Presence_t.cmx"}
"_build/install/default/lib/disml/disml__Reaction.cmi" {"disml__Reaction.cmi"}
"_build/install/default/lib/disml/disml__Reaction.cmt" {"disml__Reaction.cmt"}
+ "_build/install/default/lib/disml/disml__Reaction.cmti" {"disml__Reaction.cmti"}
"_build/install/default/lib/disml/disml__Reaction.cmx" {"disml__Reaction.cmx"}
- "_build/install/default/lib/disml/disml__Reaction_j.cmi" {"disml__Reaction_j.cmi"}
- "_build/install/default/lib/disml/disml__Reaction_j.cmt" {"disml__Reaction_j.cmt"}
- "_build/install/default/lib/disml/disml__Reaction_j.cmti" {"disml__Reaction_j.cmti"}
- "_build/install/default/lib/disml/disml__Reaction_j.cmx" {"disml__Reaction_j.cmx"}
"_build/install/default/lib/disml/disml__Reaction_t.cmi" {"disml__Reaction_t.cmi"}
"_build/install/default/lib/disml/disml__Reaction_t.cmt" {"disml__Reaction_t.cmt"}
- "_build/install/default/lib/disml/disml__Reaction_t.cmti" {"disml__Reaction_t.cmti"}
"_build/install/default/lib/disml/disml__Reaction_t.cmx" {"disml__Reaction_t.cmx"}
"_build/install/default/lib/disml/disml__Rl.cmi" {"disml__Rl.cmi"}
"_build/install/default/lib/disml/disml__Rl.cmt" {"disml__Rl.cmt"}
+ "_build/install/default/lib/disml/disml__Rl.cmti" {"disml__Rl.cmti"}
"_build/install/default/lib/disml/disml__Rl.cmx" {"disml__Rl.cmx"}
"_build/install/default/lib/disml/disml__Role.cmi" {"disml__Role.cmi"}
"_build/install/default/lib/disml/disml__Role.cmt" {"disml__Role.cmt"}
+ "_build/install/default/lib/disml/disml__Role.cmti" {"disml__Role.cmti"}
"_build/install/default/lib/disml/disml__Role.cmx" {"disml__Role.cmx"}
- "_build/install/default/lib/disml/disml__Role_j.cmi" {"disml__Role_j.cmi"}
- "_build/install/default/lib/disml/disml__Role_j.cmt" {"disml__Role_j.cmt"}
- "_build/install/default/lib/disml/disml__Role_j.cmti" {"disml__Role_j.cmti"}
- "_build/install/default/lib/disml/disml__Role_j.cmx" {"disml__Role_j.cmx"}
"_build/install/default/lib/disml/disml__Role_t.cmi" {"disml__Role_t.cmi"}
"_build/install/default/lib/disml/disml__Role_t.cmt" {"disml__Role_t.cmt"}
- "_build/install/default/lib/disml/disml__Role_t.cmti" {"disml__Role_t.cmti"}
"_build/install/default/lib/disml/disml__Role_t.cmx" {"disml__Role_t.cmx"}
- "_build/install/default/lib/disml/disml__S.cmi" {"disml__S.cmi"}
- "_build/install/default/lib/disml/disml__S.cmt" {"disml__S.cmt"}
- "_build/install/default/lib/disml/disml__S.cmx" {"disml__S.cmx"}
"_build/install/default/lib/disml/disml__Sharder.cmi" {"disml__Sharder.cmi"}
"_build/install/default/lib/disml/disml__Sharder.cmt" {"disml__Sharder.cmt"}
"_build/install/default/lib/disml/disml__Sharder.cmti" {"disml__Sharder.cmti"}
@@ -199,89 +121,49 @@ lib: [
"_build/install/default/lib/disml/disml__Snowflake.cmi" {"disml__Snowflake.cmi"}
"_build/install/default/lib/disml/disml__Snowflake.cmt" {"disml__Snowflake.cmt"}
"_build/install/default/lib/disml/disml__Snowflake.cmx" {"disml__Snowflake.cmx"}
- "_build/install/default/lib/disml/disml__Snowflake_j.cmi" {"disml__Snowflake_j.cmi"}
- "_build/install/default/lib/disml/disml__Snowflake_j.cmt" {"disml__Snowflake_j.cmt"}
- "_build/install/default/lib/disml/disml__Snowflake_j.cmti" {"disml__Snowflake_j.cmti"}
- "_build/install/default/lib/disml/disml__Snowflake_j.cmx" {"disml__Snowflake_j.cmx"}
- "_build/install/default/lib/disml/disml__Snowflake_t.cmi" {"disml__Snowflake_t.cmi"}
- "_build/install/default/lib/disml/disml__Snowflake_t.cmt" {"disml__Snowflake_t.cmt"}
- "_build/install/default/lib/disml/disml__Snowflake_t.cmti" {"disml__Snowflake_t.cmti"}
- "_build/install/default/lib/disml/disml__Snowflake_t.cmx" {"disml__Snowflake_t.cmx"}
"_build/install/default/lib/disml/disml__User.cmi" {"disml__User.cmi"}
"_build/install/default/lib/disml/disml__User.cmt" {"disml__User.cmt"}
+ "_build/install/default/lib/disml/disml__User.cmti" {"disml__User.cmti"}
"_build/install/default/lib/disml/disml__User.cmx" {"disml__User.cmx"}
- "_build/install/default/lib/disml/disml__User_j.cmi" {"disml__User_j.cmi"}
- "_build/install/default/lib/disml/disml__User_j.cmt" {"disml__User_j.cmt"}
- "_build/install/default/lib/disml/disml__User_j.cmti" {"disml__User_j.cmti"}
- "_build/install/default/lib/disml/disml__User_j.cmx" {"disml__User_j.cmx"}
"_build/install/default/lib/disml/disml__User_t.cmi" {"disml__User_t.cmi"}
"_build/install/default/lib/disml/disml__User_t.cmt" {"disml__User_t.cmt"}
- "_build/install/default/lib/disml/disml__User_t.cmti" {"disml__User_t.cmti"}
"_build/install/default/lib/disml/disml__User_t.cmx" {"disml__User_t.cmx"}
"_build/install/default/lib/disml/dispatch.ml" {"dispatch.ml"}
"_build/install/default/lib/disml/dispatch.mli" {"dispatch.mli"}
"_build/install/default/lib/disml/embed.ml" {"embed.ml"}
- "_build/install/default/lib/disml/embed_j.ml" {"embed_j.ml"}
- "_build/install/default/lib/disml/embed_j.mli" {"embed_j.mli"}
- "_build/install/default/lib/disml/embed_t.ml" {"embed_t.ml"}
- "_build/install/default/lib/disml/embed_t.mli" {"embed_t.mli"}
"_build/install/default/lib/disml/emoji.ml" {"emoji.ml"}
- "_build/install/default/lib/disml/emoji_j.ml" {"emoji_j.ml"}
- "_build/install/default/lib/disml/emoji_j.mli" {"emoji_j.mli"}
- "_build/install/default/lib/disml/emoji_t.ml" {"emoji_t.ml"}
- "_build/install/default/lib/disml/emoji_t.mli" {"emoji_t.mli"}
"_build/install/default/lib/disml/endpoints.ml" {"endpoints.ml"}
+ "_build/install/default/lib/disml/endpoints.mli" {"endpoints.mli"}
"_build/install/default/lib/disml/event.ml" {"event.ml"}
"_build/install/default/lib/disml/guild.ml" {"guild.ml"}
- "_build/install/default/lib/disml/guild_j.ml" {"guild_j.ml"}
- "_build/install/default/lib/disml/guild_j.mli" {"guild_j.mli"}
+ "_build/install/default/lib/disml/guild.mli" {"guild.mli"}
"_build/install/default/lib/disml/guild_t.ml" {"guild_t.ml"}
- "_build/install/default/lib/disml/guild_t.mli" {"guild_t.mli"}
"_build/install/default/lib/disml/http.ml" {"http.ml"}
"_build/install/default/lib/disml/http.mli" {"http.mli"}
"_build/install/default/lib/disml/member.ml" {"member.ml"}
- "_build/install/default/lib/disml/member_j.ml" {"member_j.ml"}
- "_build/install/default/lib/disml/member_j.mli" {"member_j.mli"}
+ "_build/install/default/lib/disml/member.mli" {"member.mli"}
"_build/install/default/lib/disml/member_t.ml" {"member_t.ml"}
- "_build/install/default/lib/disml/member_t.mli" {"member_t.mli"}
"_build/install/default/lib/disml/message.ml" {"message.ml"}
- "_build/install/default/lib/disml/message_j.ml" {"message_j.ml"}
- "_build/install/default/lib/disml/message_j.mli" {"message_j.mli"}
+ "_build/install/default/lib/disml/message.mli" {"message.mli"}
"_build/install/default/lib/disml/message_t.ml" {"message_t.ml"}
- "_build/install/default/lib/disml/message_t.mli" {"message_t.mli"}
- "_build/install/default/lib/disml/models.ml" {"models.ml"}
- "_build/install/default/lib/disml/models.mli" {"models.mli"}
"_build/install/default/lib/disml/opam" {"opam"}
"_build/install/default/lib/disml/opcode.ml" {"opcode.ml"}
+ "_build/install/default/lib/disml/opcode.mli" {"opcode.mli"}
"_build/install/default/lib/disml/presence.ml" {"presence.ml"}
- "_build/install/default/lib/disml/presence_j.ml" {"presence_j.ml"}
- "_build/install/default/lib/disml/presence_j.mli" {"presence_j.mli"}
- "_build/install/default/lib/disml/presence_t.ml" {"presence_t.ml"}
- "_build/install/default/lib/disml/presence_t.mli" {"presence_t.mli"}
"_build/install/default/lib/disml/reaction.ml" {"reaction.ml"}
- "_build/install/default/lib/disml/reaction_j.ml" {"reaction_j.ml"}
- "_build/install/default/lib/disml/reaction_j.mli" {"reaction_j.mli"}
+ "_build/install/default/lib/disml/reaction.mli" {"reaction.mli"}
"_build/install/default/lib/disml/reaction_t.ml" {"reaction_t.ml"}
- "_build/install/default/lib/disml/reaction_t.mli" {"reaction_t.mli"}
"_build/install/default/lib/disml/rl.ml" {"rl.ml"}
+ "_build/install/default/lib/disml/rl.mli" {"rl.mli"}
"_build/install/default/lib/disml/role.ml" {"role.ml"}
- "_build/install/default/lib/disml/role_j.ml" {"role_j.ml"}
- "_build/install/default/lib/disml/role_j.mli" {"role_j.mli"}
+ "_build/install/default/lib/disml/role.mli" {"role.mli"}
"_build/install/default/lib/disml/role_t.ml" {"role_t.ml"}
- "_build/install/default/lib/disml/role_t.mli" {"role_t.mli"}
- "_build/install/default/lib/disml/s.ml" {"s.ml"}
"_build/install/default/lib/disml/sharder.ml" {"sharder.ml"}
"_build/install/default/lib/disml/sharder.mli" {"sharder.mli"}
"_build/install/default/lib/disml/snowflake.ml" {"snowflake.ml"}
- "_build/install/default/lib/disml/snowflake_j.ml" {"snowflake_j.ml"}
- "_build/install/default/lib/disml/snowflake_j.mli" {"snowflake_j.mli"}
- "_build/install/default/lib/disml/snowflake_t.ml" {"snowflake_t.ml"}
- "_build/install/default/lib/disml/snowflake_t.mli" {"snowflake_t.mli"}
"_build/install/default/lib/disml/user.ml" {"user.ml"}
- "_build/install/default/lib/disml/user_j.ml" {"user_j.ml"}
- "_build/install/default/lib/disml/user_j.mli" {"user_j.mli"}
+ "_build/install/default/lib/disml/user.mli" {"user.mli"}
"_build/install/default/lib/disml/user_t.ml" {"user_t.ml"}
- "_build/install/default/lib/disml/user_t.mli" {"user_t.mli"}
]
doc: [
"_build/install/default/doc/disml/LICENSE"
diff --git a/disml.opam b/disml.opam
index eb73dba..a81b268 100644
--- a/disml.opam
+++ b/disml.opam
@@ -4,10 +4,10 @@ version: "0.2.1"
maintainer: "Adelyn Breedlove <[email protected]>"
authors: "Adelyn Breedlove <[email protected]>"
license: "MIT"
-homepage: "https://github.com/Mishio595/disml"
+homepage: "https://gitlab.com/Mishio595/disml"
doc: "https://mishio595.github.io/disml/index.html"
-dev-repo: "git+https://github.com/Mishio595/disml"
-bug-reports: "https://github.com/Mishio595/disml/issues"
+dev-repo: "git+https://gitlab.com/Mishio595/disml"
+bug-reports: "https://gitlab.com/Mishio595/disml/issues"
tags: ["discord"]
synopsis: "An OCaml library for interfacing with the Discord API"
description: """
diff --git a/lib/client_options.mli b/lib/client_options.mli
index ef94691..ee46aae 100644
--- a/lib/client_options.mli
+++ b/lib/client_options.mli
@@ -1 +1,2 @@
+(** Token that is set when using {!Client.start} *)
val token : string ref \ No newline at end of file
diff --git a/lib/dispatch.mli b/lib/dispatch.mli
index 51d94b4..0442c19 100644
--- a/lib/dispatch.mli
+++ b/lib/dispatch.mli
@@ -1,3 +1,22 @@
+(** Used to store dispatch callbacks. Each event can only have one callback registered at a time.
+ These should be accessed through their re-export in {!Client}.
+ {3 Examples}
+ [Client.ready := (fun _ -> print_endline "Shard is Ready!")]
+
+ [Client.guild_create := (fun guild -> print_endline guild.name)]
+
+ {[
+ open Core
+ open Disml
+
+ let check_command (msg : Message.t) =
+ if String.is_prefix ~prefix:"!ping" msg.content then
+ Message.reply msg "Pong!" >>> ignore
+
+ Client.message_create := check_command
+ ]}
+*)
+
(** Dispatched when connecting to the gateway, most users will have no use for this. *)
val hello : (Yojson.Safe.json -> unit) ref
diff --git a/lib/event.ml b/lib/event.ml
index 614c485..7f843d7 100644
--- a/lib/event.ml
+++ b/lib/event.ml
@@ -78,41 +78,41 @@ let event_of_yojson ~contents t = match t with
| s -> raise @@ Invalid_event s
let dispatch ev = match ev with
-| HELLO d -> !Dispatch.hello d
-| READY d -> !Dispatch.ready d
-| RESUMED d -> !Dispatch.resumed d
-| INVALID_SESSION d -> !Dispatch.invalid_session d
-| CHANNEL_CREATE d -> !Dispatch.channel_create d
-| CHANNEL_UPDATE d -> !Dispatch.channel_update d
-| CHANNEL_DELETE d -> !Dispatch.channel_delete d
-| CHANNEL_PINS_UPDATE d -> !Dispatch.channel_pins_update d
-| GUILD_CREATE d -> !Dispatch.guild_create d
-| GUILD_UPDATE d -> !Dispatch.guild_update d
-| GUILD_DELETE d -> !Dispatch.guild_delete d
-| GUILD_BAN_ADD d -> !Dispatch.member_ban d
-| GUILD_BAN_REMOVE d -> !Dispatch.member_unban d
-| GUILD_EMOJIS_UPDATE d -> !Dispatch.guild_emojis_update d
-| GUILD_INTEGRATIONS_UPDATE d -> !Dispatch.integrations_update d
-| GUILD_MEMBER_ADD d -> !Dispatch.member_join d
-| GUILD_MEMBER_REMOVE d -> !Dispatch.member_leave d
-| GUILD_MEMBER_UPDATE d -> !Dispatch.member_update d
-| GUILD_MEMBERS_CHUNK d -> !Dispatch.members_chunk d
-| GUILD_ROLE_CREATE d -> !Dispatch.role_create d
-| GUILD_ROLE_UPDATE d -> !Dispatch.role_update d
-| GUILD_ROLE_DELETE d -> !Dispatch.role_delete d
-| MESSAGE_CREATE d -> !Dispatch.message_create d
-| MESSAGE_UPDATE d -> !Dispatch.message_update d
-| MESSAGE_DELETE (d,e) -> !Dispatch.message_delete d e
-| MESSAGE_BULK_DELETE d -> !Dispatch.message_bulk_delete d
-| MESSAGE_REACTION_ADD d -> !Dispatch.reaction_add d
-| MESSAGE_REACTION_REMOVE d -> !Dispatch.reaction_remove d
-| MESSAGE_REACTION_REMOVE_ALL d -> !Dispatch.reaction_bulk_remove d
-| PRESENCE_UPDATE d -> !Dispatch.presence_update d
-| TYPING_START d -> !Dispatch.typing_start d
-| USER_UPDATE d -> !Dispatch.user_update d
-| VOICE_STATE_UPDATE d -> !Dispatch.voice_state_update d
-| VOICE_SERVER_UPDATE d -> !Dispatch.voice_server_update d
-| WEBHOOKS_UPDATE d -> !Dispatch.webhooks_update d
+ | HELLO d -> !Dispatch.hello d
+ | READY d -> !Dispatch.ready d
+ | RESUMED d -> !Dispatch.resumed d
+ | INVALID_SESSION d -> !Dispatch.invalid_session d
+ | CHANNEL_CREATE d -> !Dispatch.channel_create d
+ | CHANNEL_UPDATE d -> !Dispatch.channel_update d
+ | CHANNEL_DELETE d -> !Dispatch.channel_delete d
+ | CHANNEL_PINS_UPDATE d -> !Dispatch.channel_pins_update d
+ | GUILD_CREATE d -> !Dispatch.guild_create d
+ | GUILD_UPDATE d -> !Dispatch.guild_update d
+ | GUILD_DELETE d -> !Dispatch.guild_delete d
+ | GUILD_BAN_ADD d -> !Dispatch.member_ban d
+ | GUILD_BAN_REMOVE d -> !Dispatch.member_unban d
+ | GUILD_EMOJIS_UPDATE d -> !Dispatch.guild_emojis_update d
+ | GUILD_INTEGRATIONS_UPDATE d -> !Dispatch.integrations_update d
+ | GUILD_MEMBER_ADD d -> !Dispatch.member_join d
+ | GUILD_MEMBER_REMOVE d -> !Dispatch.member_leave d
+ | GUILD_MEMBER_UPDATE d -> !Dispatch.member_update d
+ | GUILD_MEMBERS_CHUNK d -> !Dispatch.members_chunk d
+ | GUILD_ROLE_CREATE d -> !Dispatch.role_create d
+ | GUILD_ROLE_UPDATE d -> !Dispatch.role_update d
+ | GUILD_ROLE_DELETE d -> !Dispatch.role_delete d
+ | MESSAGE_CREATE d -> !Dispatch.message_create d
+ | MESSAGE_UPDATE d -> !Dispatch.message_update d
+ | MESSAGE_DELETE (d,e) -> !Dispatch.message_delete d e
+ | MESSAGE_BULK_DELETE d -> !Dispatch.message_bulk_delete d
+ | MESSAGE_REACTION_ADD d -> !Dispatch.reaction_add d
+ | MESSAGE_REACTION_REMOVE d -> !Dispatch.reaction_remove d
+ | MESSAGE_REACTION_REMOVE_ALL d -> !Dispatch.reaction_bulk_remove d
+ | PRESENCE_UPDATE d -> !Dispatch.presence_update d
+ | TYPING_START d -> !Dispatch.typing_start d
+ | USER_UPDATE d -> !Dispatch.user_update d
+ | VOICE_STATE_UPDATE d -> !Dispatch.voice_state_update d
+ | VOICE_SERVER_UPDATE d -> !Dispatch.voice_server_update d
+ | WEBHOOKS_UPDATE d -> !Dispatch.webhooks_update d
let handle_event ~ev contents =
(* Printf.printf "Dispatching %s\n%!" ev; *)
@@ -120,4 +120,4 @@ let handle_event ~ev contents =
try
event_of_yojson ~contents ev
|> dispatch
- with Invalid_event ev -> Printf.printf "Unknown event: %s%!" ev \ No newline at end of file
+ with Invalid_event ev -> Printf.printf "Unknown event: %s\n%!" ev \ No newline at end of file
diff --git a/lib/models/channel.ml b/lib/models/channel.ml
index c3524ef..972f888 100644
--- a/lib/models/channel.ml
+++ b/lib/models/channel.ml
@@ -11,7 +11,7 @@ let say ~content ch =
let send_message ?embed ?content ?file ?(tts=false) ch =
let embed = match embed with
- | Some e -> e
+ | Some e -> Embed.to_yojson e
| None -> `Null in
let content = match content with
| Some c -> `String c
diff --git a/lib/models/channel.mli b/lib/models/channel.mli
index 6ca814e..001bb05 100644
--- a/lib/models/channel.mli
+++ b/lib/models/channel.mli
@@ -1,9 +1,31 @@
open Async
include module type of Channel_t
+exception Invalid_message
+exception No_message_found
+
+(** Simple version of send_message that only takes [~content] *)
val say : content:string -> t -> Message_t.t Deferred.Or_error.t
+
+(** Advanced message sending.
+
+ Raises {!Channel.Invalid_message} if one of content or embed is not set.
+
+ {3 Examples}
+ {[
+ open Core
+ open Disml
+
+ let check_command (msg : Message.t) =
+ if String.is_prefix ~prefix:"!hello" msg.content then
+ let embed = { Embed.default with title = Some "Hello World!" } in
+ Channel.send_message ~embed msg.channel >>> ignore
+
+ Client.message_create := check_command
+ ]}
+*)
val send_message :
- ?embed:Yojson.Safe.json ->
+ ?embed:Embed.t ->
?content:string ->
?file:string ->
?tts:bool ->
diff --git a/lib/models/embed.ml b/lib/models/embed.ml
index 4faaba7..7dbbeaa 100644
--- a/lib/models/embed.ml
+++ b/lib/models/embed.ml
@@ -51,4 +51,20 @@ type t = {
provider: provider option [@default None];
author: author option [@default None];
fields: field list [@default []];
-} [@@deriving sexp, yojson { strict = false }] \ No newline at end of file
+} [@@deriving sexp, yojson { strict = false }]
+
+let default = {
+ title = None;
+ kind = None;
+ description = None;
+ url = None;
+ timestamp = None;
+ colour = None;
+ footer = None;
+ image = None;
+ thumbnail = None;
+ video = None;
+ provider = None;
+ author = None;
+ fields = [];
+} \ No newline at end of file
diff --git a/lib/models/message.ml b/lib/models/message.ml
index 5bc06b7..f772c48 100644
--- a/lib/models/message.ml
+++ b/lib/models/message.ml
@@ -39,6 +39,26 @@ let reply msg cont =
Http.create_message msg.channel_id rep
>>| Result.map ~f:Message_t.of_yojson_exn
+let reply_with ?embed ?content ?file ?(tts=false) msg =
+ let embed = match embed with
+ | Some e -> Embed.to_yojson e
+ | None -> `Null in
+ let content = match content with
+ | Some c -> `String c
+ | None -> `Null in
+ let file = match file with
+ | Some f -> `String f
+ | None -> `Null in
+ let () = match embed, content with
+ | `Null, `Null -> raise Channel.Invalid_message
+ | _ -> () in
+ Http.create_message (msg.channel_id) (`Assoc [
+ ("embed", embed);
+ ("content", content);
+ ("file", file);
+ ("tts", `Bool tts);
+ ]) >>| Result.map ~f:Message_t.of_yojson_exn
+
let set_content msg cont =
to_yojson { msg with content = cont; }
|> Http.edit_message msg.channel_id msg.id
diff --git a/lib/models/message.mli b/lib/models/message.mli
index 40c87d4..09e62a4 100644
--- a/lib/models/message.mli
+++ b/lib/models/message.mli
@@ -9,5 +9,12 @@ val delete : t -> unit Deferred.Or_error.t
val pin : t -> unit Deferred.Or_error.t
val unpin : t -> unit Deferred.Or_error.t
val reply : t -> string -> t Deferred.Or_error.t
+val reply_with :
+ ?embed:Embed.t ->
+ ?content:string ->
+ ?file:string ->
+ ?tts:bool ->
+ t ->
+ Message_t.t Deferred.Or_error.t
val set_content : t -> string -> t Deferred.Or_error.t
val set_embed : t -> Embed.t -> t Deferred.Or_error.t \ No newline at end of file