開發一直在開發分支進行。我們正在致力於新功能和改進。若要存取該程式庫的最新版本,請查看 dev 分支。
Concord 是一個非同步 C99 Discord API 庫,具有最小的外部依賴性,並且是 Discord 官方文件到 C 程式碼的低階翻譯。
以下是簡約範例,請參閱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 = "ping", .description =“Ping 指令!”};discord_create_guild_application_command(客戶端、事件->應用程式->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 = &(結構discord_interaction_callback_data){ .內容=“乒乓”} }; 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_clicreate_message(cliclient_message( , 事件->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); }
GNU/Linux 4.x
自由BSD 12
網路BSD 8.1
Windows 7(Cygwin)
GNU/赫德 0.9
Mac OS X 10.9
注意:不支援執行某些作業系統(例如 SPARC Solaris、PowerPC AIX、System Z z/OS 或 Linux 或 MIPS IRIX)的大端處理器。目前存在一些問題,導致某些邏輯在大端系統上無法正確運作。這個問題很快就會解決。
唯一的依賴項是curl-7.56.1
或更高版本。如果您從原始程式碼編譯 libcurl,則需要使用 SSL 支援來建置它。
安裝Cygwin
確保在執行 Cygwin 安裝程式時安裝了 libcurl、gcc、make 和 git!
您將需要在此處查看 Windows 教學!
目前不支援 Mingw64 和 Msys2。請參閱此以了解更多資訊。
安裝後,像在 UNIX/Linux/OS X/BSD 上一樣正常編譯它。
注意:您可能需要在gcc
指令中包含-L/usr/local/lib -I/usr/local/include
,或是在機器人的 Makefile 中的CFLAGS
變數中包含。
(注意 - #
表示您應該以 root 身分執行)
# apt update && apt install -y libcurl4-openssl-dev
# xbps-install -S libcurl-devel
# apk 新增curl-dev
#pkg安裝curl
注意:您需要安裝 Xcode,或至少需要使用xcode-select --install
安裝命令列工具。
$brew 安裝curl (Homebrew)$port 安裝curl (MacPorts)
git 克隆 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 concord
$ 製作
您可能會遇到編譯器和連結器找不到您的 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
在 OS X 上使用自編譯的 libcurl:
$ CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/include make
在裝有 Cygwin 的 Windows 上,您可能需要傳遞兩個參數才能使用 POSIX 執行緒:
$ CFLAGS="-pthread -lpthread" make
在某些情況下,您可能希望將 Concord 連結到共享對象,或將其作為共享對象連結到另一個共享對象。在這種情況下,您需要使用CFLAGS="-fpic" make
編譯 Concord。
Discord_config_init() 是初始化方法,允許在不重新編譯的情況下設定您的機器人。
以下概述了config.json
字段:
{ "logging": { // 日誌指令"level": "trace", // Trace, debug, info, warn, error, 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": { // 不和諧指令"token": "YOUR-BOT-TOKEN", // 替換為您的機器人令牌"default_prefix": { "enable": false, // 啟用預設指令前綴 "prefix": "YOUR-COMMANDS-PREFIX" // 替換為您的前綴} }, ... // 在這裡您可以新增自訂欄位 *}
*您的自訂欄位內容可以使用discord_config_get_field()來取得
取得您的機器人令牌並將其新增至config.json
,方法是將其指派給不和諧的「令牌」欄位。 Discord-irc 提供了詳細的說明,說明如何取得機器人代幣並將其新增至伺服器。
建置範例可執行檔:
$ 舉例
運行 Copycat-Bot:
$ cd 範例 && ./copycat
在機器人所屬的任何頻道中輸入一則訊息,機器人應該發送該訊息的精確副本作為回報。
使用Ctrl + c或使用Ctrl + |
下面概述了使用附加功能覆蓋預設 Makefile 建置的特殊標誌和目標。
-DCCORD_SIGINTCATCH
預設情況下,當收到 SIGINT(即Ctrl + c )時,Concord 不會正常關閉,如果您希望為您處理它,請啟用此標誌。
-DCCORD_DEBUG_WEBSOCKETS
啟用 WebSocket 通訊的詳細偵錯。
-DCCORD_DEBUG_HTTP
啟用 HTTP 通訊的詳細調試。
例子:
$ CFLAGS =「-DCCORD_SIGINTCATCH -DCCORD_DEBUG_HTTP」使
make shared
產生 Concord 的動態連結版本。此 Makefile 適用於 GNU 風格的編譯器,例如gcc
或clang
。
make shared_osx
為 OS X 和 Darwin 系統產生 Concord 的動態連結版本。
make voice
啟用實驗性語音連線處理 - 尚未準備好投入生產。
make debug
啟用一些在開發時有用的標誌,例如-O0
和-g
(注意 - #
表示您應該以 root 身分執行)
# 進行安裝
這會將頭檔和庫檔安裝到 $PREFIX 中。您可以這樣覆蓋它:
# PREFIX=/opt/concord make install
若要交叉編譯 Concord,請參閱此處的手冊。
以下是stable
且有據可查的依賴項,它們與 Concord 一起打包,可以包含到您的專案中:
文件 | 描述 |
---|---|
齒輪實用程式 | 旨在便攜性的通用功能 |
日誌.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)
Sun/Oracle Studio (Solaris)
IRIX MIPSpro C++ (IRIX) -- 注意:目前不支援
惠普 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 的快速入門。
使用 GDB 檢查執行時間錯誤,例如分段錯誤:
$ gdb ./myBot
然後從 gdb 環境執行您的機器人:
(gdb)運行
如果程式崩潰了,取得導致該程式崩潰的函數呼叫的回溯:
(gdb) BT
如需更全面的指南,請查看 Beej 的 GDB 快速指南
有問題嗎?查看我們的 Discord 伺服器
歡迎各種貢獻,我們只要求遵守我們的準則!如果您想提供協助但不確定從哪裡開始,那麼我們的 Discord API 路線圖就是一個很好的起點。檢查我們的連結以獲取更多有用的信息。
文件
Discord API 路線圖
從 V1 遷移
從逆戟鯨遷移