Le développement a eu lieu dans la branche de développement. Nous travaillons sur de nouvelles fonctionnalités et améliorations. Pour accéder à la dernière version de la bibliothèque, veuillez consulter la branche dev.
Concord est une bibliothèque API C99 Discord asynchrone avec des dépendances externes minimales et une traduction de bas niveau de la documentation officielle de Discord en code C.
Les exemples suivants sont des exemples minimalistes, reportez-vous aux examples/
pour un meilleur aperçu.
Remarque : vous devez remplacer GUILD_ID
par un véritable identifiant de guilde, sinon cet exemple ne sera pas compilé ! Vous pouvez utiliser une macro pour ce faire : #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 = "Commande Ping !"};discord_create_guild_application_command(client, événement->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; /* renvoie si l'interaction n'est pas une commande slash */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, événement->id, événement->jeton, ¶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("Connecté en tant que %s!" , événement->utilisateur->nom d'utilisateur); }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); }
GNU/Linux 4.x
GratuitBSD 12
NetBSD 8.1
Windows 7 (Cygwin)
GNU/Hurd 0.9
Mac OS X 10.9
Remarque : les processeurs big-endian exécutant certains systèmes d'exploitation tels que SPARC Solaris, PowerPC AIX, System Z z/OS ou Linux ou MIPS IRIX ne sont PAS pris en charge. Il existe actuellement quelques problèmes qui empêchent une partie de la logique de fonctionner correctement sur les systèmes big-endian. Cela sera bientôt corrigé.
La seule dépendance est curl-7.56.1
ou supérieur. Si vous compilez libcurl à partir des sources, vous devrez le construire avec le support SSL.
Installer Cygwin
Assurez-vous d'avoir installé libcurl, gcc, make et git lorsque vous avez exécuté le programme d'installation de Cygwin !
Vous voudrez consulter le didacticiel Windows ici !
Mingw64 et Msys2 ne sont actuellement PAS pris en charge. Veuillez consulter ceci pour plus d'informations.
Une fois installé, compilez-le normalement comme vous le feriez sous UNIX/Linux/OS X/BSD.
Remarque : vous devrez probablement inclure -L/usr/local/lib -I/usr/local/include
dans votre commande gcc
ou dans votre variable CFLAGS
dans votre Makefile pour votre bot.
(remarque -- #
signifie que vous devez exécuter en tant que root)
# apt update && apt install -y libcurl4-openssl-dev
# xbps-install -S libcurl-devel
# apk ajouter curl-dev
# paquet d'installation curl
Remarque : vous devrez installer Xcode, ou au minimum, les outils de ligne de commande avec xcode-select --install
.
$ Brew Install Curl (Homebrew) $ Port Install Curl (MacPorts)
git clone https://aur.archlinux.org/concord-git.gitcd concord-gitmakepkg -Acspacman -U concord-git-version-any.pkg.tar.zst
Alternativement, vous pouvez utiliser un assistant AUR :
ouais -S concord-git
$ git clone https://github.com/cogmasters/concord.git && cd concord
$ faire
Vous pourriez rencontrer des problèmes si le compilateur et l'éditeur de liens ne trouvent pas vos en-têtes Libcurl. Vous pouvez faire quelque chose comme ceci :
$ CFLAGS=-I<un_chemin> LDFLAGS=-L<un_chemin> make
Par exemple, sur un système FreeBSD :
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib make
Sous OS X avec MacPorts :
$ CFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib make
Sous OS X en utilisant une libcurl auto-compilée :
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/include make
Sous Windows avec Cygwin, vous devrez peut-être transmettre les deux arguments pour utiliser le thread POSIX :
$ CFLAGS="-pthread -lpthread" faire
Dans certains cas, vous souhaiterez peut-être lier Concord à un objet partagé ou le lier en tant qu'objet partagé à un autre objet partagé. Dans ce cas, vous devrez compiler Concord avec CFLAGS="-fpic" make
.
discord_config_init() est la méthode d'initialisation qui permet de configurer votre bot sans recompiler.
Ce qui suit décrit les champs config.json
:
{ "logging": { // directives de journalisation "level": "trace", // trace, debug, info, warn, error, fatal"filename": "bot.log", // le fichier de sortie du journal "quiet": false, // passer à true pour désactiver les journaux dans la console "overwrite": true, // écraser le fichier s'il existe déjà, ajouter sinon "use_color": true, // afficher la couleur des entrées de journal "http": { "enable": true, // génère la journalisation spécifique http "filename": "http.log" // le journal HTTP fichier de sortie},"disable_modules": ["WEBSOCKETS", "USER_AGENT"] // désactive la journalisation pour ces modules }, "discord": { // directives discord"token": "VOTRE-BOT-TOKEN", // remplacez par votre jeton de bot"default_prefix": { "enable": false, // active le préfixe de commande par défaut "prefix": "YOUR-COMMANDS-PREFIX" // remplace par votre préfixe} }, ... // ici vous pouvez ajouter vos champs personnalisés *}
* Le contenu de votre champ personnalisé peut être récupéré avec discord_config_get_field()
Obtenez votre jeton de bot et ajoutez-le à config.json
, en l'attribuant au champ "jeton" de Discord. Il existe des instructions bien écrites de Discord-irc expliquant comment obtenir votre jeton de bot et l'ajouter à un serveur.
Créez des exemples d'exécutables :
$ faire des exemples
Exécutez Copycat-Bot :
$ cd exemples && ./copycat
Tapez un message sur n’importe quel canal dont le bot fait partie et le bot doit en envoyer une copie exacte en retour.
Avec Ctrl + c ou avec Ctrl + |
Ce qui suit décrit les indicateurs et cibles spéciaux pour remplacer la construction Makefile par défaut avec des fonctionnalités supplémentaires.
-DCCORD_SIGINTCATCH
Par défaut, Concord ne s'arrêtera pas correctement lorsqu'un SIGINT est reçu (c'est-à-dire Ctrl + c ), activez cet indicateur si vous souhaitez qu'il soit géré pour vous.
-DCCORD_DEBUG_WEBSOCKETS
Activez le débogage détaillé pour la communication WebSockets.
-DCCORD_DEBUG_HTTP
Activez le débogage détaillé pour la communication HTTP.
Exemple:
$ CFLAGS="-DCCORD_SIGINTCATCH -DCCORD_DEBUG_HTTP" faire
make shared
Produisez une version liée dynamiquement de Concord. Ce Makefile est destiné aux compilateurs de style GNU, tels que gcc
ou clang
.
make shared_osx
Produisez une version liée dynamiquement de Concord, pour les systèmes OS X et Darwin.
make voice
Activer la gestion expérimentale des connexions vocales - pas prêt pour la production.
make debug
Activer certains indicateurs utiles lors du développement, tels que -O0
et -g
(remarque -- #
signifie que vous devez exécuter en tant que root)
# faire installer
Cela installera les en-têtes et les fichiers de bibliothèque dans $PREFIX. Vous pouvez remplacer cela comme tel :
# PREFIX=/opt/concord make install
Pour compiler Concord de manière croisée, consultez le manuel ici.
Les éléments suivants sont des dépendances stable
et bien documentées qui sont fournies avec Concord et peuvent être incluses dans vos projets :
Déposer | Description |
---|---|
rouage-utils | Fonctions à usage général visant la portabilité |
log.c* | Une simple bibliothèque de journalisation C99 |
carray* | Implémentation basée sur des macros de tableaux de type sécurisé |
anocarte* | Stockage clé/valeur trié pour C99 |
chah* | Implémentation basée sur des macros de tables de hachage de type sécurisé |
json-build | Petit sérialiseur JSON à allocation nulle |
jsmn-trouver | Petit tokenizer JSON à allocation nulle |
* Concord utilise sa propre version modifiée qui peut ne pas être à jour par rapport à l'original
Notez que les en-têtes inclus doivent être concord/
préfixés :
#include <concord/discord.h>#include <concord/log.h>
$ gcc monBot.c -o monBot -pthread -ldiscord -lcurl
$ clang monBot.c -o monBot -pthread -ldiscord -lcurl
IBM XL C/C++ (AIX, z/OS, IBM i)
Sun/Oracle Studio (Solaris)
IRIX MIPSpro C++ (IRIX) -- REMARQUE : actuellement non pris en charge
HP aCC (HP-UX)
Compaq C (Tru64 UNIX) -- REMARQUE : actuellement non pris en charge . Remarque : si vous souhaitez réellement compiler ceci sur l'un des systèmes répertoriés ci-dessus, veuillez consulter le guide "Compilation sur d'anciens ordinateurs".
$ cc monBot.c -o monBot -ldiscord -lcurl -lpthread
Remarque : certains systèmes tels que Cygwin nécessitent que vous fassiez ceci :
$ gcc monBot.c -o monBot -pthread -lpthread -ldiscord -lcurl
(ce lien contre libpthread.a dans /usr/lib
)
Tout d’abord, assurez-vous que votre exécutable est compilé avec l’indicateur -g
pour garantir des messages du débogueur lisibles par l’homme.
Utiliser valgrind pour vérifier les fuites de mémoire :
valgrind --leak-check=full ./myBot
Pour un guide plus complet, consultez le démarrage rapide de Valgrind.
Utilisation de GDB pour vérifier les erreurs d'exécution, telles que les erreurs de segmentation :
$ gdb ./monBot
Et puis exécutez votre bot depuis l'environnement gdb :
(gdb) exécuter
Si le programme a planté, obtenez une trace des appels de fonction qui y ont conduit :
(gdb)bt
Pour un guide plus complet, consultez le guide rapide de Beej sur GDB.
Des problèmes ? Découvrez notre serveur Discord
Toutes sortes de contributions sont les bienvenues, tout ce que nous demandons c'est de respecter nos directives ! Si vous souhaitez aider mais ne savez pas par où commencer, notre feuille de route de l'API Discord est un bon point de départ. Consultez nos liens pour des informations plus utiles.
Documentation
Feuille de route de l'API Discord
Migration depuis la V1
Migration depuis Orca