aboutsummaryrefslogtreecommitdiff
path: root/lib/models
diff options
context:
space:
mode:
authorAdelyn Breedlove <[email protected]>2019-01-19 15:58:31 -0700
committerAdelyn Breedlove <[email protected]>2019-01-19 15:58:31 -0700
commitb678d7312518bb0ff74d7db364bcbbcded5c1609 (patch)
tree39094fc179c33fc67269ffc3fea218384c558cfe /lib/models
parentupdate docs export (diff)
downloaddisml-b678d7312518bb0ff74d7db364bcbbcded5c1609.tar.xz
disml-b678d7312518bb0ff74d7db364bcbbcded5c1609.zip
more updates
Diffstat (limited to 'lib/models')
-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
5 files changed, 68 insertions, 3 deletions
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