aboutsummaryrefslogtreecommitdiff
path: root/lib/http.ml
blob: ba73fd9d97c6723e3c85d2e8d9be68cb6ddb2d58 (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
open Lwt.Infix
open Cohttp
open Cohttp_lwt_unix

module Base = struct
    exception Invalid_Method

    let base_url = "https://discordapp.com/api/v7"
    let cdn_url = "https://cdn.discordapp.com"

    let process_url path =
        Uri.of_string (base_url ^ path)

    let process_request_body body =
        body
        |> Yojson.Basic.to_string
        |> Cohttp_lwt.Body.of_string

    let process_request_headers () =
        let token = try
            Sys.getenv "DISCORD_TOKEN"
        with Not_found -> failwith "Please provide a token" in
        let h = Header.init_with "User-Agent" "Animus v0.1.0" in
        let h = Header.add h "Authorization" ("Bot " ^ token) in
        Header.add h "Content-Type" "application/json"

    (* TODO Finish processor *)
    let process_response (resp, body) =
        body |> Cohttp_lwt.Body.to_string >|= Yojson.Basic.from_string

    let request ?(body=`Null) m path =
        let uri = process_url path in
        let headers = process_request_headers () in
        let body = process_request_body body in
        (match m with
        | `DELETE -> Client.delete ~headers ~body uri
        | `GET -> Client.get ~headers uri
        | `PATCH -> Client.patch ~headers ~body uri
        | `POST -> Client.post ~headers ~body uri
        | `PUT -> Client.put ~headers ~body uri
        | _ -> raise Invalid_Method)
        >|= process_response
end