aboutsummaryrefslogtreecommitdiff
path: root/bin/bot.ml
blob: 329c22dd4ffec85a7378727a5b323ca864dade82 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
open Async
open Core
open Disml

(* let rec ev_loop read =
    Pipe.read read >>= fun frame ->
    match frame with
    | `Eof -> return ()
    | `Ok (t, data) -> begin
        match t with
        | "MESSAGE_CREATE" -> begin
            let msg = Model.to_message data in
            let msg_time = Time.(to_span_since_epoch @@ now ()) in
            let content = msg.content in
            let channel = msg.channel in
            if String.is_prefix ~prefix:"!?ping" content then begin
                Http.create_message channel @@ `Assoc [
                    ("content", `String "Pong!");
                    ("tts", `Bool false);
                ]
                >>> fun resp ->
                let message_id = Yojson.Basic.Util.(member "id" resp |> to_string) in
                let rtt = Time.(to_span_since_epoch @@ sub (now ()) msg_time) in
                Http.edit_message channel message_id @@ `Assoc [
                    ("content", `String ("Pong! `" ^ (Float.to_string @@ Time.Span.to_ms rtt) ^ " ms`"));
                ]
                >>> fun _ -> print_endline "Message Edited!"
            end;
            return ()
        end
        | "GUILD_CREATE" -> begin
            let guild = Model.to_guild data in
            print_endline guild.name;
            return ()
        end
        | _ -> return ()
    end
    >>= fun _ -> ev_loop read *)

let main () =
    let token = match Sys.getenv "DISCORD_TOKEN" with
    | Some s -> s
    | None -> failwith "No token"
    in
    let (_r,w) = Pipe.create () in
    let client = Client.create ~handler:w token in
    (* ev_loop r >>> ignore; *)
    Client.start client
    >>> fun client ->
    Clock.every
    (Time.Span.create ~sec:60 ())
    (fun () ->
        print_endline "Setting status";
        Client.set_status_with ~f:(fun shard -> `String ("Current seq: " ^ (Int.to_string shard.seq))) client
        >>> ignore)

let _ =
    Scheduler.go_main ~main ()