开发一直在开发分支进行。我们正在致力于新功能和改进。要访问该库的最新版本,请查看 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_create_message(client , 事件->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);discord_run(client); }
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 特定日志记录“文件名”: "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 迁移
从逆戟鲸迁移