Die Entwicklung findet im Entwicklungszweig statt. Wir arbeiten an neuen Funktionen und Verbesserungen. Um auf die neueste Version der Bibliothek zuzugreifen, schauen Sie sich bitte den Entwicklungszweig an.
Concord ist eine asynchrone C99-Discord-API-Bibliothek mit minimalen externen Abhängigkeiten und einer Low-Level-Übersetzung der offiziellen Discord-Dokumentation in C-Code.
Im Folgenden finden Sie minimalistische Beispiele. Eine bessere Übersicht finden Sie unter examples/
.
Hinweis: Sie müssen GUILD_ID
durch eine tatsächliche Gilden-ID ersetzen, sonst lässt sich dieses Beispiel nicht kompilieren! Sie können dazu ein Makro verwenden: #define GUILD_ID 1234567898765431
#include <string.h>#include <concord/discord.h>void on_ready(struct discord *client, const struct discord_ready *event) {struct discord_create_guild_application_command params = { .name = "ping", .description = "Ping-Befehl!"};discord_create_guild_application_command(client, event->application->id, GUILD_ID, ¶ms, NULL); }void on_interaction(struct discord *client, const struct discord_interaction *event) {if (event->type != DISCORD_INTERACTION_APPLICATION_COMMAND)return; /* Rückgabe, wenn die Interaktion kein Slash-Befehl ist */if (strcmp(event->data->name, "ping") == 0) { struct discord_interaction_response params = { .type = DISCORD_INTERACTION_CHANNEL_MESSAGE_WITH_SOURCE, .data = &(struct discord_interaction_callback_data){ .content = "pong"} }; discord_create_interaction_response(client, event->id, event->token, ¶ms, NULL); } }int main(void) {struct discord *client = discord_init(BOT_TOKEN);discord_set_on_ready(client, &on_ready);discord_set_on_interaction_create(client, &on_interaction);discord_run(client); }
#include <string.h>#include <concord/discord.h>#include <concord/log.h>void on_ready(struct discord *client, const struct discord_ready *event) {log_info("Angemeldet als %s!" , Ereignis->Benutzer->Benutzername); }void on_message(struct discord *client, const struct discord_message *event) {if (strcmp(event->content, "ping") == 0) {struct discord_create_message params = { .content = "pong" };discord_create_message(client , event->channel_id, ¶ms, NULL); } }int main(void) {struct discord *client = discord_init(BOT_TOKEN);discord_add_intents(client, DISCORD_GATEWAY_MESSAGE_CONTENT);discord_set_on_ready(client, &on_ready);discord_set_on_message_create(client, &on_message);discord_run(client); }
GNU/Linux 4.x
FreeBSD 12
NetBSD 8.1
Windows 7 (Cygwin)
GNU/Hurd 0.9
Mac OS X 10.9
Hinweis: Big-Endian-Prozessoren mit bestimmten Betriebssystemen wie SPARC Solaris, PowerPC AIX, System Z z/OS oder Linux oder MIPS IRIX werden NICHT unterstützt. Derzeit gibt es einige Probleme, die verhindern, dass ein Teil der Logik auf Big-Endian-Systemen korrekt funktioniert. Dies wird bald behoben.
Die einzige Abhängigkeit ist curl-7.56.1
oder höher. Wenn Sie libcurl aus dem Quellcode kompilieren, müssen Sie es mit SSL-Unterstützung erstellen.
Installieren Sie Cygwin
Stellen Sie sicher, dass Sie libcurl, gcc, make und git installiert haben, als Sie das Cygwin-Installationsprogramm ausgeführt haben!
Schauen Sie sich das Windows-Tutorial hier an!
Mingw64 und Msys2 werden derzeit NICHT unterstützt. Weitere Informationen finden Sie hier.
Nach der Installation kompilieren Sie es ganz normal, wie Sie es unter UNIX/Linux/OS X/BSD tun würden.
Hinweis: Sie müssen wahrscheinlich -L/usr/local/lib -I/usr/local/include
in Ihren gcc
-Befehl oder in Ihre CFLAGS
Variable in Ihrem Makefile für Ihren Bot einschließen.
(Hinweis – #
bedeutet, dass Sie als Root ausgeführt werden sollten)
# apt update && apt install -y libcurl4-openssl-dev
# xbps-install -S libcurl-devel
# apk curl-dev hinzufügen
# pkg installiere Curl
Hinweis: Sie müssen Xcode oder zumindest die Befehlszeilentools mit xcode-select --install
installieren.
$ brew install curl (Homebrew)$ port install curl (MacPorts)
Git-Klon https://aur.archlinux.org/concord-git.gitcd concord-gitmakepkg -Acspacman -U concord-git-version-any.pkg.tar.zst
Alternativ können Sie einen AUR-Helfer verwenden:
Juhu -S Concord-Git
$ git clone https://github.com/cogmasters/concord.git && cd concord
$ machen
Möglicherweise treten Probleme auf, wenn der Compiler und der Linker Ihre Libcurl-Header nicht finden. Sie können so etwas tun:
$ CFLAGS=-I<some_path> LDFLAGS=-L<some_path> make
Zum Beispiel auf einem FreeBSD-System:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib make
Unter OS X mit MacPorts:
$ CFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib make
Unter OS X mit einer selbstkompilierten libcurl:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/include make
Unter Windows mit Cygwin müssen Sie möglicherweise beide Argumente übergeben, um POSIX-Threading zu verwenden:
$ CFLAGS="-pthread -lpthread" make
In manchen Fällen möchten Sie möglicherweise Concord mit einem gemeinsamen Objekt verknüpfen oder es als gemeinsames Objekt mit einem anderen gemeinsamen Objekt verknüpfen. In diesem Fall müssen Sie Concord mit CFLAGS="-fpic" make
kompilieren.
discord_config_init() ist die Initialisierungsmethode, die die Konfiguration Ihres Bots ohne Neukompilierung ermöglicht.
Im Folgenden werden die Felder config.json
beschrieben:
{ „logging“: { // Protokollierungsanweisungen „level“: „trace“, // Trace, Debug, Info, Warn, Error, Fatal „filename“: „bot.log“, // die Protokollausgabedatei „quiet“: false, // auf true ändern, um Protokolle in der Konsole zu deaktivieren. „overwrite“: true, // Datei überschreiben, falls bereits vorhanden, andernfalls anhängen „use_color“: true, // Farbe für Protokolleinträge anzeigen „http“: { „enable“: true, // HTTP-spezifische Protokollierung generieren „filename“: „http.log“ // die HTTP-Protokollausgabedatei}, „disable_modules“: [“WEBSOCKETS“, „USER_AGENT“] // Protokollierung für diese Module deaktivieren }, „discord“: { // Discord-Anweisungen „token“: „YOUR-BOT-TOKEN“, // durch Ihr Bot-Token ersetzen „default_prefix“: { „enable“: false, // Standardbefehlspräfix aktivieren „prefix“: „YOUR-COMMANDS-PREFIX“ // durch Ihr Präfix ersetzen} }, ... // hier können Sie Ihre benutzerdefinierten Felder hinzufügen *}
* Ihre benutzerdefinierten Feldinhalte können mit discord_config_get_field() abgerufen werden
Holen Sie sich Ihr Bot-Token und fügen Sie es zu config.json
hinzu, indem Sie es dem Feld „Token“ von Discord zuweisen. Es gibt gut geschriebene Anweisungen von Discord-IRC, die erklären, wie Sie Ihren Bot-Token erhalten und ihn einem Server hinzufügen.
Erstellen Sie ausführbare Beispieldateien:
$ Beispiele machen
Führen Sie Copycat-Bot aus:
$ cd Beispiele && ./copycat
Geben Sie eine Nachricht in einen beliebigen Kanal ein, zu dem der Bot gehört, und der Bot sollte im Gegenzug eine exakte Kopie davon senden.
Mit Strg + c oder mit Strg + |
Im Folgenden werden spezielle Flags und Ziele beschrieben, um den Standard-Makefile-Build mit zusätzlichen Funktionen zu überschreiben.
-DCCORD_SIGINTCATCH
Standardmäßig wird Concord nicht ordnungsgemäß heruntergefahren, wenn ein SIGINT empfangen wird (z. B. Strg + c ). Aktivieren Sie dieses Flag, wenn Sie möchten, dass es für Sie erledigt wird.
-DCCORD_DEBUG_WEBSOCKETS
Aktivieren Sie ausführliches Debuggen für die WebSockets-Kommunikation.
-DCCORD_DEBUG_HTTP
Aktivieren Sie ausführliches Debugging für die HTTP-Kommunikation.
Beispiel:
$ CFLAGS="-DCCORD_SIGINTCATCH -DCCORD_DEBUG_HTTP" machen
make shared
Erstellen Sie eine dynamisch verknüpfte Version von Concord. Dieses Makefile ist für GNU-Compiler wie gcc
oder clang
gedacht.
make shared_osx
Erstellen Sie eine dynamisch verknüpfte Version von Concord für OS X- und Darwin-Systeme.
make voice
Aktivieren Sie die experimentelle Handhabung von Sprachverbindungen – nicht produktionsbereit.
make debug
Aktivieren Sie einige während der Entwicklung nützliche Flags, z. B. -O0
und -g
(Hinweis – #
bedeutet, dass Sie als Root ausgeführt werden sollten)
# make install
Dadurch werden die Header und Bibliotheksdateien in $PREFIX installiert. Sie können dies wie folgt überschreiben:
# PREFIX=/opt/concord make install
Informationen zum Cross-Compilieren von Concord finden Sie im Handbuch hier.
Im Folgenden finden Sie stable
und gut dokumentierte Abhängigkeiten, die in Concord enthalten sind und in Ihre Projekte eingebunden werden können:
Datei | Beschreibung |
---|---|
Zahnrad-Utils | Allzweckfunktionen, die auf Portabilität abzielen |
log.c* | Eine einfache C99-Protokollierungsbibliothek |
tragen* | Makrobasierte Implementierung typsicherer Arrays |
Anomap* | Sortierter Schlüssel-/Wertspeicher für C99 |
chash* | Makrobasierte Implementierung typsicherer Hashtabellen |
json-build | Winziger JSON-Serialisierer ohne Zuordnung |
jsmn-find | Winziger JSON-Tokenizer ohne Zuweisung |
* Concord verwendet eine eigene modifizierte Version, die möglicherweise nicht auf dem neuesten Stand des Originals ist
Beachten Sie, dass enthaltene Header concord/
Präfix versehen sein müssen:
#include <concord/discord.h>#include <concord/log.h>
$ gcc myBot.c -o myBot -pthread -ldiscord -lcurl
$ clang myBot.c -o myBot -pthread -ldiscord -lcurl
IBM XL C/C++ (AIX, z/OS, IBM i)
Sun/Oracle Studio (Solaris)
IRIX MIPSpro C++ (IRIX) – HINWEIS: derzeit nicht unterstützt
HP aCC (HP-UX)
Compaq C (Tru64 UNIX) – HINWEIS: wird derzeit ebenfalls nicht unterstützt . Hinweis: Wenn Sie dies tatsächlich auf einem der oben aufgeführten Systeme kompilieren möchten, lesen Sie bitte die Anleitung „Kompilieren auf alten Computern“.
$ cc myBot.c -o myBot -ldiscord -lcurl -lpthread
Hinweis: Bei einigen Systemen wie Cygwin müssen Sie Folgendes tun:
$ gcc myBot.c -o myBot -pthread -lpthread -ldiscord -lcurl
(dieser Link verweist auf libpthread.a in /usr/lib
)
Stellen Sie zunächst sicher, dass Ihre ausführbare Datei mit dem Flag -g
kompiliert ist, um für Menschen lesbare Debugger-Meldungen sicherzustellen.
Mit valgrind nach Speicherlecks suchen:
valgrind --leak-check=full ./myBot
Eine ausführlichere Anleitung finden Sie im Quick Start von Valgrind.
Verwenden von GDB zur Prüfung auf Laufzeitfehler, z. B. Segmentierungsfehler:
$ gdb ./myBot
Und führen Sie dann Ihren Bot aus der GDB-Umgebung aus:
(gdb) ausführen
Wenn das Programm abgestürzt ist, erhalten Sie eine Rückverfolgung der Funktionsaufrufe, die dazu geführt haben:
(gdb) bt
Eine ausführlichere Anleitung finden Sie in Beejs Kurzanleitung zu GDB
Probleme? Schauen Sie sich unseren Discord-Server an
Alle Arten von Beiträgen sind willkommen. Wir bitten Sie lediglich, sich an unsere Richtlinien zu halten! Wenn Sie helfen möchten, sich aber nicht sicher sind, wo Sie anfangen sollen, ist unsere Discord API Roadmap ein guter Ausgangspunkt. Weitere hilfreiche Informationen finden Sie unter unseren Links.
Dokumentation
Discord-API-Roadmap
Migration von V1
Migration von Orca