El desarrollo ha estado ocurriendo en la rama de desarrollo. Estamos trabajando en nuevas funciones y mejoras. Para acceder a la última versión de la biblioteca, consulte la rama de desarrollo.
Concord es una biblioteca API de Discord C99 asíncrona con dependencias externas mínimas y una traducción de bajo nivel de la documentación oficial de Discord al código C.
Los siguientes son ejemplos minimalistas; consulte examples/
para obtener una mejor descripción general.
Nota: debes reemplazar GUILD_ID
con un ID de gremio real, ¡o este ejemplo no se compilará! Puedes usar una macro para hacer esto: #define GUILD_ID 1234567898765431
#include <string.h>#include <concord/discord.h>void on_ready(struct discord *cliente, const struct discord_ready *evento) {struct discord_create_guild_application_command params = { .nombre = "ping", .description = "¡Comando ping!"};discord_create_guild_application_command(cliente, evento->aplicación->id, GUILD_ID, ¶ms, NULL); }void on_interaction(struct discord *cliente, const struct discord_interaction *evento) {if (evento->tipo!= DISCORD_INTERACTION_APPLICATION_COMMAND)return; /* regresa si la interacción no es un comando de barra diagonal */if (strcmp(event->data->name, "ping") == 0) { struct discord_interaction_response params = { .tipo = DISCORD_INTERACTION_CHANNEL_MESSAGE_WITH_SOURCE, .datos = &(struct discord_interaction_callback_data){ .content = "pong"} }; discord_create_interaction_response(cliente, evento->id, evento->token, ¶ms, NULL); } }int main(void) {struct discord *cliente = discord_init(BOT_TOKEN);discord_set_on_ready(cliente, &on_ready);discord_set_on_interaction_create(cliente, &on_interaction);discord_run(cliente); }
#include <string.h>#include <concord/discord.h>#include <concord/log.h>void on_ready(struct discord *client, const struct discord_ready *event) {log_info("¡Inicié sesión como %s!" , evento->usuario->nombre de usuario); }void on_message(struct discord *cliente, const struct discord_message *event) {if (strcmp(event->content, "ping") == 0) {struct discord_create_message params = { .content = "pong" };discord_create_message(cliente , evento->channel_id, ¶ms, NULL); } }int main(void) {struct discord *client = discord_init(BOT_TOKEN);discord_add_intents(cliente, DISCORD_GATEWAY_MESSAGE_CONTENT);discord_set_on_ready(cliente, &on_ready);discord_set_on_message_create(cliente, &on_message);discord_run(cliente); }
GNU/Linux 4.x
GratisBSD 12
NetBSD 8.1
Windows 7 (Cygwin)
GNU/Hurd 0.9
MacOS X 10.9
Nota: Los procesadores big-endian que ejecutan ciertos sistemas operativos como SPARC Solaris, PowerPC AIX, System Z z/OS o Linux, o MIPS IRIX NO son compatibles. Actualmente existen algunos problemas que impiden que parte de la lógica funcione correctamente en sistemas big-endian. Esto se solucionará pronto.
La única dependencia es curl-7.56.1
o superior. Si está compilando libcurl desde el código fuente, deberá compilarlo con soporte SSL.
Instalar Cygwin
¡Asegúrese de haber instalado libcurl, gcc, make y git cuando ejecutó el instalador Cygwin!
¡Querrás consultar el tutorial de Windows aquí!
Actualmente NO se admiten Mingw64 y Msys2. Por favor vea esto para más información.
Una vez instalado, compílelo normalmente como lo haría en UNIX/Linux/OS X/BSD.
Nota: probablemente necesitarás incluir -L/usr/local/lib -I/usr/local/include
en tu comando gcc
, o en tu variable CFLAGS
en tu Makefile para tu bot.
(nota: #
significa que debes ejecutarlo como root)
# actualización apta && instalación apta -y libcurl4-openssl-dev
# xbps-instalar -S libcurl-devel
# apk agrega curl-dev
# paquete instalar curl
Nota: necesitará instalar Xcode o, como mínimo, las herramientas de línea de comandos con xcode-select --install
.
$ brew install curl (Homebrew)$ port install curl (MacPorts)
clon de git https://aur.archlinux.org/concord-git.gitcd concord-gitmakepkg -Acspacman -U concord-git-version-any.pkg.tar.zst
Alternativamente, puedes utilizar un asistente AUR:
yay -S concord-git
$ git clon https://github.com/cogmasters/concord.git && cd concordia
$ hacer
Es posible que tenga problemas con el compilador y el vinculador que no encuentran los encabezados de Libcurl. Puedes hacer algo como esto:
$ CFLAGS=-I<alguna_ruta> LDFLAGS=-L<alguna_ruta> hacer
Por ejemplo, en un sistema FreeBSD:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib hacer
En OS X usando MacPorts:
$ CFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib hacer
En OS X usando un libcurl autocompilado:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/include marca
En Windows con Cygwin, es posible que necesites pasar ambos argumentos para usar subprocesos POSIX:
$ CFLAGS="-pthread -lpthread" hacer
En algunos casos, es posible que desee vincular Concord a un objeto compartido o vincularlo como un objeto compartido a otro objeto compartido. En ese caso, necesitarás compilar Concord con CFLAGS="-fpic" make
.
discord_config_init() es el método de inicialización que permite configurar tu bot sin volver a compilarlo.
A continuación se describen los campos config.json
:
{ "logging": { // directivas de registro"level": "trace", // trace, debug, info, warn, error, fatal"filename": "bot.log", // el archivo de salida del registro"quiet": false, // cambia a verdadero para deshabilitar los registros en la consola"overwrite": true, // sobrescribe el archivo si ya existe, agrega lo contrario"use_color": true, // muestra el color de las entradas de registro"http": { "enable": verdadero, // genera el registro específico de http "nombre de archivo": "http.log" // el Archivo de salida de registro HTTP},"disable_modules": ["WEBSOCKETS", "USER_AGENT"] // deshabilita el registro para estos módulos }, "discord": { // directivas de discordia"token": "TU-TOKEN-BOT", // reemplaza con tu token de bot"default_prefix": { "enable": false, // habilita el prefijo de comando predeterminado "prefix": "SUS-COMMANDS-PREFIX" // reemplaza con tu prefijo} }, ... // aquí puedes agregar tus campos personalizados *}
* El contenido de su campo personalizado se puede recuperar con discord_config_get_field()
Obtenga su token de bot y agréguelo a config.json
, asignándolo al campo "token" de Discord. Hay instrucciones bien escritas de discord-irc que explican cómo obtener su token de bot y agregarlo a un servidor.
Construya ejecutables de ejemplo:
$ hacer ejemplos
Ejecute Copycat-Bot:
$ ejemplos de cd && ./copycat
Escriba un mensaje en cualquier canal del que forme parte el bot y el bot debería enviar una copia exacta a cambio.
Con Ctrl + c o con Ctrl + |
A continuación se describen indicadores y objetivos especiales para anular la compilación predeterminada de Makefile con funcionalidades adicionales.
-DCCORD_SIGINTCATCH
De forma predeterminada, Concord no se cerrará correctamente cuando se reciba un SIGINT (es decir, Ctrl + c ), habilite este indicador si desea que lo manejen por usted.
-DCCORD_DEBUG_WEBSOCKETS
Habilite la depuración detallada para la comunicación WebSockets.
-DCCORD_DEBUG_HTTP
Habilite la depuración detallada para la comunicación HTTP.
Ejemplo:
$ CFLAGS="-DCCORD_SIGINTCATCH -DCCORD_DEBUG_HTTP" marca
make shared
Produzca una versión vinculada dinámicamente de Concord. Este Makefile está destinado a compiladores de estilo GNU, como gcc
o clang
.
make shared_osx
Produzca una versión dinámicamente vinculada de Concord, para sistemas OS X y Darwin.
make voice
Habilite el manejo experimental de la conexión de voz; no está listo para producción.
make debug
Habilite algunos indicadores útiles durante el desarrollo, como -O0
y -g
(nota: #
significa que debes ejecutarlo como root)
# hacer instalación
Esto instalará los encabezados y los archivos de la biblioteca en $PREFIX. Puedes anular esto como tal:
# PREFIX=/opt/concord realizar instalación
Para realizar una compilación cruzada de Concord, consulte el manual aquí.
Las siguientes son dependencias stable
y bien documentadas que están empaquetadas con Concord y pueden incluirse en sus proyectos:
Archivo | Descripción |
---|---|
cog-utils | Funciones de propósito general orientadas a la portabilidad. |
registro.c* | Una biblioteca de registro C99 sencilla |
carray* | Implementación basada en macros de matrices con seguridad de tipos |
anomapa* | Almacenamiento de claves/valores ordenados para C99 |
chash* | Implementación basada en macros de tablas hash con seguridad de tipos |
json-compilación | Pequeño serializador JSON de asignación cero |
jsmn-buscar | Pequeño tokenizador JSON de asignación cero |
* Concord utiliza su propia versión modificada que puede no estar actualizada con la original
Tenga en cuenta que los encabezados incluidos deben tener concord/
prefijo:
#incluye <concord/discord.h>#incluye <concord/log.h>
$ gcc miBot.c -o miBot -pthread -ldiscord -lcurl
$ clang myBot.c -o myBot -pthread -ldiscord -lcurl
IBM XL C/C++ (AIX, z/OS, IBM i)
Estudio Sun/Oracle (Solaris)
IRIX MIPSpro C++ (IRIX) -- NOTA: actualmente no es compatible
HP aCC (HP-UX)
Compaq C (Tru64 UNIX) - NOTA: actualmente tampoco es compatible . Nota: si realmente desea compilar esto en uno de los sistemas enumerados anteriormente, consulte la guía "Compilación en computadoras antiguas".
$ cc miBot.c -o miBot -ldiscord -lcurl -lpthread
Nota: algunos sistemas como Cygwin requieren que hagas esto:
$ gcc myBot.c -o myBot -pthread -lpthread -ldiscord -lcurl
(esto enlaza con libpthread.a en /usr/lib
)
Primero, asegúrese de que su ejecutable esté compilado con el indicador -g
para garantizar que los mensajes del depurador sean legibles por humanos.
Usando valgrind para verificar si hay pérdidas de memoria:
valgrind --leak-check=full ./myBot
Para obtener una guía más completa, consulte el Inicio rápido de Valgrind.
Uso de GDB para verificar errores de tiempo de ejecución, como fallas de segmentación:
$ gdb ./miBot
Y luego ejecuta tu bot desde el entorno gdb:
(gdb) ejecutar
Si el programa falló, obtenga un seguimiento de las llamadas a funciones que lo condujeron:
(gdb) bt
Para obtener una guía más completa, consulte la Guía rápida de GDB de Beej.
¿Problemas? Consulte nuestro servidor de Discord
Todo tipo de aportaciones son bienvenidas, ¡lo único que pedimos es respetar nuestras directrices! Si desea ayudar pero no está seguro de por dónde empezar, nuestra hoja de ruta de la API de Discord es un buen punto de partida. Consulte nuestros enlaces para obtener más información útil.
Documentación
Hoja de ruta de la API de Discord
Migrando desde V1
Migrando de Orca