D is a lightweight and efficient library for Discord written in modern C , covering as much of the API specification as possible with an incredibly small memory footprint even when caching large amounts of data.
- Support for Discord API v10
- Really small memory footprint
- Efficient caching system for guilds, channels, guild members, roles, users
- Sharding and clustering (Many shards, one process: specify the number of shards, or let the library decide)
- Highly optimised ETF (Erlang Term Format) support for very fast websocket throughput
- Slash Commands/Interactions support
- Voice support (sending and receiving audio) with DAVE End-To-End Encryption
- The entire Discord API is available for use in the library
- Stable Windows support
- Ready-made compiled packages for Windows, Raspberry Pi (ARM64/ARM7/ARMv6), Debian x86/x64, and RPM based distributions
- Highly scalable for large amounts of guilds and users
Want to help? Drop me a line or send a PR.
This library is in use on TriviaBot and Sporks bot and many other bots!
The documentation is constantly evolving and improving, generated from the code comments and markdown examples using Doxygen.
This is a simple ping-pong example using slash commands.
#include <dpp/dpp.h>
#include <cstdlib>
int main() {
dpp::cluster bot(std::getenv("BOT_TOKEN"));
bot.on_slashcommand([](auto event) {
if (event.command.get_command_name() == "ping") {
event.reply("Pong!");
}
});
bot.on_ready([&bot](auto event) {
if (dpp::run_once<struct register_bot_commands>()) {
bot.global_command_create(
dpp::slashcommand("ping", "Ping pong!", bot.me.id)
);
}
});
bot.start(dpp::st_wait);
return 0;
}
You can find more examples in our example page.
We support the following OS families, as long as they are still officially supported by their provider. We will provide no support for operating systems past end-of-life.
The library runs ideally on Linux.
The library is well-functional and stable on Mac OS X, FreeBSD, and OpenBSD too!
For running your bot on a Raspberry Pi, we offer a prebuilt .deb package for ARM64, ARM6, and ARM7 so that you do not have to wait for it to compile.
Windows is well-supported with ready-made compiled DLL and LIB files, please check out our Windows Bot Template repository. The Windows Bot repository can be cloned and integrated immediately into any Visual Studio 2019 and 2022 project in a matter of minutes.
The library should work fine on other operating systems as well, and if you run a D bot on something not listed here, please let us know!
D can be easily installed using various package managers. Please refer to our documentation for installation tutorials based on your preferred package manager.
If you prefer to build the library from source, detailed instructions are available here.
For frequently asked questions and their answers, please visit our FAQ page.
If you prefer to use Nightly Builds (This is only if you know what you are doing!) then you can use either our master nightly builds or our dev nightly builds.
Contributions, issues and feature requests are welcome. After cloning and setting up the project locally, you can just submit a PR to this repo and it will be deployed once it's accepted.
Please read the D Code Style Guide for more information on how we format pull requests.
If you have various suggestions, questions or want to discuss things with our community, Join our discord server! Make a humorous reference to brains in your nickname to get access to a secret brain cult channel! :)
We love people's support in growing and improving. Be sure to leave a βοΈ if you like the project and also be sure to contribute, if you're interested!
- cmake (version 3.13 )
- A supported C compiler from the list below
- g (version 8 or higher)
- clang (version 6 or higher)
- AppleClang (12.0 or higher)
- Microsoft Visual Studio 2019 or 2022 (16.x/17.x)
- clang-cl (version 15 or higher)
Other compilers may work (either newer versions of those listed above, or different compilers entirely) but have not been tested by us.
- OpenSSL (For HTTPS, will use whichever
-dev
package comes with your OS) - zlib (For websocket compression, will use whichever
-dev
package comes with your OS)
For voice support you require:
- libopus (For audio encoding/decoding)
- Note that our windows zips come packaged with copies of this library - you do not need to install it yourself!
- JSON for Modern C (You can bring your own nlohmann::json into D by setting a CMAKE flag)
- MLS (This is statically compiled into the library if voice support is enabled)