aboutsummaryrefslogtreecommitdiff
path: root/lib/s.ml
blob: 05eee18cb8a1f5e6e67da6312ee9f4bc48523309 (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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
open Async

module type HasSnowflake = sig
    type t [@@deriving sexp, yojson]
    val get_id : t -> Snowflake.t
end

module type ChannelImpl = sig
    type t
    exception Invalid_message
    exception No_message_found

    (** Advanced message sending.

        Raises {!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 |> title "Hello World!") in
                    Channel_id.send_message ~embed msg.channel_id >>> ignore

            Client.message_create := check_command
        ]}
    *)
    val send_message :
        ?embed:Embed.t ->
        ?content:string ->
        ?file:string ->
        ?tts:bool ->
        t ->
        Message_t.t Deferred.Or_error.t

    (** [say str ch] is equivalent to [send_message ~content:str ch]. *)
    val say : string -> t -> Message_t.t Deferred.Or_error.t

    val delete : t -> Channel_t.t Deferred.Or_error.t
    val get_message : id:Snowflake.t -> t -> Message_t.t Deferred.Or_error.t
    val get_messages :
        ?mode:[ `Before | `After | `Around ] ->
        ?id:Snowflake.t ->
        ?limit:int ->
        t ->
        Message_t.t list Deferred.Or_error.t
    val broadcast_typing : t -> unit Deferred.Or_error.t
    val get_pins : t -> Message_t.t list Deferred.Or_error.t
    (* TODO more things related to guild channels *)
end

module type GuildImpl = sig
    open Async

    type t
    val ban_user : id:Snowflake.t -> ?reason:string -> ?days:int -> t -> unit Deferred.Or_error.t
    val create_emoji : name:string -> image:string -> t -> Emoji.t Deferred.Or_error.t
    val create_role :
        name:string ->
        ?colour:int ->
        ?permissions:int ->
        ?hoist:bool ->
        ?mentionable:bool ->
        t ->
        Role_t.t Deferred.Or_error.t
    val create_channel : mode:[ `Text | `Voice | `Category ] -> name:string -> t -> Channel_t.t Deferred.Or_error.t
    val delete : t -> unit Deferred.Or_error.t
    val get_ban : id:Snowflake.t -> t -> Ban_t.t Deferred.Or_error.t
    val get_bans : t -> Ban_t.t list Deferred.Or_error.t
    val get_emoji : id:Snowflake.t -> t -> Emoji.t Deferred.Or_error.t
    val get_invites : t -> Yojson.Safe.json Deferred.Or_error.t
    val get_prune_count : days:int -> t -> int Deferred.Or_error.t
    val get_webhooks : t -> Yojson.Safe.json Deferred.Or_error.t
    val kick_user : id:Snowflake.t -> ?reason:string -> t -> unit Deferred.Or_error.t
    val leave : t -> unit Deferred.Or_error.t
    val list_voice_regions : t -> Yojson.Safe.json Deferred.Or_error.t
    val prune : days:int -> t -> int Deferred.Or_error.t
    val request_members : t -> Member_t.t list Deferred.Or_error.t
    val set_afk_channel : id:Snowflake.t -> t -> Guild_t.t Deferred.Or_error.t
    val set_afk_timeout : timeout:int -> t -> Guild_t.t Deferred.Or_error.t
    val set_name : name:string -> t -> Guild_t.t Deferred.Or_error.t
    val set_icon : icon:string -> t -> Guild_t.t Deferred.Or_error.t
    val unban_user : id:Snowflake.t -> ?reason:string -> t -> unit Deferred.Or_error.t
end

module type UserImpl = sig
    type t
    (* val private_channel : t -> Channel_t.t *)
    (* val send : t -> Yojson.Safe.json Deferred.Or_error.t *)
end