GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - RealTimeChris/DiscordCoreAPI: A bot library for Discord, written in C++, and featuring explicit multithreading through the usage of custom, asynchronous C++ CoRoutines.

BranchesTags
Open more actions menu

Latest commit

 

History

1,095 Commits
1,095 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
BuildTools
BuildTools
 
 
CMake
CMake
 
 
Documentation
Documentation
 
 
Include/discordcoreapi
Include/discordcoreapi
 
 
Library
Library
 
 
Source
Source
 
 
Tests
Tests
 
 
Vcpkg
Vcpkg
 
 
.clang-format
.clang-format
 
 
.gitignore
.gitignore
 
 
CMakeLists.txt
CMakeLists.txt
 
 
CMakePresets.json
CMakePresets.json
 
 
License.md
License.md
 
 
ReadMe.md
ReadMe.md
 
 

Repository files navigation

DiscordCoreAPI

Codacy Badge Discord Commit Activity Lines of Code

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.

DiscordCoreAPI WebSite

Compiler Support

MSVC_20922 CLANG_18 GCC_13

Operating System Support

Windows Linux Mac

Documentation/Examples

Documentation/Examples

Discord Server

This is a link to the Discord server!

Bot Template

A template for utilizing this library.

Features

Convert Snowflakes Into Data


  • Using the discord_core_api::snowflake::toEntity() function of the snowflake class allows for converting the entity's id directly into the data structure represented by it.
discord_core_api::snowflake someChannelId{};
discord_core_api::channel_data newChannel = someChannelId.toEntity<discord_core_api::channel_data>();
std::cout << "CHANNEL NAME: " + newChannel.name << std::endl;

Performant


  • Thanks to utilizing Erlang Text Format for websocket transfer, and a pool of kept-alive HTTPS connections - this library offers the snappiest responses to your interactions and user input.

Audio-Bridge


  • Connect multiple voice-channels to one-another using the StreamInfo member of the VoiceConnectInitData structure, with the VoiceConnection class.

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


  • As a result of using custom asynchronous coroutines along with a thread pool, this library has the ability to make fully asynchronous/concurrent requests to the Discord API.

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 event_manager::onInputEventCreation event.
  • They can all be responded to using the input_events::respondToInputEventAsync() function.
  • Alternatively you can implement your own input-event handling by using the raw event_manager::onInteractionCreation or event_manager::onMessageCreation events.
EmbedData newEmbed{};
newEmbed.setAuthor(args.eventData.getUserName(), args.eventData.getAvatarURL());
newEmbed.setDescription("------\\n__**Sorry, but there's already something play
ing!**__\\n------");
newEmbed.setTimeStamp(getTimeAndDate());
newEmbed.setTitle("__**Playing Issue:**__");
newEmbed.setColor(discordGuild.data.borderColor);
RespondToInputEventData dataPackage{ args.eventData };
dataPackage.addMessageEmbed(newEmbed);
dataPackage.setResponseType(InputEventResponseType::Ephemeral_Interaction_Response);
InputEventData newEvent = input_events::respondToInputEvent(dataPackage);
input_events::deleteInputEventResponseAsync(newEvent, 20000).get();

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++20 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.
  • DiscordCoreAPI (.\vcpkg install jsonifier: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 Opus_DIR, unofficial-sodium_DIR paths to wherever each of the respective dependency files are located and they are as follows:
    • Opus_DIR # Set this one to the folder location of the file "OpusConfig.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 - 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, Opus_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.
    • Opus_DIR # Set this one to the folder location of the file "OpusConfig.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.

About

A bot library for Discord, written in C++, and featuring explicit multithreading through the usage of custom, asynchronous C++ CoRoutines.

discordcoreapi.com

Topics

botbot-librarycoroutinecppdiscorddiscord-apidiscord-botdiscord-corediscord-serverdiscordcoreapirest-apivoice-supportwebsocket

Resources

Readme
MIT license
Activity

Stars

162 stars

Watchers

6 watching

Forks

23 forks
Report repository

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.