aboutsummaryrefslogtreecommitdiff
path: root/lib/s.ml
blob: 9ac86ad502e546e38353bd95ee1d4903f85e370d (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
open Async

module type Token = sig
    val token : string
end

module type Client = sig
    type context
end

module type Handler = sig
    val handle_event :
        'a ->
        'b ->
        unit
end

module type Dispatch = sig
    type dispatch_event =
    | HELLO of Yojson.Safe.json
    | READY of Yojson.Safe.json
    | RESUMED of Yojson.Safe.json
    | INVALID_SESSION of Yojson.Safe.json
    | CHANNEL_CREATE of Channel_t.t
    | CHANNEL_UPDATE of Channel_t.t
    | CHANNEL_DELETE of Channel_t.t
    | CHANNEL_PINS_UPDATE of Yojson.Safe.json
    | GUILD_CREATE of Guild_t.t
    | GUILD_UPDATE of Guild_t.t
    | GUILD_DELETE of Guild_t.t
    | GUILD_BAN_ADD of Ban_t.t
    | GUILD_BAN_REMOVE of Ban_t.t
    | GUILD_EMOJIS_UPDATE of Yojson.Safe.json
    | GUILD_INTEGRATIONS_UPDATE of Yojson.Safe.json
    | GUILD_MEMBER_ADD of Member_t.t
    | GUILD_MEMBER_REMOVE of Member_t.t
    | GUILD_MEMBER_UPDATE of Member_t.t
    | GUILD_MEMBERS_CHUNK of Member_t.t list
    | GUILD_ROLE_CREATE of Role_t.t (* * Guild.t *)
    | GUILD_ROLE_UPDATE of Role_t.t (* * Guild.t *)
    | GUILD_ROLE_DELETE of Role_t.t (* * Guild.t *)
    | MESSAGE_CREATE of Message_t.t
    | MESSAGE_UPDATE of Message_t.t
    | MESSAGE_DELETE of Message_t.t
    | MESSAGE_BULK_DELETE of Message_t.t list
    | MESSAGE_REACTION_ADD of (* Message.t * *) Reaction_t.t
    | MESSAGE_REACTION_REMOVE of (* Message.t * *) Reaction_t.t
    | MESSAGE_REACTION_REMOVE_ALL of (* Message.t * *) Reaction_t.t list
    | PRESENCE_UPDATE of Presence_t.t
    | TYPING_START of Yojson.Safe.json
    | USER_UPDATE of Yojson.Safe.json
    | VOICE_STATE_UPDATE of Yojson.Safe.json
    | VOICE_SERVER_UPDATE of Yojson.Safe.json
    | WEBHOOKS_UPDATE of Yojson.Safe.json

    exception Invalid_event of string

    val event_of_string : contents:string -> string -> dispatch_event
    val dispatch : ev:string -> string -> unit
end

module type Http = sig
    val token : string

    module Base : sig
        exception Invalid_Method

        val base_url : string

        val process_url : string -> Uri.t
        val process_request_body : Yojson.Safe.json -> Cohttp_async.Body.t
        val process_request_headers : unit -> Cohttp.Header.t

        val process_response :
            string ->
            Cohttp_async.Response.t * Cohttp_async.Body.t ->
            Yojson.Safe.json Deferred.t

        val request :
            ?body:Yojson.Safe.json ->
            [> `DELETE | `GET | `PATCH | `POST | `PUT ] ->
            string ->
            Yojson.Safe.json Deferred.t
    end

    (* Auto-generated signatures *)
    val get_gateway : unit -> Yojson.Safe.json Async.Deferred.t
    val get_gateway_bot : unit -> Yojson.Safe.json Async.Deferred.t
    val get_channel : string -> Yojson.Safe.json Async.Deferred.t
    val modify_channel :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val delete_channel : string -> Yojson.Safe.json Async.Deferred.t
    val get_messages : string -> Yojson.Safe.json Async.Deferred.t
    val get_message : string -> string -> Yojson.Safe.json Async.Deferred.t
    val create_message :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val create_reaction :
      string -> string -> string -> Yojson.Safe.json Async.Deferred.t
    val delete_own_reaction :
      string -> string -> string -> Yojson.Safe.json Async.Deferred.t
    val delete_reaction :
      string ->
      string -> string -> string -> Yojson.Safe.json Async.Deferred.t
    val get_reactions :
      string -> string -> string -> Yojson.Safe.json Async.Deferred.t
    val delete_reactions :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val edit_message :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val delete_message :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val bulk_delete :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val edit_channel_permissions :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_channel_invites : string -> Yojson.Safe.json Async.Deferred.t
    val create_channel_invite :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val delete_channel_permission :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val broadcast_typing : string -> Yojson.Safe.json Async.Deferred.t
    val get_pinned_messages : string -> Yojson.Safe.json Async.Deferred.t
    val pin_message : string -> string -> Yojson.Safe.json Async.Deferred.t
    val unpin_message :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val group_recipient_add :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val group_recipient_remove :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val get_emojis : string -> Yojson.Safe.json Async.Deferred.t
    val get_emoji : string -> string -> Yojson.Safe.json Async.Deferred.t
    val create_emoji :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val edit_emoji :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val delete_emoji : string -> string -> Yojson.Safe.json Async.Deferred.t
    val create_guild :
      Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_guild : string -> Yojson.Safe.json Async.Deferred.t
    val edit_guild :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val delete_guild : string -> Yojson.Safe.json Async.Deferred.t
    val get_guild_channels : string -> Yojson.Safe.json Async.Deferred.t
    val create_guild_channel :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val modify_guild_channel_positions :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_member : string -> string -> Yojson.Safe.json Async.Deferred.t
    val get_members : string -> Yojson.Safe.json Async.Deferred.t
    val add_member :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val edit_member :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val remove_member :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val change_nickname :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val add_member_role :
      string -> string -> string -> Yojson.Safe.json Async.Deferred.t
    val remove_member_role :
      string -> string -> string -> Yojson.Safe.json Async.Deferred.t
    val get_bans : string -> Yojson.Safe.json Async.Deferred.t
    val get_ban : string -> string -> Yojson.Safe.json Async.Deferred.t
    val guild_ban_add :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val guild_ban_remove :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val get_roles : string -> Yojson.Safe.json Async.Deferred.t
    val guild_role_add :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val guild_roles_edit :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val guild_role_edit :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val guild_role_remove :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val guild_prune_count : string -> Yojson.Safe.json Async.Deferred.t
    val guild_prune_start :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_guild_voice_regions :
      string -> Yojson.Safe.json Async.Deferred.t
    val get_guild_invites : string -> Yojson.Safe.json Async.Deferred.t
    val get_integrations : string -> Yojson.Safe.json Async.Deferred.t
    val add_integration :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val edit_integration :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val delete_integration :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val sync_integration :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val get_guild_embed : string -> Yojson.Safe.json Async.Deferred.t
    val edit_guild_embed :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_vanity_url : string -> Yojson.Safe.json Async.Deferred.t
    val get_invite : string -> Yojson.Safe.json Async.Deferred.t
    val delete_invite : string -> Yojson.Safe.json Async.Deferred.t
    val get_current_user : unit -> Yojson.Safe.json Async.Deferred.t
    val edit_current_user :
      Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_guilds : unit -> Yojson.Safe.json Async.Deferred.t
    val leave_guild : string -> Yojson.Safe.json Async.Deferred.t
    val get_private_channels : unit -> Yojson.Safe.json Async.Deferred.t
    val create_dm : Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val create_group_dm :
      Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_connections : unit -> Yojson.Safe.json Async.Deferred.t
    val get_user : string -> Yojson.Safe.json Async.Deferred.t
    val get_voice_regions : unit -> Yojson.Safe.json Async.Deferred.t
    val create_webhook :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_channel_webhooks : string -> Yojson.Safe.json Async.Deferred.t
    val get_guild_webhooks : string -> Yojson.Safe.json Async.Deferred.t
    val get_webhook : string -> Yojson.Safe.json Async.Deferred.t
    val get_webhook_with_token :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val edit_webhook :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val edit_webhook_with_token :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val delete_webhook : string -> Yojson.Safe.json Async.Deferred.t
    val delete_webhook_with_token :
      string -> string -> Yojson.Safe.json Async.Deferred.t
    val execute_webhook :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val execute_slack_webhook :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val execute_git_webhook :
      string ->
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
    val get_audit_logs :
      string -> Yojson.Safe.json -> Yojson.Safe.json Async.Deferred.t
end

module type Sharder = sig
    exception Invalid_Payload
    exception Failure_to_Establish_Heartbeat

    type t

    val start :
        ?count:int ->
        unit ->
        t Deferred.t

    module Shard : sig
        type shard
        type 'a t = {
            mutable state: 'a;
            mutable binds: ('a -> unit) list;
        }

        val bind :
            f:('a -> unit) ->
            'a t ->
            unit

        val heartbeat :
            shard ->
            shard Deferred.t

        val set_status :
            status:Yojson.Safe.json ->
            shard ->
            shard Deferred.t

        val request_guild_members :
            ?query:string ->
            ?limit:int ->
            guild:Snowflake_t.t ->
            shard ->
            shard Deferred.t

        val create :
            url:string ->
            shards:int * int ->
            unit ->
            shard Deferred.t
    end

    val set_status :
        status:Yojson.Safe.json ->
        t ->
        Shard.shard list Deferred.t

    val set_status_with :
        f:(Shard.shard -> Yojson.Safe.json) ->
        t ->
        Shard.shard list Deferred.t

    val request_guild_members :
        ?query:string ->
        ?limit:int ->
        guild:Snowflake_t.t ->
        t ->
        Shard.shard list Deferred.t
end