O desenvolvimento tem acontecido no ramo de desenvolvimento. Estamos trabalhando em novos recursos e melhorias. Para acessar a versão mais recente da biblioteca, verifique o branch dev.
Concord é uma biblioteca C99 Discord API assíncrona com dependências externas mínimas e uma tradução de baixo nível da documentação oficial do Discord para código C.
A seguir estão exemplos minimalistas, consulte examples/
para uma melhor visão geral.
Nota: você precisa substituir GUILD_ID
por um ID de guilda real, ou este exemplo não será compilado! Você pode usar uma macro para fazer isso: #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 = { .nome = "ping", .description = "Comando Ping!"};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; /* retornar se a interação não for um comando de barra */if (strcmp(event->data->name, "ping") == 0) { struct discord_interaction_response params = { .type = DISCORD_INTERACTION_CHANNEL_MESSAGE_WITH_SOURCE, .data = &(estrutura discord_interaction_callback_data){ .content = "pong"} }; discord_create_interaction_response(cliente, evento->id, evento->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("Logado como %s!" , evento->usuário->nome de usuário); }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(cliente , evento->canal_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
Observação: processadores big-endian executando determinados sistemas operacionais como SPARC Solaris, PowerPC AIX, System Z z/OS ou Linux ou MIPS IRIX NÃO são suportados. Atualmente, existem alguns problemas que impedem que parte da lógica funcione corretamente em sistemas big-endian. Isso será corrigido em breve.
A única dependência é curl-7.56.1
ou superior. Se você estiver compilando o libcurl a partir do código-fonte, precisará construí-lo com suporte SSL.
Instale o Cygwin
Certifique-se de ter instalado libcurl, gcc, make e git ao executar o instalador Cygwin!
Você vai querer conferir o tutorial do Windows aqui!
Atualmente, Mingw64 e Msys2 NÃO são suportados. Por favor, veja isto para mais informações.
Uma vez instalado, compile-o normalmente como faria no UNIX/Linux/OS X/BSD.
Nota: você provavelmente precisará incluir -L/usr/local/lib -I/usr/local/include
em seu comando gcc
ou em sua variável CFLAGS
em seu Makefile para seu bot.
(nota -- #
significa que você deve estar executando como root)
# apt update && apt install -y libcurl4-openssl-dev
# xbps-install -S libcurl-devel
# apk adicionar curl-dev
# pacote instala curl
Nota: você precisará instalar o Xcode ou, no mínimo, as ferramentas de linha de comando com xcode-select --install
.
$ brew install curl (Homebrew)$ port install curl (MacPorts)
clone git https://aur.archlinux.org/concord-git.gitcd concord-gitmakepkg -Acspacman -U concord-git-version-any.pkg.tar.zst
Alternativamente, você pode usar um auxiliar AUR:
sim -S concord-git
$ git clone https://github.com/cogmasters/concord.git && cd concord
$ fazer
Você pode ter problemas com o compilador e o vinculador não encontrando os cabeçalhos do Libcurl. Você pode fazer algo assim:
$ CFLAGS=-I<algum_caminho> LDFLAGS=-L<algum_caminho> make
Por exemplo, em um sistema FreeBSD:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib make
No OS X usando MacPorts:
$ CFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib make
No OS X usando um libcurl autocompilado:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/include make
No Windows com Cygwin, pode ser necessário passar ambos os argumentos para usar o threading POSIX:
$ CFLAGS="-pthread -lpthread" fazer
Em alguns casos, você pode querer vincular o Concord a um objeto compartilhado ou vinculá-lo como um objeto compartilhado a outro objeto compartilhado. Nesse caso, você precisará compilar o Concord com CFLAGS="-fpic" make
.
discord_config_init() é o método de inicialização que permite configurar seu bot sem recompilar.
O seguinte descreve os campos config.json
:
{ "logging": { // diretivas de registro"level": "trace", // trace, debug, info, warning, error, fatal"filename": "bot.log", // o arquivo de saída de log"quiet": false, // mude para true para desabilitar logs no console"overwrite": true, // sobrescreva o arquivo se já existir, anexe caso contrário"use_color": true, // exibe cor para entradas de log"http": { "enable": true, // gera o log específico http "filename": "http.log" // o arquivo de saída do log HTTP},"disable_modules": ["WEBSOCKETS", "USER_AGENT"] // desabilita o log para esses módulos }, "discord": { // diretivas discord"token": "YOUR-BOT-TOKEN", // substitua pelo token do seu bot"default_prefix": { "enable": false, // habilita o prefixo de comando padrão "prefix": "YOUR-COMMANDS-PREFIX" // substitua pelo seu prefixo} }, ... // aqui você pode adicionar seus campos personalizados *}
* O conteúdo do seu campo personalizado pode ser obtido com discord_config_get_field()
Obtenha o token do seu bot e adicione-o ao config.json
, atribuindo-o ao campo "token" do discord. Existem instruções bem escritas do discord-irc explicando como obter seu token de bot e adicioná-lo a um servidor.
Crie executáveis de exemplo:
$ faça exemplos
Execute o Copycat-Bot:
$ exemplos de cd && ./copycat
Digite uma mensagem em qualquer canal do qual o bot faça parte e o bot deverá enviar uma cópia exata dela em troca.
Com Ctrl + c ou com Ctrl + |
A seguir descreve sinalizadores e alvos especiais para substituir a construção padrão do Makefile com funcionalidades adicionais.
-DCCORD_SIGINTCATCH
Por padrão, o Concord não será encerrado normalmente quando um SIGINT for recebido (ou seja, Ctrl + c ), habilite este sinalizador se desejar que ele seja tratado para você.
-DCCORD_DEBUG_WEBSOCKETS
Habilite a depuração detalhada para comunicação WebSockets.
-DCCORD_DEBUG_HTTP
Habilite a depuração detalhada para comunicação HTTP.
Exemplo:
$ CFLAGS="-DCCORD_SIGINTCATCH -DCCORD_DEBUG_HTTP" fazer
make shared
Produza uma versão vinculada dinamicamente do Concord. Este Makefile é destinado a compiladores estilo GNU, como gcc
ou clang
.
make shared_osx
Produza uma versão vinculada dinamicamente do Concord, para sistemas OS X e Darwin.
make voice
Habilite o tratamento experimental da conexão de voz - não está pronto para produção.
make debug
Habilite alguns sinalizadores úteis durante o desenvolvimento, como -O0
e -g
(nota -- #
significa que você deve estar executando como root)
#faça a instalação
Isso instalará os cabeçalhos e os arquivos da biblioteca em $PREFIX. Você pode substituir isso da seguinte forma:
# PREFIX=/opt/concord make install
Para compilar o Concord, consulte o manual aqui.
A seguir estão dependências stable
e bem documentadas que são empacotadas com Concord e podem ser incluídas em seus projetos:
Arquivo | Descrição |
---|---|
cog-utils | Funções de uso geral voltadas à portabilidade |
registro.c* | Uma biblioteca de registro C99 simples |
carro* | Implementação baseada em macro de matrizes de tipo seguro |
anomapa* | Armazenamento de chave/valor classificado para C99 |
dinheiro* | Implementação baseada em macro de hashtables de tipo seguro |
construção json | Serializador JSON minúsculo e com alocação zero |
jsmn-encontrar | Tokenizer JSON minúsculo e de alocação zero |
* Concord usa sua própria versão modificada que pode não estar atualizada com o original
Observe que os cabeçalhos incluídos devem ser concord/
prefixados:
#include <concord/discord.h>#include <concord/log.h>
$ gcc meuBot.c -o meuBot -pthread -ldiscord -lcurl
$ clang meuBot.c -o meuBot -pthread -ldiscord -lcurl
IBM XL C/C++ (AIX, z/OS, IBM i)
Estúdio Sun/Oracle (Solaris)
IRIX MIPSpro C++ (IRIX) – NOTA: atualmente não suportado
HP aCC (HP-UX)
Compaq C (Tru64 UNIX) -- NOTA: atualmente também não é suportado Nota: se você deseja realmente compilar isso em um dos sistemas listados acima, consulte o guia "Compilando em computadores antigos".
$ cc meuBot.c -o meuBot -ldiscord -lcurl -lpthread
Nota: alguns sistemas como o Cygwin exigem que você faça isso:
$ gcc meuBot.c -o meuBot -pthread -lpthread -ldiscord -lcurl
(isso está vinculado a libpthread.a em /usr/lib
)
Primeiro, certifique-se de que seu executável esteja compilado com o sinalizador -g
para garantir mensagens do depurador legíveis por humanos.
Usando valgrind para verificar vazamentos de memória:
valgrind --leak-check=full ./myBot
Para um guia mais abrangente, verifique o Quick Start do Valgrind.
Usando GDB para verificar erros de tempo de execução, como falhas de segmentação:
$ gdb ./myBot
E então execute seu bot no ambiente gdb:
(gdb) executar
Se o programa travou, obtenha um backtrace das chamadas de função que levaram a ele:
(gdb) bt
Para um guia mais abrangente, verifique o Guia rápido do Beej para GDB
Problemas? Confira nosso servidor Discord
Todos os tipos de contribuições são bem-vindos, tudo o que pedimos é que cumpram as nossas diretrizes! Se você quiser ajudar, mas não sabe por onde começar, nosso Discord API Roadmap é um bom ponto de partida. Verifique nossos links para obter mais informações úteis.
Documentação
Roteiro da API Discord
Migrando da V1
Migrando do Orca