Discord — это популярная чат-платформа для геймеров и сообществ, а создание бота Discord позволяет автоматизировать задачи, предоставлять настраиваемые функции и взаимодействовать с пользователями в режиме реального времени. В этом руководстве мы проведем вас через этапы настройки среды разработки бота Discord, написания и развертывания кода вашего бота, а также его интеграции с API Discord. Являетесь ли вы опытным разработчиком или новичком в программировании, это руководство предоставит вам знания и ресурсы, необходимые для успешного создания и запуска бота Discord на C++.

Вот пример того, как вы можете создать бота Discord на C++, используя библиотеку Discord API и C++ REST SDK.

Во-первых, вам нужно будет установить необходимые библиотеки и зависимости. Вы можете сделать это с помощью менеджера пакетов, такого как vcpkg:

vcpkg install discord-rpc cpprestsdk

Затем вам нужно будет создать приложение Discord и получить токен бота на портале разработчиков Discord. Вы можете выполнить шаги в этом руководстве, чтобы сделать это: https://discordpy.readthedocs.io/en/latest/discord.html

Получив токен бота, вы можете использовать его для аутентификации своего бота с помощью Discord API. Вот пример того, как это сделать с помощью библиотеки Discord API и C++ REST SDK:

Вот пример того, как вы можете создать бота Discord на C++, который отвечает на команду «привет» встраиванием, содержащим сообщение «Привет! приветствие от бота дискорда» в качестве заголовка:

#include <discord_rpc.h>
#include <cpprest/http_client.h>
#include <cpprest/filestream.h>

using namespace web;
using namespace web::http;
using namespace web::http::client;

// Function to create an embed object with the specified title
DiscordEmbed createEmbed(const std::string& title)
{
    DiscordEmbed embed;
    embed.title = title.c_str();
    return embed;
}

int main()
{
    // Initialize the Discord API
    DiscordEventHandlers handlers;
    Discord_Initialize("YOUR_CLIENT_ID", &handlers, 1, NULL);

    // Authenticate the bot with the Discord API
    http_client client(U("https://discordapp.com/api/v6"));
    http_request request(methods::POST);

    request.headers().add(U("Authorization"), U("Bot YOUR_BOT_TOKEN"));
    request.set_request_uri(U("/auth/login"));

    client.request(request).then([](http_response response) {
        if (response.status_code() == 200) {
            std::cout << "Bot authenticated successfully!" << std::endl;
        } else {
            std::cout << "Error authenticating bot: " << response.status_code() << std::endl;
        }
    }).wait();

    // Set up event handlers

    handlers.message_create = [](const DiscordMessage* message) {
        // Check if the message starts with the prefix ">" and contains the command "hi"
        if (message->content[0] == '>' && std::string(message->content).find("hi") != std::string::npos) {

            // Create an embed with the title "Hello! greeting from the discord bot"
            DiscordEmbed embed = createEmbed("Hello! greeting from the discord bot");

            // Send the embed to the channel where the command was issued
            Discord_Embed_Send(message->channel_id, &embed);
        }
    };

    // Run the bot's event loop
    while (true) {
        Discord_RunCallbacks();
        // Do other tasks here, if necessary
    }

    // Clean up the Discord API
    Discord_Shutdown();
    return 0;
}

Первое, что делает код, — это включает необходимые заголовки для библиотеки Discord API и C++ REST SDK, как и в предыдущем примере. Библиотека Discord API позволяет нам взаимодействовать с Discord API и получать события от сервера Discord, а C++ REST SDK предоставляет набор классов для взаимодействия с HTTP-серверами и выполнения HTTP-запросов.

Затем код инициализирует API Discord, вызывая функцию Discord_Initialize и передавая идентификатор клиента приложения Discord и обработчиков событий для обработки событий Discord. Идентификатор клиента — это уникальный идентификатор вашего приложения Discord, который вы можете получить на портале разработчиков Discord.

После инициализации API Discord код аутентифицирует бота с помощью API Discord, используя токен бота. Для этого он создает HTTP-клиент с использованием класса http_client из C++ REST SDK и отправляет HTTP-запрос POST в конечную точку /auth/login с заголовком Authorization, установленным на токен бота. Если запрос выполнен успешно, бот аутентифицируется и на консоль выводится сообщение. В противном случае выводится сообщение об ошибке с кодом состояния HTTP.

Затем код устанавливает обработчик события message_create, который запускается всякий раз, когда сообщение отправляется на канале Discord. Обработчик событий — это лямбда-функция, которая принимает аргумент const DiscordMessage*, который является указателем на структуру DiscordMessage, содержащую информацию о сообщении.

Внутри обработчика событий код проверяет, начинается ли сообщение с префикса «›» и содержит ли оно команду «hi», используя метод find класса std::string. Если это так, он создает объект для встраивания с помощью функции createEmbed и отправляет его на канал, где была выдана команда с помощью функции Discord_Embed_Send из библиотеки Discord API. Функция createEmbed просто создает объект внедрения и устанавливает в его поле title указанную строку.

Наконец, код входит в бесконечный цикл и вызывает функцию Discord_RunCallbacks для обработки любых событий с сервера Discord. Это позволяет боту получать сообщения, обновления и другие события от Discord и отвечать на них.

Когда программа завершается, код очищает API Discord, вызывая функцию Discord_Shutdown. Это важно для обеспечения правильной очистки и освобождения всех ресурсов.