This commit is contained in:
fluttershy 2025-01-31 13:04:37 +05:00
parent 188bf75a50
commit 2a9297a3b2
12 changed files with 113 additions and 107 deletions

View File

@ -4,5 +4,5 @@ Checks:
modernize-*,
performance-*,
bugprone-*,
cppcoreguidelines-*'
-performance-avoid-endl
cppcoreguidelines-*,
-performance-avoid-endl'

View File

@ -1,9 +1,7 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(sparkle)
#target_precompile_headers(${PROJECT_NAME} PRIVATE pch.h)
#include(GoogleTest)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
@ -13,10 +11,15 @@ set(SOURCE sources/main.cpp)
set(LIBS ${CMAKE_SOURCE_DIR}/libs/)
set(INCLUDE ${CMAKE_SOURCE_DIR}/include/)
#set(TESTS ${CMAKE_SOURCE_DIR}/tests)
#-Werror
set(ADDITIONAL_CXX_FLAGS_DEBUG "-march=native -O0 -pipe -Wall -Wextra -Wpedantic -Wconversion -Wuninitialized -Wsign-conversion -Wshadow -fsanitize=address")
set(ADDITIONAL_CXX_FLAGS_DEBUG "-march=native -O0 -pipe -Wall -Wextra -Wpedantic -Wconversion -Wuninitialized -Wsign-conversion -Wshadow -fsanitize=address") #-Werror
set(ADDITIONAL_CXX_FLAGS_RELEASE "-march=native -O2 -pipe -Wall -Wextra -Wpedantic -Wconversion -Wuninitialized -Wsign-conversion -Wshadow -flto=full")
file(GLOB NETWORK_SOURCES libs/network/*.cpp)
find_package(CURL REQUIRED)
find_path(IXWEBSOCKET_INCLUDE_DIR ixwebsocket)
find_library(IXWEBSOCKET_LIBRARIES ixwebsocket)
if(CMAKE_BUILD_TYPE)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DDEBUG)
@ -33,13 +36,6 @@ elseif(NOT CMAKE_BUILD_TYPE)
message(STATUS "cflags: ${CMAKE_CXX_FLAGS_RELEASE}")
endif()
file(GLOB NETWORK_SOURCES libs/network/*.cpp)
file(GLOB WEBSOCKET_SOURCES libs/gateway/*.cpp)
find_package(CURL REQUIRED)
find_path(IXWEBSOCKET_INCLUDE_DIR ixwebsocket)
find_library(IXWEBSOCKET_LIBRARIES ixwebsocket)
if(NOT IXWEBSOCKET_INCLUDE_DIR OR NOT IXWEBSOCKET_LIBRARIES)
message(FATAL_ERROR "ixwebsocket not found")
endif()
@ -51,7 +47,9 @@ endif()
message(STATUS "Current compiler: ${CMAKE_CXX_COMPILER}")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
add_executable(${PROJECT_NAME} ${SOURCE} ${NETWORK_SOURCES} ${WEBSOCKET_SOURCES})
add_executable(${PROJECT_NAME} ${SOURCE} ${NETWORK_SOURCES})
target_precompile_headers(${PROJECT_NAME} PRIVATE ${INCLUDE}pch.hpp)
target_include_directories(${PROJECT_NAME} PRIVATE
${LIBS}

View File

@ -1,11 +1,7 @@
#ifndef INCLUDE_INCLUDES_HPP_
#define INCLUDE_INCLUDES_HPP_
#include <utils/types.hpp>
#include <nlohmann/json.hpp>
#include <utils/log.hpp>
#include <utils/enums.hpp>
#include <utils/functions.hpp>
#include <cxxopts.hpp>
#include <iostream>
#include <string>
#endif

12
include/pch.hpp Normal file
View File

@ -0,0 +1,12 @@
#ifndef INCLUDE_PCH_HPP_
#define INCLUDE_PCH_HPP_
#include <iostream>
#include <string>
#include <functional>
#include <algorithm>
#include <utils/types.hpp>
#include <utils/log.hpp>
#include <utils/enums.hpp>
#include <utils/functions.hpp>
#include <nlohmann/json.hpp>
#endif

View File

@ -30,7 +30,7 @@ public:
const nlohmann::json& data;
NetworkManager& req;
Api(const nlohmann::json& json) : data(json), req(NetworkManager::getInstance()) {};
unsigned long latency() const {
_nodiscard auto latency() const -> unsigned long {
return req.getLatency();
}
};

View File

@ -2,7 +2,6 @@
NetworkManager::NetworkManager() : curl(curl_easy_init()), res(CURLE_OK), web(WebSocket::getInstance()) {
Log::create(INFO, NETWORK, "Network init");
curl_global_init(CURL_GLOBAL_DEFAULT);
if (!curl) {
Log::create(CRITICAL, NETWORK, "Failed to initialize CURL");
abort();

View File

@ -8,14 +8,14 @@ private:
CURL* curl;
CURLcode res;
WebSocket& web;
auto operator=(const NetworkManager&) -> NetworkManager& = delete;
auto operator=(NetworkManager&&) -> NetworkManager& = delete;
NetworkManager(NetworkManager&&) = delete;
NetworkManager(const NetworkManager&) = delete;
NetworkManager();
~NetworkManager();
static auto WriteCallback(void* contents, unsigned long size, unsigned long nmemb, void* userp) -> unsigned long;
public:
auto operator=(const NetworkManager&)->NetworkManager& = delete;
auto operator=(NetworkManager&&)->NetworkManager& = delete;
NetworkManager(NetworkManager&&) = delete;
NetworkManager(const NetworkManager&) = delete;
static auto getInstance() -> NetworkManager&;
[[nodiscard]] auto getLatency() const -> unsigned long;
auto request(const std::string& method, const std::string& path, const std::string& data = "") -> std::string;

View File

@ -6,7 +6,7 @@ void EventEmitter::emit(const std::string& event, const nlohmann::json& data) {
});
}
}
void EventEmitter::getEvents() {
void EventEmitter::getEvents() const {
Log::create(CRITICAL, WEBSOCKET, "Event list");
for (const auto& handler : handlers) {
Log::create(INFO, WEBSOCKET, handler.first);

View File

@ -11,7 +11,7 @@ private:
protected:
void emit(const std::string& event, const nlohmann::json& data);
public:
void getEvents();
void getEvents() const;
void start() const;
void on(const std::string& event, eventHandlers handler);
void once(const std::string& event, const eventHandlers& handler);

View File

@ -2,87 +2,87 @@
#define UTILS_EVENTS_HPP_
#include <string>
struct GatewayEvents {
static constexpr const char* APPLICATION_COMMAND_PERMISSIONS_UPDATE = "APPLICATION_COMMAND_PERMISSIONS_UPDATE";
static constexpr const char* AUTO_MODERATION_ACTION_EXECUTION = "AUTO_MODERATION_ACTION_EXECUTION";
static constexpr const char* AUTO_MODERATION_RULE_CREATE = "AUTO_MODERATION_RULE_CREATE";
static constexpr const char* AUTO_MODERATION_RULE_DELETE = "AUTO_MODERATION_RULE_DELETE";
static constexpr const char* AUTO_MODERATION_RULE_UPDATE = "AUTO_MODERATION_RULE_UPDATE";
static constexpr const char* CHANNEL_CREATE = "CHANNEL_CREATE";
static constexpr const char* CHANNEL_DELETE = "CHANNEL_DELETE";
static constexpr const char* CHANNEL_PINS_UPDATE = "CHANNEL_PINS_UPDATE";
static constexpr const char* CHANNEL_UPDATE = "CHANNEL_UPDATE";
static constexpr const char* ENTITLEMENT_CREATE = "ENTITLEMENT_CREATE";
static constexpr const char* ENTITLEMENT_DELETE = "ENTITLEMENT_DELETE";
static constexpr const char* ENTITLEMENT_UPDATE = "ENTITLEMENT_UPDATE";
static constexpr const char* GUILD_AUDIT_LOG_ENTRY_CREATE = "GUILD_AUDIT_LOG_ENTRY_CREATE";
static constexpr const char* GUILD_BAN_ADD = "GUILD_BAN_ADD";
static constexpr const char* GUILD_BAN_REMOVE = "GUILD_BAN_REMOVE";
static constexpr const char* GUILD_CREATE = "GUILD_CREATE";
static constexpr const char* GUILD_DELETE = "GUILD_DELETE";
static constexpr const char* GUILD_EMOJIS_UPDATE = "GUILD_EMOJIS_UPDATE";
static constexpr const char* GUILD_INTEGRATIONS_UPDATE = "GUILD_INTEGRATIONS_UPDATE";
static constexpr const char* GUILD_MEMBER_ADD = "GUILD_MEMBER_ADD";
static constexpr const char* GUILD_MEMBER_REMOVE = "GUILD_MEMBER_REMOVE";
static constexpr const char* GUILD_MEMBERS_CHUNK = "GUILD_MEMBERS_CHUNK";
static constexpr const char* GUILD_MEMBER_UPDATE = "GUILD_MEMBER_UPDATE";
static constexpr const char* GUILD_ROLE_CREATE = "GUILD_ROLE_CREATE";
static constexpr const char* GUILD_ROLE_DELETE = "GUILD_ROLE_DELETE";
static constexpr const char* GUILD_ROLE_UPDATE = "GUILD_ROLE_UPDATE";
static constexpr const char* GUILD_SCHEDULED_EVENT_CREATE = "GUILD_SCHEDULED_EVENT_CREATE";
static constexpr const char* GUILD_SCHEDULED_EVENT_DELETE = "GUILD_SCHEDULED_EVENT_DELETE";
static constexpr const char* GUILD_SCHEDULED_EVENT_UPDATE = "GUILD_SCHEDULED_EVENT_UPDATE";
static constexpr const char* GUILD_SCHEDULED_EVENT_USER_REMOVE = "GUILD_SCHEDULED_EVENT_USER_REMOVE";
static constexpr const char* GUILD_SOUNDBOARD_SOUND_CREATE = "GUILD_SOUNDBOARD_SOUND_CREATE";
static constexpr const char* GUILD_SOUNDBOARD_SOUND_DELETE = "GUILD_SOUNDBOARD_SOUND_DELETE";
static constexpr const char* GUILD_SOUNDBOARD_SOUNDS_UPDATE = "GUILD_SOUNDBOARD_SOUNDS_UPDATE";
static constexpr const char* GUILD_SOUNDBOARD_SOUND_UPDATE = "GUILD_SOUNDBOARD_SOUND_UPDATE";
static constexpr const char* SOUNDBOARD_SOUNDS = "SOUNDBOARD_SOUNDS";
static constexpr const char* GUILD_STICKERS_UPDATE = "GUILD_STICKERS_UPDATE";
static constexpr const char* GUILD_UPDATE = "GUILD_UPDATE";
static constexpr const char* INTEGRATION_CREATE = "INTEGRATION_CREATE";
static constexpr const char* INTEGRATION_DELETE = "INTEGRATION_DELETE";
static constexpr const char* INTEGRATION_UPDATE = "INTEGRATION_UPDATE";
static constexpr const char* INVITE_CREATE = "INVITE_CREATE";
static constexpr const char* INVITE_DELETE = "INVITE_DELETE";
static constexpr const char* MESSAGE_CREATE = "MESSAGE_CREATE";
static constexpr const char* MESSAGE_DELETE = "MESSAGE_DELETE";
static constexpr const char* MESSAGE_DELETE_BULK = "MESSAGE_DELETE_BULK";
static constexpr const char* MESSAGE_POLL_VOTE_ADD = "MESSAGE_POLL_VOTE_ADD";
static constexpr const char* MESSAGE_POLL_VOTE_REMOVE = "MESSAGE_POLL_VOTE_REMOVE";
static constexpr const char* MESSAGE_REACTION_ADD = "MESSAGE_REACTION_ADD";
static constexpr const char* MESSAGE_REACTION_REMOVE = "MESSAGE_REACTION_REMOVE";
static constexpr const char* MESSAGE_REACTION_REMOVE_ALL = "MESSAGE_REACTION_REMOVE_ALL";
static constexpr const char* MESSAGE_REACTION_REMOVE_EMOJI = "MESSAGE_REACTION_REMOVE_EMOJI";
static constexpr const char* MESSAGE_UPDATE = "MESSAGE_UPDATE";
static constexpr const char* PRESENCE_UPDATE = "PRESENCE_UPDATE";
static constexpr const char* READY = "READY";
static constexpr const char* RESUMED = "RESUMED";
static constexpr const char* STAGE_INSTANCE_CREATE = "STAGE_INSTANCE_CREATE";
static constexpr const char* STAGE_INSTANCE_DELETE = "STAGE_INSTANCE_DELETE";
static constexpr const char* STAGE_INSTANCE_UPDATE = "STAGE_INSTANCE_UPDATE";
static constexpr const char* SUBSCRIPTION_CREATE = "SUBSCRIPTION_CREATE";
static constexpr const char* SUBSCRIPTION_DELETE = "SUBSCRIPTION_DELETE";
static constexpr const char* SUBSCRIPTION_UPDATE = "SUBSCRIPTION_UPDATE";
static constexpr const char* THREAD_CREATE = "THREAD_CREATE";
static constexpr const char* THREAD_DELETE = "THREAD_DELETE";
static constexpr const char* THREAD_LIST_SYNC = "THREAD_LIST_SYNC";
static constexpr const char* THREAD_MEMBERS_UPDATE = "THREAD_MEMBERS_UPDATE";
static constexpr const char* THREAD_MEMBER_UPDATE = "THREAD_MEMBER_UPDATE";
static constexpr const char* THREAD_UPDATE = "THREAD_UPDATE";
static constexpr const char* TYPING_START = "TYPING_START";
static constexpr const char* USER_UPDATE = "USER_UPDATE";
static constexpr const char* VOICE_CHANNEL_EFFECT_SEND = "VOICE_CHANNEL_EFFECT_SEND";
static constexpr const char* VOICE_SERVER_UPDATE = "VOICE_SERVER_UPDATE";
static constexpr const char* VOICE_STATE_UPDATE = "VOICE_STATE_UPDATE";
static constexpr const char* WEBHOOKS_UPDATE = "WEBHOOKS_UPDATE";
static inline constexpr char* APPLICATION_COMMAND_PERMISSIONS_UPDATE = "APPLICATION_COMMAND_PERMISSIONS_UPDATE";
static inline constexpr char* AUTO_MODERATION_ACTION_EXECUTION = "AUTO_MODERATION_ACTION_EXECUTION";
static inline constexpr char* AUTO_MODERATION_RULE_CREATE = "AUTO_MODERATION_RULE_CREATE";
static inline constexpr char* AUTO_MODERATION_RULE_DELETE = "AUTO_MODERATION_RULE_DELETE";
static inline constexpr char* AUTO_MODERATION_RULE_UPDATE = "AUTO_MODERATION_RULE_UPDATE";
static inline constexpr char* CHANNEL_CREATE = "CHANNEL_CREATE";
static inline constexpr char* CHANNEL_DELETE = "CHANNEL_DELETE";
static inline constexpr char* CHANNEL_PINS_UPDATE = "CHANNEL_PINS_UPDATE";
static inline constexpr char* CHANNEL_UPDATE = "CHANNEL_UPDATE";
static inline constexpr char* ENTITLEMENT_CREATE = "ENTITLEMENT_CREATE";
static inline constexpr char* ENTITLEMENT_DELETE = "ENTITLEMENT_DELETE";
static inline constexpr char* ENTITLEMENT_UPDATE = "ENTITLEMENT_UPDATE";
static inline constexpr char* GUILD_AUDIT_LOG_ENTRY_CREATE = "GUILD_AUDIT_LOG_ENTRY_CREATE";
static inline constexpr char* GUILD_BAN_ADD = "GUILD_BAN_ADD";
static inline constexpr char* GUILD_BAN_REMOVE = "GUILD_BAN_REMOVE";
static inline constexpr char* GUILD_CREATE = "GUILD_CREATE";
static inline constexpr char* GUILD_DELETE = "GUILD_DELETE";
static inline constexpr char* GUILD_EMOJIS_UPDATE = "GUILD_EMOJIS_UPDATE";
static inline constexpr char* GUILD_INTEGRATIONS_UPDATE = "GUILD_INTEGRATIONS_UPDATE";
static inline constexpr char* GUILD_MEMBER_ADD = "GUILD_MEMBER_ADD";
static inline constexpr char* GUILD_MEMBER_REMOVE = "GUILD_MEMBER_REMOVE";
static inline constexpr char* GUILD_MEMBERS_CHUNK = "GUILD_MEMBERS_CHUNK";
static inline constexpr char* GUILD_MEMBER_UPDATE = "GUILD_MEMBER_UPDATE";
static inline constexpr char* GUILD_ROLE_CREATE = "GUILD_ROLE_CREATE";
static inline constexpr char* GUILD_ROLE_DELETE = "GUILD_ROLE_DELETE";
static inline constexpr char* GUILD_ROLE_UPDATE = "GUILD_ROLE_UPDATE";
static inline constexpr char* GUILD_SCHEDULED_EVENT_CREATE = "GUILD_SCHEDULED_EVENT_CREATE";
static inline constexpr char* GUILD_SCHEDULED_EVENT_DELETE = "GUILD_SCHEDULED_EVENT_DELETE";
static inline constexpr char* GUILD_SCHEDULED_EVENT_UPDATE = "GUILD_SCHEDULED_EVENT_UPDATE";
static inline constexpr char* GUILD_SCHEDULED_EVENT_USER_REMOVE = "GUILD_SCHEDULED_EVENT_USER_REMOVE";
static inline constexpr char* GUILD_SOUNDBOARD_SOUND_CREATE = "GUILD_SOUNDBOARD_SOUND_CREATE";
static inline constexpr char* GUILD_SOUNDBOARD_SOUND_DELETE = "GUILD_SOUNDBOARD_SOUND_DELETE";
static inline constexpr char* GUILD_SOUNDBOARD_SOUNDS_UPDATE = "GUILD_SOUNDBOARD_SOUNDS_UPDATE";
static inline constexpr char* GUILD_SOUNDBOARD_SOUND_UPDATE = "GUILD_SOUNDBOARD_SOUND_UPDATE";
static inline constexpr char* SOUNDBOARD_SOUNDS = "SOUNDBOARD_SOUNDS";
static inline constexpr char* GUILD_STICKERS_UPDATE = "GUILD_STICKERS_UPDATE";
static inline constexpr char* GUILD_UPDATE = "GUILD_UPDATE";
static inline constexpr char* INTEGRATION_CREATE = "INTEGRATION_CREATE";
static inline constexpr char* INTEGRATION_DELETE = "INTEGRATION_DELETE";
static inline constexpr char* INTEGRATION_UPDATE = "INTEGRATION_UPDATE";
static inline constexpr char* INVITE_CREATE = "INVITE_CREATE";
static inline constexpr char* INVITE_DELETE = "INVITE_DELETE";
static inline constexpr char* MESSAGE_CREATE = "MESSAGE_CREATE";
static inline constexpr char* MESSAGE_DELETE = "MESSAGE_DELETE";
static inline constexpr char* MESSAGE_DELETE_BULK = "MESSAGE_DELETE_BULK";
static inline constexpr char* MESSAGE_POLL_VOTE_ADD = "MESSAGE_POLL_VOTE_ADD";
static inline constexpr char* MESSAGE_POLL_VOTE_REMOVE = "MESSAGE_POLL_VOTE_REMOVE";
static inline constexpr char* MESSAGE_REACTION_ADD = "MESSAGE_REACTION_ADD";
static inline constexpr char* MESSAGE_REACTION_REMOVE = "MESSAGE_REACTION_REMOVE";
static inline constexpr char* MESSAGE_REACTION_REMOVE_ALL = "MESSAGE_REACTION_REMOVE_ALL";
static inline constexpr char* MESSAGE_REACTION_REMOVE_EMOJI = "MESSAGE_REACTION_REMOVE_EMOJI";
static inline constexpr char* MESSAGE_UPDATE = "MESSAGE_UPDATE";
static inline constexpr char* PRESENCE_UPDATE = "PRESENCE_UPDATE";
static inline constexpr char* READY = "READY";
static inline constexpr char* RESUMED = "RESUMED";
static inline constexpr char* STAGE_INSTANCE_CREATE = "STAGE_INSTANCE_CREATE";
static inline constexpr char* STAGE_INSTANCE_DELETE = "STAGE_INSTANCE_DELETE";
static inline constexpr char* STAGE_INSTANCE_UPDATE = "STAGE_INSTANCE_UPDATE";
static inline constexpr char* SUBSCRIPTION_CREATE = "SUBSCRIPTION_CREATE";
static inline constexpr char* SUBSCRIPTION_DELETE = "SUBSCRIPTION_DELETE";
static inline constexpr char* SUBSCRIPTION_UPDATE = "SUBSCRIPTION_UPDATE";
static inline constexpr char* THREAD_CREATE = "THREAD_CREATE";
static inline constexpr char* THREAD_DELETE = "THREAD_DELETE";
static inline constexpr char* THREAD_LIST_SYNC = "THREAD_LIST_SYNC";
static inline constexpr char* THREAD_MEMBERS_UPDATE = "THREAD_MEMBERS_UPDATE";
static inline constexpr char* THREAD_MEMBER_UPDATE = "THREAD_MEMBER_UPDATE";
static inline constexpr char* THREAD_UPDATE = "THREAD_UPDATE";
static inline constexpr char* TYPING_START = "TYPING_START";
static inline constexpr char* USER_UPDATE = "USER_UPDATE";
static inline constexpr char* VOICE_CHANNEL_EFFECT_SEND = "VOICE_CHANNEL_EFFECT_SEND";
static inline constexpr char* VOICE_SERVER_UPDATE = "VOICE_SERVER_UPDATE";
static inline constexpr char* VOICE_STATE_UPDATE = "VOICE_STATE_UPDATE";
static inline constexpr char* WEBHOOKS_UPDATE = "WEBHOOKS_UPDATE";
};
struct HttpMethods {
static constexpr const char* POST = "POST";
static constexpr const char* GET = "GET";
static constexpr const char* PATCH = "PATCH";
static constexpr const char* DELETE = "DELETE";
static constexpr const char* PUT = "PUT";
static constexpr const char* OPTIONS = "OPTIONS";
static inline constexpr char* POST = "POST";
static inline constexpr char* GET = "GET";
static inline constexpr char* PATCH = "PATCH";
static inline constexpr char* DELETE = "DELETE";
static inline constexpr char* PUT = "PUT";
static inline constexpr char* OPTIONS = "OPTIONS";
};
struct ApiVersion {
static const inline std::string api = "/api/";

View File

@ -54,7 +54,7 @@ private:
default: return "UNKNOWN";
}
}
static auto str(const type& t) -> std::string {
static auto str(const type& t) noexcept -> std::string {
switch (t) {
case WEBSOCKET: return "WEBSOCKET";
case NETWORK: return "NETWORK";

View File

@ -1,5 +1,6 @@
#include <api.hpp>
#include <includes.hpp>
#include <cxxopts.hpp>
int main(int argc, char* argv[]) {
cxxopts::Options options("sparkle", "WIP discord bot library in C++");
options.add_options()