Разработка ведется в ветке разработки. Мы работаем над новыми функциями и улучшениями. Чтобы получить доступ к последней версии библиотеки, посетите ветку разработки.
Concord — это асинхронная библиотека C99 Discord API с минимальными внешними зависимостями и низкоуровневый перевод официальной документации Discord в код C.
Ниже приведены минималистичные примеры. Для лучшего обзора обратитесь к examples/
.
Примечание: вам необходимо заменить GUILD_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 = "Команда 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; /* возврат, если взаимодействие не является командой косой черты */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, event->id, event->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("Вошёл как %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 , event->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(клиент, &on_ready);discord_set_on_message_create(клиент, &on_message);discord_run(клиент); }
ГНУ/Линукс 4.x
FreeBSD 12
НетБСД 8.1
Windows 7 (Сигвин)
ГНУ/Хёрд 0.9
Мак ОС Х 10.9
Примечание. Процессоры с прямым порядком байтов под управлением определенных операционных систем, таких как SPARC Solaris, PowerPC AIX, System Z z/OS или Linux или MIPS IRIX, НЕ поддерживаются. В настоящее время существует несколько проблем, которые мешают корректной работе некоторой логики в системах с прямым порядком байтов. Это будет исправлено в ближайшее время.
Единственная зависимость — это curl-7.56.1
или выше. Если вы компилируете libcurl из исходного кода, вам необходимо будет собрать его с поддержкой SSL.
Установить Cygwin
Убедитесь, что вы установили libcurl, gcc, make и git при запуске установщика Cygwin!
Вы можете проверить руководство по Windows здесь!
Mingw64 и Msys2 в настоящее время НЕ поддерживаются. Пожалуйста, посмотрите это для получения дополнительной информации.
После установки скомпилируйте его обычным способом, как в UNIX/Linux/OS X/BSD.
Примечание: вам, скорее всего, потребуется включить -L/usr/local/lib -I/usr/local/include
в команду gcc
или в переменную CFLAGS
в Makefile для вашего бота.
(обратите внимание: #
означает, что вы должны работать от имени пользователя root)
# apt update && apt install -y libcurl4-openssl-dev
# xbps-install -S libcurl-devel
# apk добавить curl-dev
# pkg установить завиток
Примечание. вам потребуется установить Xcode или, как минимум, инструменты командной строки с помощью xcode-select --install
.
$ Brew install Curl (Homebrew)$ port install Curl (MacPorts)
git clone 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<некоторый_путь> LDFLAGS=-L<некоторый_путь> 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
В Windows с Cygwin вам может потребоваться передать оба аргумента для использования потоков POSIX:
$ CFLAGS="-pthread -lpthread" make
В некоторых случаях вам может потребоваться связать Concord с общим объектом или связать его как общий объект с другим общим объектом. В этом случае вам нужно будет скомпилировать Concord с помощью CFLAGS="-fpic" make
.
discord_config_init() — это метод инициализации, который позволяет настроить вашего бота без перекомпиляции.
Ниже описаны поля config.json
:
{ "logging": { // директивы ведения журнала "level": "trace", // трассировка, отладка, информация, предупреждение, ошибка, фатальный "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": "ВАШ-БОТ-ТОКЕН", // замените на свой токен бота "default_prefix": { "enable": false, // включаем префикс команды по умолчанию "prefix": "ВАШИ-КОМАНДЫ-ПРЕФИКС" // заменяем своим префиксом} }, ... // здесь вы можете добавить свои поля *}
* Содержимое вашего настраиваемого поля можно получить с помощью discord_config_get_field().
Получите токен своего бота и добавьте его в config.json
, назначив его полю «токен» Discord. На Discord-irc есть хорошо написанные инструкции, объясняющие, как получить токен вашего бота и добавить его на сервер.
Создайте примеры исполняемых файлов:
$ приведи примеры
Запустите Copycat-Bot:
$ cd примеры && ./copycat
Введите сообщение в любой канал, частью которого является бот, и бот должен отправить в ответ его точную копию.
С помощью Ctrl + c или Ctrl + |
Ниже описаны специальные флаги и цели для переопределения сборки Makefile по умолчанию с дополнительными функциями.
-DCCORD_SIGINTCATCH
По умолчанию Concord не будет корректно завершать работу при получении SIGINT (т. е. Ctrl + c ). Включите этот флаг, если хотите, чтобы он обрабатывался за вас.
-DCCORD_DEBUG_WEBSOCKETS
Включите подробную отладку для связи через WebSockets.
-DCCORD_DEBUG_HTTP
Включите подробную отладку для HTTP-связи.
Пример:
$ CFLAGS="-DCCORD_SIGINTCATCH -DCCORD_DEBUG_HTTP" сделать
make shared
Создайте динамически подключаемую версию Concord. Этот Makefile предназначен для компиляторов в стиле GNU, таких как gcc
или clang
.
make shared_osx
Создайте динамически подключаемую версию Concord для систем OS X и Darwin.
make voice
Включить экспериментальную обработку голосового соединения — продукт не готов к работе.
make debug
Включите некоторые флаги, полезные при разработке, например -O0
и -g
(обратите внимание: #
означает, что вы должны работать от имени пользователя root)
# сделать установку
Это установит заголовки и файлы библиотеки в $PREFIX. Вы можете переопределить это как таковое:
# PREFIX=/opt/concord make install
Чтобы выполнить кросс-компиляцию Concord, см. руководство здесь.
Ниже приведены stable
и хорошо документированные зависимости, которые входят в состав Concord и могут быть включены в ваши проекты:
Файл | Описание |
---|---|
cog-utils | Функции общего назначения, направленные на переносимость |
журнал.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 (Солярис)
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
(это ссылка на libpthread.a в /usr/lib
)
Во-первых, убедитесь, что ваш исполняемый файл скомпилирован с флагом -g
чтобы обеспечить удобочитаемость сообщений отладчика.
Использование valgrind для проверки утечек памяти:
valgrind --leak-check=full ./myBot
Более подробное руководство можно найти в Кратком запуске Valgrind.
Использование GDB для проверки ошибок времени выполнения, таких как ошибки сегментации:
$ gdb ./myBot
А затем запустите своего бота из среды gdb:
(БГБ) запустить
Если программа вышла из строя, получите обратную трассировку вызовов функций, которые привели к этому:
(гдб) BT
Более подробное руководство можно найти в Кратком руководстве Beej по GDB.
Проблемы? Посетите наш Discord-сервер
Все виды вкладов приветствуются, все, что мы просим, — это соблюдать наши правила! Если вы хотите помочь, но не знаете, с чего начать, наша дорожная карта Discord API — хорошая отправная точка. Проверьте наши ссылки для получения более полезной информации.
Документация
Дорожная карта API Discord
Миграция с версии 1
Миграция из Орки