From d75860b30099a701497b351981004dc260d8a084 Mon Sep 17 00:00:00 2001 From: fluttershy Date: Thu, 30 Jan 2025 17:21:08 +0500 Subject: [PATCH] fixes --- CMakeLists.txt | 41 ++++++++++++++++++++------------------ include/includes.hpp | 3 ++- libs/interface/Author.hpp | 1 + libs/interface/Bot.hpp | 3 ++- libs/interface/Message.hpp | 2 +- libs/network/websocket.cpp | 22 ++++++++++---------- libs/network/websocket.hpp | 4 ++-- libs/utils/log.hpp | 4 +++- libs/utils/types.hpp | 4 ++++ sources/main.cpp | 11 +++++----- 10 files changed, 54 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 788c9f4..a742f0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,20 +6,37 @@ project(sparkle) include(GoogleTest) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +#set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) set(SOURCE sources/main.cpp) set(LIBS ${CMAKE_SOURCE_DIR}/libs/) set(INCLUDE ${CMAKE_SOURCE_DIR}/include/) set(TESTS ${CMAKE_SOURCE_DIR}/tests) -set(ADDITIONAL_CXX_FLAGS_DEBUG "-march=native -pipe -Wall -Wextra -fsanitize=address -O0") -set(ADDITIONAL_CXX_FLAGS_RELEASE "-march=native -pipe -Wall -Wextra -O2 -flto") +set(ADDITIONAL_CXX_FLAGS_DEBUG "-march=native -O0 -pipe -Wall -Wextra -Wpedantic -Werror -Wconversion -Wuninitialized -Wsign-conversion -Wshadow -fsanitize=address") +set(ADDITIONAL_CXX_FLAGS_RELEASE "-march=native -O2 -pipe -Wall -Wextra -Wpedantic -Werror -Wconversion -Wuninitialized -Wsign-conversion -Wshadow -flto=full") + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) + set(CMAKE_CXX_FLAGS_RELEASE "${ADDITIONAL_CXX_FLAGS_RELEASE}") + message(STATUS "cflags: ${CMAKE_CXX_FLAGS_RELEASE}") +endif() + +if(CMAKE_BUILD_TYPE) + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + add_definitions(-DDEBUG) + set(CMAKE_CXX_FLAGS_DEBUG "${ADDITIONAL_CXX_FLAGS_DEBUG}") + message(STATUS "cflags: ${CMAKE_CXX_FLAGS_DEBUG}") + elseif(CMAKE_BUILD_TYPE STREQUAL "Release") + add_definitions(-DRELEASE) + set(CMAKE_CXX_FLAGS_RELEASE "${ADDITIONAL_CXX_FLAGS_RELEASE}") + message(STATUS "cflags: ${CMAKE_CXX_FLAGS_RELEASE}") + endif() +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) @@ -32,22 +49,8 @@ if(NOT CURL_INCLUDE_DIRS OR NOT CURL_LIBRARIES) message(FATAL_ERROR "curl not found") endif() -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE) -endif() - -if(CMAKE_BUILD_TYPE) - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CMAKE_CXX_FLAGS "${ADDITIONAL_CXX_FLAGS_DEBUG}") - add_definitions(-DDEBUG) - elseif(CMAKE_BUILD_TYPE STREQUAL "Release") - add_definitions(-DRELEASE) - set(CMAKE_CXX_FLAGS "${ADDITIONAL_CXX_FLAGS_RELEASE}") - endif() -endif() - message(STATUS "Current compiler: ${CMAKE_CXX_COMPILER}") -message(STATUS "${CMAKE_BUILD_TYPE}") +message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") add_executable(${PROJECT_NAME} ${SOURCE} ${NETWORK_SOURCES} ${WEBSOCKET_SOURCES}) #add_library(sparkles STATIC ${SOURCE}) diff --git a/include/includes.hpp b/include/includes.hpp index 51e648f..c3642df 100644 --- a/include/includes.hpp +++ b/include/includes.hpp @@ -1,10 +1,11 @@ #ifndef INCLUDE_INCLUDES_HPP_ #define INCLUDE_INCLUDES_HPP_ -//#include +#include #include #include #include #include +#include #include #include #endif \ No newline at end of file diff --git a/libs/interface/Author.hpp b/libs/interface/Author.hpp index bf306c1..68d3a63 100644 --- a/libs/interface/Author.hpp +++ b/libs/interface/Author.hpp @@ -8,6 +8,7 @@ private: WebSocket& web; NetworkManager& req; public: + __deprecated_t("requires update") struct Channel { std::string channel_id; std::string global_name; diff --git a/libs/interface/Bot.hpp b/libs/interface/Bot.hpp index 12fc6e7..22d8183 100644 --- a/libs/interface/Bot.hpp +++ b/libs/interface/Bot.hpp @@ -9,7 +9,8 @@ private: public: Discord(const nlohmann::json& data) : data(data), net(std::make_tuple(std::make_unique(data)...)) {} template - [[deprecated("Use ctx() instead")]] auto& get() const { + __deprecated_t("Use ctx() instead") + auto& get() const { return *std::get>(net); } const auto& ctx() const { diff --git a/libs/interface/Message.hpp b/libs/interface/Message.hpp index 32f2208..27ccecf 100644 --- a/libs/interface/Message.hpp +++ b/libs/interface/Message.hpp @@ -30,7 +30,7 @@ public: const nlohmann::json& data; NetworkManager& req; Api(const nlohmann::json& json) : data(json), req(NetworkManager::getInstance()) {}; - unsigned latency() const { + unsigned long latency() const { return req.getLatency(); } }; diff --git a/libs/network/websocket.cpp b/libs/network/websocket.cpp index ecf68a7..c63ca57 100644 --- a/libs/network/websocket.cpp +++ b/libs/network/websocket.cpp @@ -1,7 +1,8 @@ #include "websocket.hpp" void EventEmitter::emit(const std::string& event, const nlohmann::json& data) { - if (handlers.find(event) != handlers.end()) { - for (const auto& handler : handlers[event]) { + auto it = handlers.find(event); + if (it != handlers.end()) { + for (const auto& handler : it->second) { handler(data); } } @@ -13,22 +14,23 @@ void EventEmitter::getEvents() { } Log::create(CRITICAL, WEBSOCKET, "End of list"); } -void EventEmitter::start() { +void EventEmitter::start() const { while (1) std::this_thread::sleep_for(std::chrono::milliseconds(1)); } void EventEmitter::on(const std::string& event, eventHandlers handler) { - handlers[event].emplace_back(handler); + handlers[event].emplace_back(std::move(handler)); } void EventEmitter::once(const std::string& event, eventHandlers handler) { auto wrappedHandler = [this, event, handler](const nlohmann::json& data) { handler(data); off(event, handler); }; - handlers[event].emplace_back(wrappedHandler); + handlers[event].emplace_back(std::move(wrappedHandler)); } void EventEmitter::off(const std::string& event, eventHandlers handler) { - if (handlers.find(event) != handlers.end()) { - auto& vec = handlers[event]; + auto it = handlers.find(event); + if (it != handlers.end()) { + auto& vec = it->second; vec.erase(std::remove_if(vec.begin(), vec.end(), [&handler](const eventHandlers& h) { return h.target() == handler.target(); }), vec.end()); @@ -110,12 +112,12 @@ WebSocket::~WebSocket() { ix::uninitNetSystem(); } std::string WebSocket::getToken() const { - return isBot ? std::string("Bot " + WebSocket::token) : WebSocket::token; + return this->isBot ? std::string("Bot " + this->token) : this->token; } int WebSocket::getIntents() const { - return WebSocket::intents; + return this->intents; } -[[maybe_unused]] +__maybe_unused void WebSocket::sendPresenceUpdate(const char* statusType, const std::string& activityName, const int& activityType) { nlohmann::json prsUpdate = { {"op", 3}, diff --git a/libs/network/websocket.hpp b/libs/network/websocket.hpp index 5ed6842..adc58e6 100644 --- a/libs/network/websocket.hpp +++ b/libs/network/websocket.hpp @@ -11,7 +11,7 @@ protected: void emit(const std::string& event, const nlohmann::json& data); public: void getEvents(); - void start(); + void start() const; void on(const std::string& event, eventHandlers handler); void once(const std::string& event, eventHandlers handler); void off(const std::string& event, eventHandlers handler); @@ -29,7 +29,7 @@ private: WebSocket(const WebSocket&) = delete; WebSocket(const std::string& token, const int& intents, const bool& isBot); public: - [[maybe_unused]] + __maybe_unused void sendPresenceUpdate(const char* statusType, const std::string& activityName, const int& activityType); static WebSocket& getInstance(const std::string& token = "", const int& intents = 0, const bool& bot = true); ~WebSocket(); diff --git a/libs/utils/log.hpp b/libs/utils/log.hpp index 97482e5..11c5b00 100644 --- a/libs/utils/log.hpp +++ b/libs/utils/log.hpp @@ -5,11 +5,13 @@ #include #include #include +#include enum level { INFO, WARNING, ERROR, CRITICAL }; enum type { WEBSOCKET, NETWORK, API }; class Log { public: - [[maybe_unused]] static void create([[maybe_unused]] const level& lvl, [[maybe_unused]] const type& t, [[maybe_unused]] const std::string& message) { + __maybe_unused + static void create(__maybe_unused const level& lvl, __maybe_unused const type& t, __maybe_unused const std::string& message) { #ifdef DEBUG std::string color; switch (lvl) { diff --git a/libs/utils/types.hpp b/libs/utils/types.hpp index 38dff59..963b781 100644 --- a/libs/utils/types.hpp +++ b/libs/utils/types.hpp @@ -1,3 +1,7 @@ #ifndef UTILS_TYPES_HPP_ #define UTILS_TYPES_HPP_ +#define __maybe_unused [[maybe_unused]] +#define __deprecated_t(text) [[deprecated(text)]] +#define __deprecated [[deprecated]] +#define __nodiscard [[nodiscard]] #endif \ No newline at end of file diff --git a/sources/main.cpp b/sources/main.cpp index 0306b26..ed26f41 100644 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -1,4 +1,3 @@ -#include #include #include int main(int argc, char* argv[]) { @@ -14,18 +13,18 @@ int main(int argc, char* argv[]) { std::cout << "sparkle version 0.3" << std::endl; return 0; } - + if (result.count("help")) { std::cout << options.help() << std::endl; return 0; } - + if (!result.contains("token")) { std::cout << "\033[31mError: no token provided.\033[0m" << std::endl; std::cout << options.help() << std::endl; return -1; } - + class WebSocket* bot = &WebSocket::getInstance(result["token"].as(), GatewayIntents::AllIntents); bot->on(GatewayEvents::READY, [](const Discord& ctx) { @@ -33,15 +32,15 @@ int main(int argc, char* argv[]) { std::cout << std::boolalpha << user->isBot << std::endl; std::cout << nlohmann::json::parse(user->me())["username"].get() << std::endl; }); - bot->on(GatewayEvents::MESSAGE_CREATE, [bot](const Discord& msg) { auto& [message, user, author] = msg.ctx(); if (!author->isBot) { message->send("939957962972229634", message->pack("content", std::to_string(user->isBot))); bot->getEvents(); - bot->sendPresenceUpdate(StatusType::DND, "meow", ActivityType::Streaming); + //bot->sendPresenceUpdate(StatusType::DND, "meow", ActivityType::Streaming); } }); + bot->start(); return 0; } \ No newline at end of file