diff options
| author | Adelyn Breedlove <[email protected]> | 2019-01-28 10:31:51 -0700 |
|---|---|---|
| committer | Adelyn Breedlove <[email protected]> | 2019-01-28 10:31:51 -0700 |
| commit | 8662e92987c437f59d09896a247ec2b5d82c4528 (patch) | |
| tree | f004cc14598351d4ad6b19d8e993d2f629c5e738 /bin | |
| parent | Add more docs (diff) | |
| download | disml-8662e92987c437f59d09896a247ec2b5d82c4528.tar.xz disml-8662e92987c437f59d09896a247ec2b5d82c4528.zip | |
Publish docs updates
Diffstat (limited to 'bin')
| -rw-r--r-- | bin/bot.ml | 186 |
1 files changed, 93 insertions, 93 deletions
@@ -1,93 +1,93 @@ -open Async -open Core -open Disml -open Models - -let client = Ivar.create () - -let check_command (Event.MessageCreate.{message}) = - let cmd, rest = match String.split ~on:' ' message.content with - | hd::tl -> hd, tl - | [] -> "", [] - in match cmd with - | "!ping" -> - Message.reply message "Pong!" >>= begin fun message -> - let message = match message with Ok m -> m | Error e -> Error.raise e in - let diff = Time.diff (Time.now ()) (Time.of_string message.timestamp) in - Message.set_content message (Printf.sprintf "Pong! `%d ms`" (Time.Span.to_ms diff |> Float.abs |> Float.to_int)) - end >>> ignore - | "!spam" -> - let count = Option.((List.hd rest >>| Int.of_string) |> value ~default:0) in - List.range 0 count - |> List.iter ~f:(fun i -> Message.reply message (string_of_int i) >>> ignore) - | "!list" -> - let count = Option.((List.hd rest >>| Int.of_string) |> value ~default:0) in - let list = List.range 0 count - |> List.sexp_of_t Int.sexp_of_t - |> Sexp.to_string_hum in - Message.reply message list >>> begin function - | Ok msg -> print_endline msg.content - | Error err -> print_endline (Error.to_string_hum err) - end - | "!fold" -> - let count = Option.((List.hd rest >>| Int.of_string) |> value ~default:0) in - let list = List.range 0 count - |> List.fold ~init:0 ~f:(+) - |> Int.to_string in - Message.reply message list >>> ignore - | "!embed" -> - let image_url = "https://cdn.discordapp.com/avatars/345316276098433025/17ccdc992814cc6e21a9e7d743a30e37.png" in - let embed = Embed.(default - |> title "Foo" - |> description "Bar" - |> url "https://gitlab.com/Mishio595/disml" - |> timestamp Time.(now () |> to_string_iso8601_basic ~zone:Time.Zone.utc) - |> colour 0xff - |> footer (fun f -> footer_text "boop" f) - |> image image_url - |> thumbnail image_url - |> author (fun a -> a - |> author_name "Adelyn" - |> author_icon image_url - |> author_url "https://gitlab.com/Mishio595/disml") - |> field ("field 3", "test", true) - |> field ("field 2", "test", true) - |> field ("field 1", "test", true) - ) in - Message.reply_with ~embed message >>> ignore - | "!status" -> - let status = List.fold ~init:"" ~f:(fun a v -> a ^ " " ^ v) rest in - Ivar.read client >>> fun client -> - Client.set_status ~status:(`String status) client - >>> fun _ -> - Message.reply message "Updated status" >>> ignore - | "!test" -> - let ch = `Channel_id 377716501446393856 in - Channel_id.say "Testing..." ch >>> ignore - | "!echo" -> - let `Message_id id = message.id in - let id = Option.((List.hd rest >>| Int.of_string) |> value ~default:id) in - Channel_id.get_message ~id message.channel_id >>> begin function - | Ok msg -> Message.reply message (Printf.sprintf "```lisp\n%s```" (Message.sexp_of_t msg |> Sexp.to_string_hum)) >>> ignore - | _ -> () - end - | _ -> () - -let setup_logger () = - Logs.set_reporter (Logs_fmt.reporter ()); - Logs.set_level ~all:true (Some Logs.Debug) - -let main () = - setup_logger (); - Client.message_create := check_command; - Client.ready := (fun _ -> Logs.info (fun m -> m "Logged in")); - let token = match Sys.getenv "DISCORD_TOKEN" with - | Some t -> t - | None -> failwith "No token in env" - in - Client.start token - >>> fun c -> - Ivar.fill client c - -let _ = - Scheduler.go_main ~main () +open Async
+open Core
+open Disml
+open Models
+
+let client = Ivar.create ()
+
+let check_command (Event.MessageCreate.{message}) =
+ let cmd, rest = match String.split ~on:' ' message.content with
+ | hd::tl -> hd, tl
+ | [] -> "", []
+ in match cmd with
+ | "!ping" ->
+ Message.reply message "Pong!" >>= begin fun message ->
+ let message = match message with Ok m -> m | Error e -> Error.raise e in
+ let diff = Time.diff (Time.now ()) (Time.of_string message.timestamp) in
+ Message.set_content message (Printf.sprintf "Pong! `%d ms`" (Time.Span.to_ms diff |> Float.abs |> Float.to_int))
+ end >>> ignore
+ | "!spam" ->
+ let count = Option.((List.hd rest >>| Int.of_string) |> value ~default:0) in
+ List.range 0 count
+ |> List.iter ~f:(fun i -> Message.reply message (string_of_int i) >>> ignore)
+ | "!list" ->
+ let count = Option.((List.hd rest >>| Int.of_string) |> value ~default:0) in
+ let list = List.range 0 count
+ |> List.sexp_of_t Int.sexp_of_t
+ |> Sexp.to_string_hum in
+ Message.reply message list >>> begin function
+ | Ok msg -> print_endline msg.content
+ | Error err -> print_endline (Error.to_string_hum err)
+ end
+ | "!fold" ->
+ let count = Option.((List.hd rest >>| Int.of_string) |> value ~default:0) in
+ let list = List.range 0 count
+ |> List.fold ~init:0 ~f:(+)
+ |> Int.to_string in
+ Message.reply message list >>> ignore
+ | "!embed" ->
+ let image_url = "https://cdn.discordapp.com/avatars/345316276098433025/17ccdc992814cc6e21a9e7d743a30e37.png" in
+ let embed = Embed.(default
+ |> title "Foo"
+ |> description "Bar"
+ |> url "https://gitlab.com/Mishio595/disml"
+ |> timestamp Time.(now () |> to_string_iso8601_basic ~zone:Time.Zone.utc)
+ |> colour 0xff
+ |> footer (fun f -> footer_text "boop" f)
+ |> image image_url
+ |> thumbnail image_url
+ |> author (fun a -> a
+ |> author_name "Adelyn"
+ |> author_icon image_url
+ |> author_url "https://gitlab.com/Mishio595/disml")
+ |> field ("field 3", "test", true)
+ |> field ("field 2", "test", true)
+ |> field ("field 1", "test", true)
+ ) in
+ Message.reply_with ~embed message >>> ignore
+ | "!status" ->
+ let status = List.fold ~init:"" ~f:(fun a v -> a ^ " " ^ v) rest in
+ Ivar.read client >>> fun client ->
+ Client.set_status ~status:(`String status) client
+ >>> fun _ ->
+ Message.reply message "Updated status" >>> ignore
+ | "!test" ->
+ let ch = `Channel_id 377716501446393856 in
+ Channel_id.say "Testing..." ch >>> ignore
+ | "!echo" ->
+ let `Message_id id = message.id in
+ let id = Option.((List.hd rest >>| Int.of_string) |> value ~default:id) in
+ Channel_id.get_message ~id message.channel_id >>> begin function
+ | Ok msg -> Message.reply message (Printf.sprintf "```lisp\n%s```" (Message.sexp_of_t msg |> Sexp.to_string_hum)) >>> ignore
+ | _ -> ()
+ end
+ | _ -> ()
+
+let setup_logger () =
+ Logs.set_reporter (Logs_fmt.reporter ());
+ Logs.set_level ~all:true (Some Logs.Debug)
+
+let main () =
+ setup_logger ();
+ Client.message_create := check_command;
+ Client.ready := (fun _ -> Logs.info (fun m -> m "Logged in"));
+ let token = match Sys.getenv "DISCORD_TOKEN" with
+ | Some t -> t
+ | None -> failwith "No token in env"
+ in
+ Client.start token
+ >>> fun c ->
+ Ivar.fill client c
+
+let _ =
+ Scheduler.go_main ~main ()
|