dev 브랜치에서 개발이 진행되고 있습니다. 우리는 새로운 기능과 개선 사항을 위해 노력하고 있습니다. 최신 버전의 라이브러리에 액세스하려면 dev 브랜치를 확인하세요.
Concord는 외부 종속성을 최소화하고 Discord 공식 문서를 C 코드로 저수준 번역한 비동기 C99 Discord API 라이브러리입니다.
다음은 최소한의 예입니다. 더 나은 개요를 보려면 examples/
를 참조하세요.
참고: GUILD_ID
실제 길드 ID로 바꿔야 합니다. 그렇지 않으면 이 예제가 컴파일되지 않습니다! 매크로를 사용하여 이를 수행할 수 있습니다: #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 = "핑", .description = "핑 명령!"};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; /* 상호 작용이 슬래시 명령이 아닌 경우 반환 */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 = "퐁"} }; discord_create_interaction_response(클라이언트, 이벤트->id, 이벤트->토큰, ¶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("%s로 로그인했습니다!" , 이벤트->사용자->사용자 이름); }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 , 이벤트->채널_ID, ¶ms, NULL); } }int main(void) {struct discord *client = discord_init(BOT_TOKEN);discord_add_intents(클라이언트, DISCORD_GATEWAY_MESSAGE_CONTENT);discord_set_on_ready(클라이언트, &on_ready);discord_set_on_message_create(클라이언트, &on_message);discord_run(클라이언트); }
GNU/리눅스 4.x
프리BSD 12
NetBSD 8.1
윈도우 7(시그윈)
GNU/허드 0.9
맥 OS X 10.9
참고: SPARC Solaris, PowerPC AIX, System Z z/OS, Linux 또는 MIPS IRIX와 같은 특정 OS를 실행하는 빅엔디안 프로세서는 지원되지 않습니다. 현재 빅엔디안 시스템에서 일부 논리가 올바르게 작동하지 못하게 하는 몇 가지 문제가 있습니다. 이 문제는 곧 수정될 예정입니다.
유일한 종속성은 curl-7.56.1
이상입니다. 소스에서 libcurl을 컴파일하는 경우 SSL 지원을 사용하여 빌드해야 합니다.
시그윈 설치
Cygwin 설치 프로그램을 실행할 때 libcurl, gcc, make 및 git을 설치했는지 확인하세요!
여기에서 Windows 튜토리얼을 확인하고 싶을 것입니다!
Mingw64 및 Msys2는 현재 지원되지 않습니다. 자세한 내용은 여기를 참조하세요.
일단 설치되면 UNIX/Linux/OS X/BSD에서와 마찬가지로 정상적으로 컴파일하십시오.
참고: gcc
명령에 -L/usr/local/lib -I/usr/local/include
포함하거나 봇용 Makefile의 CFLAGS
변수에 포함해야 할 수도 있습니다.
(참고 - #
루트로 실행해야 함을 의미합니다.)
# 적절한 업데이트 && apt install -y libcurl4-openssl-dev
# xbps-install -S libcurl-devel
# apk add 컬-dev
# pkg 설치 컬
참고: Xcode를 설치하거나 최소한 xcode-select --install
사용하여 명령줄 도구를 설치해야 합니다.
$ Brew install 컬(Homebrew)$ 포트 설치 컬(MacPorts)
자식 클론 https://aur.archlinux.org/concord-git.gitcd concord-gitmakepkg -Acspacman -U concord-git-version-any.pkg.tar.zst
또는 AUR 도우미를 사용할 수 있습니다.
예 -S 콩코드-git
$ git clone https://github.com/cogmasters/concord.git && cd 콩코드
$만들다
컴파일러와 링커가 Libcurl 헤더를 찾지 못하는 문제가 발생할 수 있습니다. 다음과 같이 할 수 있습니다:
$ CFLAGS=-I<some_path> LDFLAGS=-L<some_path> make
예를 들어, FreeBSD 시스템에서는:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib make
MacPorts를 사용하는 OS X:
$ CFLAGS=-I/opt/local/include LDFLAGS=-L/opt/local/lib make
자체 컴파일된 libcurl을 사용하는 OS X의 경우:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/include make
Cygwin이 설치된 Windows에서는 POSIX 스레딩을 사용하려면 두 인수를 모두 전달해야 할 수도 있습니다.
$ CFLAGS="-pthread -lpthread" 확인
경우에 따라 Concord를 공유 개체에 연결하거나 공유 개체로 다른 공유 개체에 연결해야 할 수도 있습니다. 이 경우 CFLAGS="-fpic" make
사용하여 Concord를 컴파일해야 합니다.
discord_config_init()는 다시 컴파일하지 않고도 봇을 구성할 수 있는 초기화 방법입니다.
다음은 config.json
필드에 대한 개요입니다.
{ "logging": { // 로깅 지시문"level": "trace", // 추적, 디버그, 정보, 경고, 오류, fatal"filename": "bot.log", // 로그 출력 파일"quiet": false, // 콘솔에서 로그를 비활성화하려면 true로 변경합니다."overwrite": true, // 파일이 이미 있으면 덮어쓰고, 그렇지 않으면 추가합니다."use_color": true, // 로그 항목의 색상 표시"http": { "enable": true, // http 특정 로깅 "filename"을 생성합니다: "http.log" // HTTP 로그 출력 파일},"disable_modules": ["WEBSOCKETS", "USER_AGENT"] // 이 모듈에 대한 로깅을 비활성화합니다. }, "discord": { // discord directives"token": "YOUR-BOT-TOKEN", // 봇 토큰으로 교체합니다. "default_prefix": { "enable": false, // 기본 명령 접두사 활성화 "prefix": "YOUR-COMMANDS-PREFIX" // 접두사로 교체} }, ... // 여기에 사용자 정의 필드를 추가할 수 있습니다 *}
* 사용자 정의 필드 내용은 discord_config_get_field()를 사용하여 가져올 수 있습니다.
봇 토큰을 가져와서 discord의 "토큰" 필드에 할당하여 config.json
에 추가하세요. 봇 토큰을 얻고 서버에 추가하는 방법을 설명하는 discord-irc의 잘 작성된 지침이 있습니다.
예제 실행 파일 빌드:
$ 예시를 만들어 보세요
Copycat-Bot을 실행합니다:
$ CD 예제 && ./copycat
봇이 속한 채널에 메시지를 입력하면 봇이 그 답례로 정확한 사본을 보내야 합니다.
Ctrl + c 또는 Ctrl + |
다음은 추가 기능으로 기본 Makefile 빌드를 재정의하기 위한 특수 플래그와 대상에 대해 설명합니다.
-DCCORD_SIGINTCATCH
기본적으로 Concord는 SIGINT를 수신할 때(예: Ctrl + c ) 정상적으로 종료되지 않습니다. 이를 처리하려면 이 플래그를 활성화하십시오.
-DCCORD_DEBUG_WEBSOCKETS
WebSocket 통신에 대해 자세한 디버깅을 활성화합니다.
-DCCORD_DEBUG_HTTP
HTTP 통신에 대해 자세한 디버깅을 활성화합니다.
예:
$ CFLAGS="-DCCORD_SIGINTCATCH -DCCORD_DEBUG_HTTP" 만들기
make shared
동적으로 연결된 Concord 버전을 생성합니다. 이 Makefile은 gcc
또는 clang
과 같은 GNU 스타일 컴파일러용입니다.
make shared_osx
OS X 및 Darwin 시스템용으로 동적으로 연결된 Concord 버전을 생성합니다.
make voice
실험적인 음성 연결 처리를 활성화합니다. 아직 생산 준비가 되어 있지 않습니다.
make debug
-O0
및 -g
와 같이 개발 중에 유용한 일부 플래그를 활성화합니다.
(참고 - #
루트로 실행해야 함을 의미합니다.)
# 설치를 해준다
그러면 헤더와 라이브러리 파일이 $PREFIX에 설치됩니다. 다음과 같이 이를 재정의할 수 있습니다.
# PREFIX=/opt/concord make install
Concord를 크로스 컴파일하려면 여기에서 매뉴얼을 참조하세요.
다음은 Concord와 함께 패키지되어 프로젝트에 포함될 수 있는 stable
이고 잘 문서화된 종속성입니다.
파일 | 설명 |
---|---|
장부 유틸리티 | 휴대성을 지향한 범용 기능 |
로그.c* | 간단한 C99 로깅 라이브러리 |
캐리* | 유형이 안전한 배열의 매크로 기반 구현 |
아노맵* | C99에 대한 정렬된 키/값 저장소 |
캐쉬* | 유형이 안전한 해시테이블의 매크로 기반 구현 |
JSON 빌드 | 할당이 전혀 없는 작은 JSON 직렬 변환기 |
jsmn-찾기 | 할당이 전혀 없는 작은 JSON 토크나이저 |
* Concord는 원본과 최신이 아닐 수 있는 자체 수정 버전을 사용합니다.
포함된 헤더에는 concord/
접두사가 붙어야 합니다.
#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)
썬/오라클 스튜디오(Solaris)
IRIX MIPSpro C++(IRIX) -- 참고: 현재 지원되지 않음
HP aCC(HP-UX)
Compaq C(Tru64 UNIX) -- 참고: 현재도 지원되지 않음 참고: 위에 나열된 시스템 중 하나에서 실제로 컴파일하려면 "이전 컴퓨터에서 컴파일" 가이드를 참조하세요.
$ cc myBot.c -o myBot -ldiscord -lcurl -lpthread
참고: Cygwin 과 같은 일부 시스템에서는 다음을 수행해야 합니다.
$ gcc myBot.c -o myBot -pthread -lpthread -ldiscord -lcurl
(이것은 /usr/lib
의 libpthread.a에 대한 링크입니다)
먼저, 사람이 읽을 수 있는 디버거 메시지를 보장하기 위해 실행 파일이 -g
플래그로 컴파일되었는지 확인하세요.
Valgrind를 사용하여 메모리 누수 확인:
valgrind --leak-check=full ./myBot
보다 포괄적인 가이드를 보려면 Valgrind의 Quick Start를 확인하세요.
분할 오류와 같은 런타임 오류를 확인하기 위해 GDB를 사용하기:
$ gdb ./myBot
그런 다음 gdb 환경에서 봇을 실행합니다.
(gdb) 실행
프로그램이 충돌한 경우 해당 프로그램으로 이어지는 함수 호출의 역추적을 가져옵니다.
(gdb) BT
보다 포괄적인 가이드를 보려면 Beej의 GDB에 대한 빠른 가이드를 확인하세요.
문제가 있나요? Discord 서버를 확인해 보세요
모든 종류의 기여를 환영합니다. 우리가 요구하는 것은 지침을 준수하는 것뿐입니다! 도움을 주고 싶지만 어디서부터 시작해야 할지 확신이 없다면 Discord API 로드맵이 좋은 출발점이 될 것입니다. 더 유용한 정보를 보려면 링크를 확인하세요.
선적 서류 비치
Discord API 로드맵
V1에서 마이그레이션
오르카에서 마이그레이션