Skip to content

Commit 32733e5

Browse files
committedJan 29, 2025·
DiscordCoreAPI v2.1.0
* Updating to stay in-line with dependency Jsonifier.
1 parent 57693a2 commit 32733e5

29 files changed

+1053
-873
lines changed
 

‎CMakeLists.txt

+30-5
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@
2121
# CMakeLists.txt - The CMake script for building this library.
2222
# May 13, 2021
2323
# https://discordcoreapi.com
24+
set(Opus_DIR "C:/Vcpkg/installed/x64-windows-static/share/opus") # Set this one to the folder location of the file "OpusConfig.cmake".
25+
set(unofficial-sodium_DIR "C:/Vcpkg/installed/x64-windows-static/share/unofficial-sodium") # Set this one to the folder location of the file "unofficial-sodiumConfig.cmake".
26+
set(Jsonifier_DIR "") # Set this one to the folder location of the file "JsonifierConfig.cmake".
27+
set(OPENSSL_ROOT_DIR "C:/Vcpkg/installed/x64-windows-static/") # Set this one to the folder location of the include folder and library folders of OpenSSL.
28+
set(VCPKG_ROOT_DIR "C:/Vcpkg")
29+
set(CMAKE_BUILD_TYPES "Release;Debug")
30+
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
31+
set(DEV TRUE)
2432

25-
if (EXISTS "${_VCPKG_ROOT_DIR}")
26-
set(VCPKG_ROOT_DIR "${_VCPKG_ROOT_DIR}")
27-
set(ENV{VCPKG_INSTALLATION_ROOT} "${_VCPKG_ROOT_DIR}")
28-
else()
29-
set(VCPKG_ROOT_DIR "C:/Vcpkg")
33+
if (EXISTS "${VCPKG_ROOT_DIR}")
3034
set(ENV{VCPKG_INSTALLATION_ROOT} "${VCPKG_ROOT_DIR}")
3135
endif()
3236

@@ -50,6 +54,27 @@ elseif(UNIX)
5054
set(OS "linux")
5155
endif()
5256
endif()
57+
if (EXISTS "$ENV{VCPKG_INSTALLATION_ROOT}")
58+
set(VCPKG_INSTALLATION_ROOT_NEW "$ENV{VCPKG_INSTALLATION_ROOT}")
59+
if (NOT EXISTS "${OPENSSL_ROOT_DIR}")
60+
set(OPENSSL_ROOT_DIR "${VCPKG_INSTALLATION_ROOT_NEW}/installed/x64-${OS}/")
61+
endif()
62+
if (NOT EXISTS "${OpenSSL_DIR}")
63+
set(OpenSSL_DIR "${VCPKG_INSTALLATION_ROOT_NEW}/installed/x64-${OS}/share/openssl")
64+
endif()
65+
if (NOT EXISTS "${Jsonifier_DIR}")
66+
set(Jsonifier_DIR "${VCPKG_INSTALLATION_ROOT_NEW}/installed/x64-${OS}/share/jsonifier")
67+
endif()
68+
if (NOT EXISTS "${Opus_DIR}")
69+
set(Opus_DIR "${VCPKG_INSTALLATION_ROOT_NEW}/installed/x64-${OS}/share/opus")
70+
endif()
71+
if (NOT EXISTS "${unofficial-sodium_DIR}")
72+
set(unofficial-sodium_DIR "${VCPKG_INSTALLATION_ROOT_NEW}/installed/x64-${OS}/share/unofficial-sodium")
73+
endif()
74+
include("${VCPKG_INSTALLATION_ROOT_NEW}/scripts/buildsystems/vcpkg.cmake")
75+
else()
76+
message(WARNING "No Vcpkg root folder found, Please make sure that you properly set the library folders.")
77+
endif()
5378

5479
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/CMake;")
5580

‎Include/discordcoreapi/EventManager.hpp

+60-60
Large diffs are not rendered by default.

‎Include/discordcoreapi/JsonSpecializations.hpp

+402-332
Large diffs are not rendered by default.

