開発は開発ブランチで行われています。私たちは新機能と改善に取り組んでいます。ライブラリの最新バージョンにアクセスするには、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(client, イベント->アプリケーション->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(client, イベント->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
FreeBSD 12
NetBSD 8.1
Windows 7 (Cygwin)
GNU/ハード 0.9
Mac OS X 10.9
注: SPARC Solaris、PowerPC AIX、System Z z/OS、Linux、または MIPS IRIX などの特定の OS を実行するビッグエンディアン プロセッサはサポートされていません。現在、ビッグエンディアン システム上で一部のロジックが正しく動作しないという問題がいくつかあります。これはすぐに修正される予定です。
唯一の依存関係はcurl-7.56.1
以降です。ソースから libcurl をコンパイルする場合は、SSL サポートを使用してビルドする必要があります。
Cygwinのインストール
Cygwin インストーラーを実行したときに、libcurl、gcc、make、および git がインストールされていることを確認してください。
ここで Windows チュートリアルを確認してください。
Mingw64 と Msys2 は現在サポートされていません。詳しくはこちらをご覧ください。
インストールしたら、UNIX/Linux/OS X/BSD と同様に通常どおりコンパイルします。
注: gcc
コマンド、またはボットの Makefile のCFLAGS
変数に-L/usr/local/lib -I/usr/local/include
含める必要がある可能性があります。
(注 -- #
root として実行する必要があることを意味します)
# apt update && apt install -y libcurl4-openssl-dev
# xbps-install -S libcurl-devel
# apk はカール開発を追加します
# pkg インストールカール
注: Xcode をインストールするか、少なくともxcode-select --install
を使用してコマンドライン ツールをインストールする必要があります。
$ brew installcurl (Homebrew)$ port installcurl (MacPorts)
git clone https://aur.archlinux.org/concord-git.gitcd concord-gitmakepkg -Acspacman -U concord-git-version-any.pkg.tar.zst
あるいは、AUR ヘルパーを使用することもできます。
やったー -S concord-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
OS X で MacPorts を使用する場合:
$ 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", // トレース、デバッグ、情報、警告、エラー、致命的"filename": "bot.log", // ログ出力ファイル"quit": 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
など、開発中に役立ついくつかのフラグを有効にします。
(注 -- #
root として実行する必要があることを意味します)
# インストールを行う
これにより、ヘッダーとライブラリ ファイルが $PREFIX にインストールされます。これを次のようにオーバーライドできます。
# PREFIX=/opt/concord make install
Concord をクロスコンパイルするには、こちらのマニュアルを参照してください。
以下は、Concord にパッケージ化されており、プロジェクトに含めることができるstable
、十分に文書化された依存関係です。
ファイル | 説明 |
---|---|
コグユーティリティ | 可搬性を追求した汎用機能 |
log.c* | シンプルな C99 ロギング ライブラリ |
キャリー* | タイプセーフな配列のマクロベースの実装 |
アノマップ* | C99 のソートされたキー/値ストレージ |
チャッシュ* | タイプセーフなハッシュテーブルのマクロベースの実装 |
json-ビルド | 小さな、割り当てゼロの JSON シリアライザー |
jsmn-find | 小さな、割り当てゼロの 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) -- 注: 現在サポートされていません
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 のクイック スタートを確認してください。
GDB を使用して、セグメンテーション違反などの実行時エラーをチェックします。
$ gdb ./myBot
次に、gdb 環境からボットを実行します。
(gdb) 実行
プログラムがクラッシュした場合は、それに至るまでの関数呼び出しのバックトレースを取得します。
(gdb)bt
より包括的なガイドについては、Beej の GDB クイック ガイドを確認してください。
問題がありますか? Discordサーバーをチェックしてください
あらゆる種類の貢献を歓迎します。私たちが求めるのは、ガイドラインに従うことだけです。支援したいがどこから始めればよいかわからない場合は、Discord API ロードマップが良い出発点となります。さらに役立つ情報については、リンクを確認してください。
ドキュメント
Discord API ロードマップ
V1 からの移行
Orca からの移行