
Hello, and welcome to DiscordCoreAPI! This is a Discord bot library, written in C++, that leverages custom asynchronous CoRoutines, as well as a home-brew set of Https, WebSocket, and Datagram socket clients - all to deliver the utmost performance and efficiency for your bot. It uses roughly 0.1% of an Intel i7 9750h CPU to stream audio in high quality (Opus @ 48Khz, 16-bit) to a single server.

Compiler Support

Documentation/Examples
Documentation/Examples
Discord Server
This is a link to the Discord server!
Bot Template
A template for utilizing this library.
Features
Performant
Audio-Bridge
CPU Efficient
- It only uses about 0.1% of an Intel i7 9750h to stream audio in high quality (Opus 48Khz 16-bit Stereo) to a single server.
Entire Discord API Covered
- All of the Discord API endpoints are covered in this library, including voice communication.
Concurrent Discord API Access
Advanced Rate-Limiting System
- Guarantees that the order in which HTTPS requests are executed is the same that they were submitted in - despite being launched across different threads, while never infracting on any of the Discord API's rate-limits and while running concurrently across all of the endpoints.
Slash Commands and Buttons
Select Menus
User Commands
Message Commands
Modal Text Inputs
A Unified "Input-Event" System
- User interactions (Application Commands, Message Commands, User Commands) are accepted via the
DiscordCoreAPI::EventManager::onInputEventCreation
event.
- They can all be responded to using the
DiscordCoreAPI::InputEvents::respondToInputEventAsync()
function.
- Alternatively you can implement your own input-event handling by using the raw
DiscordCoreAPI::EventManager::onInteractionCreation
or DiscordCoreAPI::EventManager::onMessageCreation
events.
newEmbed.
setAuthor(args.eventData.getUserName(), args.eventData.getAvatarURL());
newEmbed.
setDescription(
"------\\n__**Sorry, but there's already something playing!**__\\n------");
newEmbed.
setTitle(
"__**Playing Issue:**__");
newEmbed.
setColor(discordGuild.data.borderColor);
EmbedData & setTitle(const std::string &titleNew)
Sets the title of the embed.
EmbedData & setDescription(const std::string &descriptionNew)
Sets the description (the main contents) of the embed.
EmbedData & setColor(const std::string &hexColorValueNew)
Sets the color of the embed, by applying a hex-color value.
EmbedData & setAuthor(const std::string &authorName, const std::string &authorAvatarUrl="")
Sets the author's name and avatar for the embed.
EmbedData & setTimeStamp(const std::string &timeStamp)
Sets the timeStamp on the embed.
@ Ephemeral_Interaction_Response
Ephemeral Interaction response.
void get()
Gets the resulting value of the CoRoutine.
Data representing an input-event, which is any Message or Interaction that is coming into the bot as ...
Data for responding to an input-event.
RespondToInputEventData & setResponseType(InputEventResponseType typeNew)
For setting the type of response to make.
RespondToInputEventData & addMessageEmbed(EmbedData dataPackage)
For setting the embeds in a response.
static CoRoutine< void > deleteInputEventResponseAsync(InputEventData &dataPackage, int32_t timeDelayNew=0)
Deletes a previously sent "input-event-response".
Supported Platforms
- This library currently supports being built within Visual Studio 2022/MSVC on the Windows platform as well as g++ 11 on the Linux platform.
Build Instructions (Full-Vcpkg)
- Install vcpkg, if need be.
- Make sure to run
vcpkg integrate install
.
- Enter within a terminal
vcpkg install discordcoreapi:x64-windows_OR_linux
.
- Set up a console project in your IDE and make sure to set the C++ standard to C++23 or later - and include
discordcoreapi/Index.hpp
.
- Build and run!
Dependencies
- CMake (Version 3.20 or greater)
- NOTE: I installed these using the vcpkg installer.
- FFMPEG (.\vcpkg install ffmpeg:x64-windows_OR_linux)
- SimdJson (.\vcpkg install simdjson:x64-windows_OR_linux)
- OpenSSL (.\vcpkg install openssl:x64-windows_OR_linux)
- Opus (.\vcpkg install opus:x64-windows_OR_linux)
- Sodium (.\vcpkg install libsodium:x64-windows_OR_linux)
Build Instructions (Non-Vcpkg) - The Library
- Install the dependencies.
- Clone this git repository into a folder.
- Set, in CMakeLists.txt, the
_VCPKG_ROOT_DIR
, or the FFMPEG_DIR
, Opus_DIR
, simdjson_DIR
, and unofficial-sodium_DIR
paths to wherever each of the respective dependency files are located and they are as follows:
- FFMPEG_DIR # Set this one to the folder location of the file "FindFFMPEG.cmake".
- Opus_DIR # Set this one to the folder location of the file "OpusConfig.cmake".
- simdjson_DIR # Set this one to the folder location of the file "simdjson-config.cmake".
- unofficial-sodium_DIR # Set this one to the folder location of the file "unofficial-sodiumConfig.cmake".
- OPENSSL_ROOT_DIR # Set this one to the folder location of the include folder and library folders of OpenSSL.
- Open a terminal inside the git repo's folder.
- Run
cmake -S . --preset Linux_OR_Windows-Debug_OR_Release
.
- Then run
cmake --build --preset Linux_OR_Windows-Debug_OR_Release
.
- Run within the same terminal and folder
cmake --install ./Build/Debug_OR_Release
.
- The default installation paths are: Windows = "ROOT_DRIVE:/Users/USERNAME/CMake/DiscordCoreAPI", Linux = "/home/USERNAME/CMake/DiscordCoreAPI"
The CMAKE Package
- By running
cmake --install ./Build/Debug_OR_Release
, you will be given a cmake package, which can be used to build from this library, using other cmake projects.
- It is used by setting
DiscordCoreAPI_DIR
to wherever the DiscordCoreAPIConfig.cmake file would have been installed on your system by having run the cmake --install
command, and then using find_package()
on DiscordCoreAPI
.
- When found, you will be granted the following cmake "variables";
DiscordCoreAPI::DiscordCoreAPI
- this is the library target which can be linked to from other targets in cmake, and on Windows; $<TARGET_RUNTIME_DLLS:DiscordCoreAPI-Bot>
- which is a list of dll files to be copied into your executable's final location after building. As well as RELEASE_PDB_FILE_PATH
, DEBUG_PDB_FILE_PATH
, RELEASE_PDB_FILE_NAME
, and DEBUG_PDB_FILE_NAME
, which are full file/directory paths/filenames to the library's PDB files.
- Here and here is an example of building an executable from this library with this method.
Build Instructions (Non-Vcpkg) - The Executable
- Download the bot template or create your own with the same imports, and set within it either the
VCPKG_ROOT_DIR
, or the CMAKE_CONFIG_FILE_DIR
, FFMPEG_DIR
, Opus_DIR
, simdjson_DIR
, and unofficial-sodium_DIR
paths to wherever each of the respective dependency files are located and they are as follows:
- CMAKE_CONFIG_FILE_DIR # Set this one to the folder location of the DiscordCoreAPIConfig.cmake generated while running CMake –install.
- FFMPEG_DIR # Set this one to the folder location of the file "FindFFMPEG.cmake".
- Opus_DIR # Set this one to the folder location of the file "OpusConfig.cmake".
- simdjson_DIR # Set this one to the folder location of the file "simdjson-config.cmake".
- unofficial-sodium_DIR # Set this one to the folder location of the file "unofficial-sodiumConfig.cmake".
- OPENSSL_ROOT_DIR # Set this one to the folder location of the include folder and library folders of OpenSSL.
- Set up a main.cpp like this one, including the header
discordcoreapi/Index.hpp
.
- Run in a terminal from within the same folder as the top-level CMakeLists.txt,
cmake -S . --preset Linux_OR_Windows-Debug_OR_Release
.
- Then run
cmake --build --preset Linux_OR_Windows-Debug_OR_Release
.
- Run within the same terminal and folder
cmake --install ./Build/Debug_OR_Release
.
- The default installation paths are: Windows = "ROOT_DRIVE:/Users/USERNAME/CMake/Bot-Template-For-DiscordCoreAPI", Linux = "/home/USERNAME/CMake/Bot-Template-For-DiscordCoreAPI"
Roadmap
I am currently working on getting this thing to be used by people like you! So, if you have any suggestions for the library that would make it more usable - don't hesitate to let me know! I can be easily found on the Discord server that is linked to above! Cheers and thanks for your time.