diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index b4a26e9..ab4cd9e 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -12,10 +12,7 @@ "compilerPath": "/usr/bin/gcc", "cStandard": "c17", "cppStandard": "c++20", - "intelliSenseMode": "linux-gcc-x64", - "compilerArgs": [ - "-DDPP_CORO" - ] + "intelliSenseMode": "linux-gcc-x64" } ], "version": 4 diff --git a/.vscode/settings.json b/.vscode/settings.json index 1c22ffa..cdc8dc4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,11 +1,9 @@ { + "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json", "files.associations": { - "iosfwd": "cpp", - "sstream": "cpp", "cctype": "cpp", "clocale": "cpp", "cmath": "cpp", - "csignal": "cpp", "cstdarg": "cpp", "cstddef": "cpp", "cstdio": "cpp", @@ -14,27 +12,20 @@ "ctime": "cpp", "cwchar": "cpp", "cwctype": "cpp", - "any": "cpp", "array": "cpp", "atomic": "cpp", - "strstream": "cpp", "bit": "cpp", - "*.tcc": "cpp", "bitset": "cpp", "charconv": "cpp", "chrono": "cpp", - "codecvt": "cpp", "compare": "cpp", - "complex": "cpp", "concepts": "cpp", "condition_variable": "cpp", - "coroutine": "cpp", "cstdint": "cpp", "deque": "cpp", "forward_list": "cpp", "list": "cpp", "map": "cpp", - "set": "cpp", "string": "cpp", "unordered_map": "cpp", "vector": "cpp", @@ -44,66 +35,36 @@ "iterator": "cpp", "memory": "cpp", "memory_resource": "cpp", - "numeric": "cpp", "optional": "cpp", "random": "cpp", "ratio": "cpp", - "source_location": "cpp", "string_view": "cpp", "system_error": "cpp", "tuple": "cpp", "type_traits": "cpp", "utility": "cpp", + "format": "cpp", "fstream": "cpp", "future": "cpp", "initializer_list": "cpp", "iomanip": "cpp", + "iosfwd": "cpp", "iostream": "cpp", "istream": "cpp", "limits": "cpp", "mutex": "cpp", "new": "cpp", - "numbers": "cpp", "ostream": "cpp", - "ranges": "cpp", "semaphore": "cpp", "shared_mutex": "cpp", + "sstream": "cpp", "stdexcept": "cpp", "stop_token": "cpp", "streambuf": "cpp", "thread": "cpp", - "cinttypes": "cpp", - "typeindex": "cpp", "typeinfo": "cpp", - "valarray": "cpp", "variant": "cpp", - "*.ipp": "cpp", - "format": "cpp", - "span": "cpp", - "__bit_reference": "cpp", - "__bits": "cpp", "__config": "cpp", - "__debug": "cpp", - "__errc": "cpp", - "__hash_table": "cpp", - "__locale": "cpp", - "__mutex_base": "cpp", - "__node_handle": "cpp", - "__nullptr": "cpp", - "__split_buffer": "cpp", - "__string": "cpp", - "__threading_support": "cpp", - "__tree": "cpp", - "__tuple": "cpp", - "ios": "cpp", - "locale": "cpp", - "queue": "cpp", - "hash_map": "cpp", - "hash_set": "cpp", - "regex": "cpp", - "stack": "cpp", - "__memory": "cpp", - "__verbose_abort": "cpp", - "print": "cpp" + "rope": "cpp" } } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index b1bff6e..e1153c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,24 +92,18 @@ if(NOT AVCODEC_LIBRARY OR NOT AVFORMAT_LIBRARY OR NOT AVUTIL_LIBRARY) message(FATAL_ERROR "FFmpeg 라이브러리를 찾을 수 없습니다. 다운로드 경로를 확인해주세요.") endif() -#file(GLOB_RECURSE CORES "src/*.cpp" "src/*.cxx" "src/*.cc") -#file(GLOB_RECURSE AUDIO_SOURCES "src/Audio/*.cpp" "src/Audio/*.cxx" "src/Audio/*.cc") -#file(GLOB_RECURSE COMMANDS_SOURCES "src/Commands/*.cpp" "src/Commands/*.cxx" "src/Commands/*.cc") -#file(GLOB_RECURSE QUEUE_SOURCES "src/Queue/*.cpp" "src/Queue/*.cxx" "src/Queue/*.cc") -#file(GLOB_RECURSE SETTINGS_SOURCES "src/Settings/*.cpp" "src/Settings/*.cxx" "src/Settings/*.cc") -#file(GLOB_RECURSE UTILS_SOURCES "src/Utils/*.cpp" "src/Utils/*.cxx" "src/Utils/*.cc") +file(GLOB_RECURSE CORES "src/*.cpp" "src/*.cxx" "src/*.cc") -# Combine all found source files into a single list -#set(ALL_SOURCE_FILES -# ${CORES} -# ${AUDIO_SOURCES} -# ${COMMANDS_SOURCES} -# ${QUEUE_SOURCES} -# ${SETTINGS_SOURCES} -# ${UTILS_SOURCES} -#) +set(ALL_SOURCE_FILES + ${CORES} + ${AUDIO_SOURCES} + ${COMMANDS_SOURCES} + ${QUEUE_SOURCES} + ${SETTINGS_SOURCES} + ${UTILS_SOURCES} +) -add_executable(${BOT_NAME} src/main.cpp) +add_executable(${BOT_NAME} ${ALL_SOURCE_FILES}) target_link_libraries(${BOT_NAME} PRIVATE dpp) target_link_libraries(${BOT_NAME} PRIVATE Boost::filesystem) @@ -140,6 +134,8 @@ target_include_directories(${BOT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/includ target_include_directories(${BOT_NAME} PRIVATE ${OpenSSL_INCLUDE_DIRS}) target_include_directories(${BOT_NAME} PRIVATE ${FFMPEG_INCLUDE_PATH}) +target_precompile_headers(${BOT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include/precomp.h") + add_custom_command(TARGET ${BOT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "$" diff --git a/include/Audio/MusicPlayManager.hpp b/include/Audio/MusicPlayManager.hpp deleted file mode 100644 index dfb78c6..0000000 --- a/include/Audio/MusicPlayManager.hpp +++ /dev/null @@ -1,67 +0,0 @@ -#pragma once -#include -#include -#include - -namespace bumbleBee { -class MusicPlayManager { -public: - MusicPlayManager(std::shared_ptr cluster, std::vector GIDs) : - cluster(cluster), GIDs(GIDs) { - queueMap = std::unordered_map>(); - queueEmptyMutex = std::unordered_map>(); - - cluster->on_voice_ready([this](const dpp::voice_ready_t &event){on_voice_ready(event);}); - cluster->on_voice_track_marker([this](const dpp::voice_track_marker_t &event){on_voice_track_marker(event);}); - cluster->on_voice_client_disconnect([this](const dpp::voice_client_disconnect_t& event){on_voice_client_disconnect(event);}); - - for (auto GID : GIDs) { - queueMap[GID] = std::make_shared(); - queueEmptyMutex[GID] = std::make_shared(); - } - } - - /** - * @brief voice_ready 이벤트 인지시 콜백되는 함수 - * @param event const dpp::voice_ready_t& - **/ - void on_voice_ready(const dpp::voice_ready_t& event); - /** - * @brief voice_track_marker 이벤트 인지시 콜백되는 함수 - * @param event const dpp::voice_track_marker_t& - **/ - void on_voice_track_marker(const dpp::voice_track_marker_t& event); - /** - * @brief voice_client_disconnect 이벤트 인지시 콜백되는 함수 - * @param event const dpp::voice_client_disconnect_t& - **/ - void on_voice_client_disconnect(const dpp::voice_client_disconnect_t& event); - - void play(dpp::discord_voice_client* client); - - void queue_music(const dpp::snowflake guildId, const std::shared_ptr music); - - void clear(const dpp::snowflake guildId); - std::shared_ptr remove(const dpp::snowflake guildId, dpp::discord_voice_client* client, int index); - int size(const dpp::snowflake guildId); - - void setRepeat(const dpp::snowflake guildId, const bool value); - bool getRepeat(const dpp::snowflake guildId); - - std::pair>>, std::list>::iterator> getQueue(const dpp::snowflake guildId); - MusicQueueElement getNowPlaying(const dpp::snowflake guildId); - - std::condition_variable queuedCondition; - -private: - std::shared_ptr cluster; - - std::vector GIDs; - /// @brief 음악 큐 - std::unordered_map> queueMap; - - std::unordered_map> queueEmptyMutex; - - void send_audio_to_voice(std::shared_ptr music, dpp::discord_voice_client* client); -}; -} \ No newline at end of file diff --git a/include/Audio/MusicPlayerThreadManager.hpp b/include/Audio/MusicPlayerThreadManager.hpp deleted file mode 100644 index 5afa3c9..0000000 --- a/include/Audio/MusicPlayerThreadManager.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include -#include -#include -#include "Utils/ThreadPool.hpp" - -namespace bumbleBee { -class ThreadManager : public ThreadPool { -public: - bool addMusic(std::shared_ptr music, dpp::discord_voice_client* client); - void stopSending(dpp::snowflake gid); -private: - // GID, 쓰레드 - std::unordered_map threadPool; - // GID, 쓰레드 종료 - std::unordered_map terminating; -}; -} \ No newline at end of file diff --git a/include/BumbleBee.hpp b/include/BumbleBee.hpp deleted file mode 100644 index bc35d55..0000000 --- a/include/BumbleBee.hpp +++ /dev/null @@ -1,54 +0,0 @@ -#pragma once -#ifndef _BUMBLEBEE_HPP_ -#define _BUMBLEBEE_HPP_ -#include -#include -#include -#include - -namespace bumbleBee { -/** - * @file BumbleBee.hpp - * @brief 메인 봇 클래스 -**/ -class BumbleBee { -public: - /** - * @brief 생성자 - **/ - BumbleBee(); - /** - * @brief 파괴자 - * @details BumbleBee의 모든 Property를 책임지고 파괴합니다 - **/ - ~BumbleBee() {} - - /** - * @brief 봇 시작 - **/ - void start(); - - /** - * @brief slashcommand 이벤트 인지시 콜백되는 함수 - * @param event const dpp::slashcommand_t& - **/ - void on_slashcommand(const dpp::slashcommand_t& event); - /** - * @brief ready 이벤트 인지시 콜백되는 함수 - * @param event const dpp::ready_t& - **/ - void on_ready(const dpp::ready_t& event); - - /// @brief DPP 기본 클러스터 객체 - std::shared_ptr cluster; - /// @brief guild id 배열 - std::vector GIDs; - -private: - /// @brief Command 목록 - std::unordered_map> commands; - /// @brief voiceclient 관련 event 처리기 - std::shared_ptr musicManager; -}; -} -#endif \ No newline at end of file diff --git a/include/Commands/BumbleBeeCommand.hpp b/include/Commands/BumbleBeeCommand.hpp deleted file mode 100644 index 8ee6e36..0000000 --- a/include/Commands/BumbleBeeCommand.hpp +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once -#include -#include