‎Include/discordcoreapi/Utilities/Base.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ namespace discord_core_api {
9898

9999
DCA_INLINE thread_local jsonifier::jsonifier_core<false> parser{};
100100

101-
template<typename value_type> using stop_watch = jsonifier_internal::stop_watch<value_type>;
101+
template<typename value_type> using stop_watch = jsonifier::internal::stop_watch<value_type>;
102102
using sys_clock = std::chrono::system_clock;
103103
using hrclock = std::chrono::high_resolution_clock;
104104
using milliseconds = std::chrono::duration<int64_t, std::milli>;

‎Include/discordcoreapi/Utilities/Etf.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,10 @@ namespace discord_core_api {
121121
constexpr uint8_t formatVersion{ 131 };
122122

123123
/// @brief Class for parsing etf data into json format.
124-
class DiscordCoreAPI_Dll etf_parser : public jsonifier_internal::alloc_wrapper<uint8_t> {
124+
class DiscordCoreAPI_Dll etf_parser : public jsonifier::internal::alloc_wrapper<uint8_t> {
125125
public:
126126
friend class websocket_client;
127-
using allocator = jsonifier_internal::alloc_wrapper<uint8_t>;
127+
using allocator = jsonifier::internal::alloc_wrapper<uint8_t>;
128128

129129
/// @brief Parse etf data to json format.
130130
/// @param dataToParse the etf data to be parsed.
@@ -468,7 +468,7 @@ namespace discord_core_api {
468468

469469
class etf_serializer {
470470
public:
471-
template<typename value_type> using allocator = jsonifier_internal::alloc_wrapper<value_type>;
471+
template<typename value_type> using allocator = jsonifier::internal::alloc_wrapper<value_type>;
472472
using object_type = unordered_map<jsonifier::string, etf_serializer>;
473473
using array_type = jsonifier::vector<etf_serializer>;
474474
using string_type = jsonifier::string;

‎Include/discordcoreapi/Utilities/UnorderedMap.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ namespace discord_core_api {
4848
concept map_container_iterator_t = std::same_as<typename unordered_map<key_type, value_type>::iterator, std::decay_t<map_iterator>>;
4949

5050
template<typename key_type_new, typename value_type_new> class unordered_map : protected hash_policy<unordered_map<key_type_new, value_type_new>>,
51-
protected jsonifier_internal::alloc_wrapper<std::pair<key_type_new, value_type_new>>,
51+
protected jsonifier::internal::alloc_wrapper<std::pair<key_type_new, value_type_new>>,
5252
protected object_compare {
5353
public:
5454
using key_type = key_type_new;
5555
using value_type = std::pair<key_type_new, value_type_new>;
56-
using allocator_type = jsonifier_internal::alloc_wrapper<value_type>;
56+
using allocator_type = jsonifier::internal::alloc_wrapper<value_type>;
5757
using allocator_traits = std::allocator_traits<allocator_type>;
5858
using size_type = uint64_t;
5959
using difference_type = int64_t;

‎Include/discordcoreapi/Utilities/UnorderedSet.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ namespace discord_core_api {
3939
concept set_container_iterator_t = std::same_as<typename unordered_set<value_type>::iterator, std::remove_cvref_t<set_iterator>>;
4040

4141
template<typename value_type_new>
42-
class unordered_set : protected hash_policy<unordered_set<value_type_new>>, protected jsonifier_internal::alloc_wrapper<value_type_new>, protected object_compare {
42+
class unordered_set : protected hash_policy<unordered_set<value_type_new>>, protected jsonifier::internal::alloc_wrapper<value_type_new>, protected object_compare {
4343
public:
4444
template<typename value_type_newer> using key_accessor = key_accessor<value_type_newer>;
4545
using key_type = value_type_new;
4646
using value_type = value_type_new;
4747
using mapped_type = value_type;
48-
using allocator_type = jsonifier_internal::alloc_wrapper<value_type>;
48+
using allocator_type = jsonifier::internal::alloc_wrapper<value_type>;
4949
using allocator_traits = std::allocator_traits<allocator_type>;
5050
using size_type = uint64_t;
5151
using difference_type = int64_t;

‎Include/discordcoreapi/WebHookEntities.hpp

+42
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,45 @@ namespace discord_core_api {
323323
/**@}*/
324324

325325
}
326+
327+
namespace jsonifier {
328+
329+
template<> struct core<discord_core_api::execute_web_hook_data> {
330+
using value_type = discord_core_api::execute_web_hook_data;
331+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::attachments, "attachments">(), makeJsonEntity<&value_type::components, "components">(),
332+
makeJsonEntity<&value_type::allowedMentions, "allowed_mentions">(), makeJsonEntity<&value_type::embeds, "embeds">(), makeJsonEntity<&value_type::files, "files">(),
333+
makeJsonEntity<&value_type::webhookToken, "webhook_token">(), makeJsonEntity<&value_type::avatarUrl, "avatar_url">(),
334+
makeJsonEntity<&value_type::userName, "username">(), makeJsonEntity<&value_type::customId, "custom_id">(), makeJsonEntity<&value_type::webHookId, "webhook_id">(),
335+
makeJsonEntity<&value_type::content, "content">(), makeJsonEntity<&value_type::title, "title">(), makeJsonEntity<&value_type::flags, "flags">(),
336+
makeJsonEntity<&value_type::tts, "tts">()>();
337+
};
338+
339+
template<> struct core<discord_core_api::create_web_hook_data> {
340+
using value_type = discord_core_api::create_web_hook_data;
341+
static constexpr auto parseValue =
342+
createValue<makeJsonEntity<&value_type::channelId, "channelId">(), makeJsonEntity<&value_type::avatar, "avatar">(), makeJsonEntity<&value_type::name, "name">()>();
343+
};
344+
345+
template<> struct core<discord_core_api::modify_web_hook_data> {
346+
using value_type = discord_core_api::modify_web_hook_data;
347+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::channelId, "channelId">(), makeJsonEntity<&value_type::webHookId, "webHookId">(),
348+
makeJsonEntity<&value_type::avatar, "avatar">(), makeJsonEntity<&value_type::name, "name">()>();
349+
};
350+
351+
template<> struct core<discord_core_api::modify_web_hook_with_token_data> {
352+
using value_type = discord_core_api::modify_web_hook_with_token_data;
353+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::webhookToken, "webhookToken">(), makeJsonEntity<&value_type::channelId, "channelId">(),
354+
makeJsonEntity<&value_type::webHookId, "webHookId">(), makeJsonEntity<&value_type::avatar, "avatar">(), makeJsonEntity<&value_type::name, "name">()>();
355+
};
356+
357+
template<> struct core<discord_core_api::edit_web_hook_data> {
358+
using value_type = discord_core_api::edit_web_hook_data;
359+
static constexpr auto parseValue =
360+
createValue<makeJsonEntity<&value_type::threadId, "threadId">(), makeJsonEntity<&value_type::wait, "wait">(), makeJsonEntity<&value_type::attachments, "attachments">(),
361+
makeJsonEntity<&value_type::components, "components">(), makeJsonEntity<&value_type::allowedMentions, "allowedMentions">(),
362+
makeJsonEntity<&value_type::embeds, "embeds">(), makeJsonEntity<&value_type::webhookToken, "webhookToken">(), makeJsonEntity<&value_type::avatarUrl, "avatarUrl">(),
363+
makeJsonEntity<&value_type::userName, "username">(), makeJsonEntity<&value_type::customId, "customId">(), makeJsonEntity<&value_type::webHookId, "webHookId">(),
364+
makeJsonEntity<&value_type::content, "content">(), makeJsonEntity<&value_type::title, "title">(), makeJsonEntity<&value_type::flags, "flags">(),
365+
makeJsonEntity<&value_type::tts, "tts">(), makeJsonEntity<&value_type::messageId, "message_id">(), makeJsonEntity<&value_type::threadId, "thread_id">()>();
366+
};
367+
}

‎Source/ApplicationCommandEntities.cpp

+37-19
Original file line numberDiff line numberDiff line change
@@ -38,54 +38,72 @@ namespace jsonifier {
3838

3939
template<> struct core<discord_core_api::create_global_application_command_data> {
4040
using value_type = discord_core_api::create_global_application_command_data;
41-
static constexpr auto parseValue = createValue("id", &value_type::id, "application_id", &value_type::applicationId, "name", &value_type::name, "description",
42-
&value_type::description, "type", &value_type::type, "default_permission", &value_type::defaultMemberPermissions, "options", &value_type::options, "version",
43-
&value_type::version, "guild_id", &value_type::guildId, "dm_permission", &value_type::dmPermission, "name_localizations", &value_type::nameLocalizations,
44-
"description_localizations", &value_type::descriptionLocalizations);
41+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::id, "id">(), makeJsonEntity<&value_type::applicationId, "application_id">(),
42+
makeJsonEntity<&value_type::name, "name">(), makeJsonEntity<&value_type::description, "description">(), makeJsonEntity<&value_type::type, "type">(),
43+
makeJsonEntity<&value_type::defaultMemberPermissions, "default_permission">(), makeJsonEntity<&value_type::options, "options">(),
44+
makeJsonEntity<&value_type::version, "version">(), makeJsonEntity<&value_type::guildId, "guild_id">(), makeJsonEntity<&value_type::dmPermission, "dm_permission">(),
45+
makeJsonEntity<&value_type::nameLocalizations, "name_localizations">(), makeJsonEntity<&value_type::descriptionLocalizations, "description_localizations">()>();
4546
};
4647

4748
template<> struct core<discord_core_api::create_guild_application_command_data> {
4849
using value_type = discord_core_api::create_guild_application_command_data;
49-
static constexpr auto parseValue = createValue("id", &value_type::id, "application_id", &value_type::applicationId, "name", &value_type::name, "description",
50-
&value_type::description, "type", &value_type::type, "default_permission", &value_type::defaultMemberPermissions, "options", &value_type::options, "version",
51-
&value_type::version, "guild_id", &value_type::guildId, "dm_permission", &value_type::dmPermission, "name_localizations", &value_type::nameLocalizations,
52-
"description_localizations", &value_type::descriptionLocalizations);
50+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::id, "id">(), makeJsonEntity<&value_type::applicationId, "application_id">(),
51+
makeJsonEntity<&value_type::name, "name">(), makeJsonEntity<&value_type::description, "description">(), makeJsonEntity<&value_type::type, "type">(),
52+
makeJsonEntity<&value_type::defaultMemberPermissions, "default_permission">(), makeJsonEntity<&value_type::options, "options">(),
53+
makeJsonEntity<&value_type::version, "version">(), makeJsonEntity<&value_type::guildId, "guild_id">(), makeJsonEntity<&value_type::dmPermission, "dm_permission">(),
54+
makeJsonEntity<&value_type::nameLocalizations, "name_localizations">(), makeJsonEntity<&value_type::descriptionLocalizations, "description_localizations">()>();
5355
};
5456

5557
template<> struct core<discord_core_api::bulk_overwrite_global_application_commands_data> {
5658
using value_type = discord_core_api::bulk_overwrite_global_application_commands_data;
57-
static constexpr auto parseValue = createValue("commands", &value_type::responseData, "application_id", &value_type::applicationId);
59+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::responseData, "commands">(), makeJsonEntity<&value_type::applicationId, "application_id">()>();
5860
};
5961

6062
template<> struct core<discord_core_api::edit_global_application_command_data> {
6163
using value_type = discord_core_api::edit_global_application_command_data;
62-
static constexpr auto parseValue = createValue("name", &value_type::name, "description", &value_type::description, "options", &value_type::options, "default_permission",
63-
&value_type::defaultMemberPermissions, "name_localization", &value_type::nameLocalizations, "description_localization", &value_type::descriptionLocalizations,
64-
"application_id", &value_type::applicationId, "dm_permission", &value_type::dmPermission);
64+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::name, "name">(), makeJsonEntity<&value_type::description, "description">(),
65+
makeJsonEntity<&value_type::options, "options">(), makeJsonEntity<&value_type::defaultMemberPermissions, "default_permission">(),
66+
makeJsonEntity<&value_type::nameLocalizations, "name_localization">(), makeJsonEntity<&value_type::descriptionLocalizations, "description_localization">(),
67+
makeJsonEntity<&value_type::applicationId, "application_id">(), makeJsonEntity<&value_type::dmPermission, "dm_permission">()>();
6568
};
6669

6770
template<> struct core<discord_core_api::edit_guild_application_command_data> {
6871
using value_type = discord_core_api::edit_guild_application_command_data;
69-
static constexpr auto parseValue = createValue("description_localizations", &value_type::descriptionLocalizations, "name_localizations", &value_type::nameLocalizations,
70-
"options", &value_type::options, "default_permission", &value_type::defaultMemberPermissions, "description", &value_type::description, "application_id",
71-
&value_type::applicationId, "guild_id", &value_type::guildId, "name", &value_type::name);
72+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::descriptionLocalizations, "description_localizations">(),
73+
makeJsonEntity<&value_type::nameLocalizations, "name_localizations">(), makeJsonEntity<&value_type::options, "options">(),
74+
makeJsonEntity<&value_type::defaultMemberPermissions, "default_permission">(), makeJsonEntity<&value_type::description, "description">(),
75+
makeJsonEntity<&value_type::applicationId, "application_id">(), makeJsonEntity<&value_type::guildId, "guild_id">(), makeJsonEntity<&value_type::name, "name">()>();
7276
};
7377

7478
template<> struct core<discord_core_api::bulk_overwrite_guild_application_commands_data> {
7579
using value_type = discord_core_api::bulk_overwrite_guild_application_commands_data;
76-
static constexpr auto parseValue = createValue("commands", &value_type::responseData, "application_id", &value_type::applicationId, "guild_id", &value_type::guildId);
80+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::responseData, "commands">(), makeJsonEntity<&value_type::applicationId, "application_id">(),
81+
makeJsonEntity<&value_type::guildId, "guild_id">()>();
7782
};
7883

7984
template<> struct core<discord_core_api::edit_guild_application_command_permissions_data> {
8085
using value_type = discord_core_api::edit_guild_application_command_permissions_data;
81-
static constexpr auto parseValue = createValue("permissions", &value_type::permissions, "command", &value_type::commandName, "application_id", &value_type::applicationId,
82-
"id", &value_type::commandId, "guild_id", &value_type::guildId);
86+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::permissions, "permissions">(), makeJsonEntity<&value_type::commandName, "command">(),
87+
makeJsonEntity<&value_type::applicationId, "application_id">(), makeJsonEntity<&value_type::commandId, "id">(), makeJsonEntity<&value_type::guildId, "guild_id">()>();
8388
};
8489

8590
template<> struct core<discord_core_api::batch_edit_guild_application_command_permissions_data> {
8691
using value_type = discord_core_api::batch_edit_guild_application_command_permissions_data;
87-
static constexpr auto parseValue = createValue("permissions", &value_type::permissions, "application_id", &value_type::applicationId, "guild_id", &value_type::guildId);
92+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::permissions, "permissions">(), makeJsonEntity<&value_type::applicationId, "application_id">(),
93+
makeJsonEntity<&value_type::guildId, "guild_id">()>();
8894
};
95+
96+
template<> struct core<discord_core_api::application_command_data> {
97+
using value_type = discord_core_api::application_command_data;
98+
static constexpr auto parseValue = createValue<makeJsonEntity<&value_type::descriptionLocalizations, "description_localizations">(),
99+
makeJsonEntity<&value_type::nameLocalizations, "name_localizations">(), makeJsonEntity<&value_type::options, "options">(),
100+
makeJsonEntity<&value_type::defaultMemberPermissions, "default_member_permissions">(), makeJsonEntity<&value_type::description, "description">(),
101+
makeJsonEntity<&value_type::type, "type">(), makeJsonEntity<&value_type::version, "version">(), makeJsonEntity<&value_type::applicationId, "application_id">(),
102+
makeJsonEntity<&value_type::name, "name">(), makeJsonEntity<&value_type::dmPermission, "dm_permission">(), makeJsonEntity<&value_type::guildId, "guild_id">(),
103+
makeJsonEntity<&value_type::id, "id">()>();
104+
};
105+
106+
89107
}
90108

91109
namespace discord_core_api {

0 commit comments

Comments
 (0)