This is a library for creating bots on Discord. Dis.ml uses JaneStreet's Async and Core libs and I highly recommend having a solid understanding of both of these before using this library.
Docs can be found here or generated using odoc and dune with dune build @doc
- The full Discord REST API (Exposed through
Disml.Http
with abstractions on various models) - Complete gateway support (sans voice)
- Automatic and manual sharding
- Event dispatch to a user-defined consumer that can be changed at runtime
- Automatic reconnection of dropped gateway connections, using RESUME when possible
- Automatic rate limit handling for REST requests
- Cache
- Abstractions for Discord Objects (Mostly Completed)
- Voice
In order to get started you'll first need to install OCaml (of course). I recommend using OPAM and Dune as a package manager and build tool respectively.
As of release 0.2.5 (12 February 2019), disml is published on OPAM and installable by running
opam install disml
If you would like to use the development version, run
opam pin add disml --dev-repo
Note: The dev repo relies on being pinned to the latest ppx_deriving_yojson
due to breaking changes in yojson.1.6.0
. You can pin the package with opam pin add ppx_deriving_yojson --dev-repo
If you do not use opam, see disml.opam
for build instructions.
You'll find an example bot in /bin directory.
/bin/bot.ml
Note: I use this for most of my testing involving API compat, so you'll likely see some bizarre commands.
open Async
open Core
open Disml
open Models
(* Create a function to handle message_create. *)
let check_command (message:Message.t) =
if String.is_prefix ~prefix:"!ping" message.content then
Message.reply message "Pong!" >>> ignore
let main () =
(* Register the event handler *)
Client.message_create := check_command;
(* Start the client. It's recommended to load the token from an env var or other config file. *)
Client.start "My token" >>> ignore
let _ =
(* Launch the Async scheduler. You must do this for anything to work. *)
Scheduler.go_main ~main ()