Orca is implemented in plain C, its symbols are organized to be easily matched to the documentation of the API being covered.
This is done in order to:
- Minimize the need of thoroughly documenting every Orca API.
- Reduce our user's cognitive burden of having to read both Orca API documentation and supported REST API documentations.
- The codebase becomes easier to navigate.
Orca's implementation has minimum external dependencies to make bot deployment deadly simple.
-
Easy to reason about the code: the most native data structures, the simplest algorithms, and intuitive interfaces.
-
Easy to debug (networking and logic) errors: extensive assertion and logging facilities.
-
Easy to use for the end users: highly scalable, all transfers made with Orca are thread-safe.
#include <string.h> // strcmp()
#include <orca/discord.h>
void on_ready(
struct discord *client,
const struct discord_user *bot)
{
log_info("Logged in as %s!", bot->username);
}
void on_message(
struct discord *client,
const struct discord_user *bot,
const struct discord_message *msg)
{
// if message content equals 'ping', then bot responds with 'pong'
if (0 == strcmp(msg->content, "ping")) {
struct discord_create_message_params params = { .content = "pong" };
discord_create_message(client, msg->channel_id, ¶ms, NULL);
}
}
int main() {
struct discord *client = discord_init(BOT_TOKEN);
discord_set_on_ready(client, &on_ready);
discord_set_on_message_create(client, &on_message);
discord_run(client);
}
This is a minimalistic example, refer to examples/
for a better overview.
- Install WSL2 and get either Ubuntu or Debian here.
- Make sure you are in your Linux $HOME folder before proceeding!
- Continue to On Linux and follow your distro's building steps.
The only dependencies are curl-7.64.0
or higher built with OpenSSL, and wget
that will
be used by the Makefile for fetching cee-utils files.
$ sudo apt-get install -y build-essential wget
$ sudo apt-get install -y libcurl4-openssl-dev libssl-dev
$ sudo xbps-install -S wget
$ sudo xbps-install -S libcurl-devel
$ git clone https://github.com/cee-studio/orca.git
$ cd orca
$ make
The following outlines the default fields of config.json
{
"logging": { // logging directives
"level": "trace", // trace, debug, info, warn, error, fatal
"filename": "bot.log", // the output file
"quiet": false, // change to true to disable logs in console
"overwrite": false, // overwrite existing file with "filename"
"use_color": true, // log with color
"http": {
"enable": true, // generate http specific logging
"filename": "http.log" // the output file
},
"disable_modules": ["WEBSOCKETS", "USER_AGENT"] // disable logging for these modules
},
... // API directives (discord, slack, github, etc)
}
- Get your bot token and add it to
config.json
, by assigning it to discord's "token" field. There are well written instructions from the discord-irc about how to get your bot token and adding it to a server. - Build example executables:
$ make examples
- Run Echo-Bot:
$ cd examples $ ./bot-echo.out
Type a message in any channel the bot is part of and the bot should send an echo response in return.
With Ctrl+c or by closing the Terminal.
- Head to
my_bot/
, a special folder set-up for your convenience that may be modified freely. - Read our guide for building your first bot.
Orca can be installed in case developing inside of my_bot/
doesn't suit your needs:
$ sudo make install
Included headers must be orca/
prefixed:
#include <orca/discord.h>
#include <orca/github.h>
$ gcc myBot.c -o myBot.out -ldiscord -lcurl -lcrypto -lpthread -lm
-
The recommended method: Use SaiphC to build your bot and run the generated executable. All runtime memory errors will be reported.
-
The convenient method: Using valgrind which cannot report all runtime memory errors.
$ valgrind ./myBot.out
Check our Contributing Guidelines to get started! If you are here for the Discord API, please check our Discord API Roadmap.
Give us a star if you like this project!