Concord is implemented in plain C99, its symbols are organized to be easily matched to the documentation of the API being covered. Concord's implementation has minimum external dependencies to make bot deployment deadly simple.
#include <string.h> // strcmp()
#include <concord/discord.h>
void on_ready(struct discord *client)
{
const struct discord_user *bot = discord_get_self(client);
log_info("Logged in as %s!", bot->username);
}
void on_message(struct discord *client, const struct discord_message *msg)
{
if (strcmp(msg->content, "ping") != 0)
return; // ignore messages that aren't 'ping'
struct discord_create_message params = { .content = "pong" };
discord_create_message(client, msg->channel_id, ¶ms, NULL);
}
int main(void)
{
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 Cygwin
- Make sure that you installed libcurl, gcc, make, and git when you ran the Cygwin installer!
The only dependency is curl-7.4.1
or higher
sudo apt install -y build-essential libcurl4-openssl-dev
sudo xbps-install -S libcurl-devel
sudo apk add curl-dev
$ git clone https://github.com/cogmasters/concord.git && cd concord
$ 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 log output file
"quiet": false, // change to true to disable logs in console
"overwrite": true, // overwrite file if already exists, append otherwise
"use_color": true, // display color for log entries
"http": {
"enable": true, // generate http specific logging
"filename": "http.log" // the HTTP log output file
},
"disable_modules": ["WEBSOCKETS", "USER_AGENT"] // disable logging for these modules
},
"discord": { // discord directives
"token": "YOUR-BOT-TOKEN", // replace with your bot token
"default_prefix": {
"enable": false, // enable default command prefix
"prefix": "YOUR-COMMANDS-PREFIX" // replace with your prefix
}
}
}
- Get your bot token and add it to
config.json
, by assigning it to discord's "token" field. There are well written instructions from discord-irc explaining how to get your bot token and adding it to a server. - Build example executables:
$ make examples
- Run Copycat-Bot:
$ cd examples && ./copycat
Type a message in any channel the bot is part of and the bot should send an exact copy of it in return.
With Ctrl+c or by closing the Terminal.
sudo make install
Included headers must be concord/
prefixed:
#include <concord/discord.h>
$ gcc myBot.c -o myBot -pthread -ldiscord -lcurl
$ clang myBot.c -o myBot -pthread -ldiscord -lcurl
First, make sure your executable is compiled with the -g
flag to ensure human-readable debugger messages.
Using valgrind to check for memory leaks:
valgrind --leak-check=full ./myBot
For a more comprehensive guide check Valgrind's Quick Start.
Using GDB to check for runtime errors, such as segmentation faults:
$ gdb ./myBot
And then execute your bot from the gdb environment:
(gdb) run
If the program has crashed, get a backtrace of the function calls leading to it:
(gdb) bt
For a more comprehensive guide check Beej's Quick Guide to GDB
Problems? Check out our Discord Server.
All kinds of contributions are welcome, all we ask is to abide to our guidelines! If you want to help but is unsure where to get started then our Discord API Roadmap is a good starting point. Check our links for more helpful information.