From 0ba945ea5377753ff3abcf760fa58893b1e74318 Mon Sep 17 00:00:00 2001 From: Brett Laptop Date: Tue, 27 Feb 2024 19:21:04 -0500 Subject: [PATCH] hello there --- include/data_structs.h | 208 +++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 188 ++----------------------------------- 2 files changed, 214 insertions(+), 182 deletions(-) create mode 100644 include/data_structs.h diff --git a/include/data_structs.h b/include/data_structs.h new file mode 100644 index 0000000..e8dfcfd --- /dev/null +++ b/include/data_structs.h @@ -0,0 +1,208 @@ +/* + * + * Copyright (C) 2024 Brett Terpstra + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef DISCORD_BOT_DATA_STRUCTS_H +#define DISCORD_BOT_DATA_STRUCTS_H + +#include +#include + +namespace db +{ + struct server_info_t + { + blt::u32 member_count; + std::string name; + std::string description; + std::string icon; + std::string splash; + std::string discovery_splash; + std::string banner; + }; + + struct user_info_t + { + blt::u64 userID; + std::string username; + std::string global_nickname; + std::string server_name; + }; + + struct user_history_t + { + blt::u64 userID; + blt::u64 time_changed; + std::string old_username; + std::string old_global_nickname; + std::string old_server_name; + }; + + struct channel_info_t + { + blt::u64 channelID; + std::string channel_name; + }; + + struct channel_history_t + { + blt::u64 channelID; + blt::u64 time_changed; + std::string old_channel_name; + }; + + struct message_t + { + blt::u64 messageID; + blt::u64 channelID; + blt::u64 userID; + std::string content; + }; + + struct attachment_t + { + blt::u64 messageID; + std::string url; + }; + + struct message_edits_t + { + blt::u64 messageID; + std::string old_content; + std::string new_content; + }; + + struct message_deletes_t + { + blt::u64 messageID; + blt::u64 channelID; + std::string content; + }; + + auto make_user_table() + { + using namespace sqlite_orm; + return make_table("users", + make_column("userID", &user_info_t::userID, primary_key()), + make_column("username", &user_info_t::username), + make_column("global_nickname", &user_info_t::global_nickname), + make_column("server_name", &user_info_t::server_name)); + } + + using user_table_t = decltype(make_user_table()); + + auto make_user_history_table() + { + using namespace sqlite_orm; + return make_table("user_history", + make_column("userID", &user_history_t::userID), + make_column("time_changed", &user_history_t::time_changed), + make_column("old_username", &user_history_t::old_username), + make_column("old_global_nickname", &user_history_t::old_global_nickname), + make_column("old_server_name", &user_history_t::old_server_name), + foreign_key(&user_history_t::userID).references(&user_info_t::userID), + primary_key(&user_history_t::userID, &user_history_t::time_changed)); + } + + using user_history_table_t = decltype(make_user_history_table()); + + auto make_channel_table() + { + using namespace sqlite_orm; + return make_table("channels", + make_column("channelID", &channel_info_t::channelID, primary_key()), + make_column("channel_name", &channel_info_t::channel_name)); + } + + using channel_table_t = decltype(make_channel_table()); + + auto make_channel_history_table() + { + using namespace sqlite_orm; + return make_table("channel_history", + make_column("channelID", &channel_history_t::channelID), + make_column("time_changed", &channel_history_t::time_changed), + make_column("old_channel_name", &channel_history_t::old_channel_name), + foreign_key(&channel_history_t::channelID).references(&channel_info_t::channelID), + primary_key(&channel_history_t::channelID, &channel_history_t::time_changed)); + } + + using channel_history_table_t = decltype(make_channel_history_table()); + + auto make_message_table() + { + return make_table("messages", + make_column("messageID", &message_t::messageID, primary_key()), + make_column("channelID", &message_t::channelID), + make_column("userID", &message_t::userID), + make_column("content", &message_t::content), + foreign_key(&message_t::channelID).references(&channel_info_t::channelID), + foreign_key(&message_t::userID).references(&user_info_t::userID)); + } + + using message_table_t = decltype(make_message_table()); + + auto make_attachment_table() + { + using namespace sqlite_orm; + return make_table("attachments", + make_column("messageID", &attachment_t::messageID), + make_column("url", &attachment_t::url), + foreign_key(&attachment_t::messageID).references(&message_t::messageID), + primary_key(&attachment_t::messageID, &attachment_t::url)); + } + + using attachment_table_t = decltype(make_attachment_table()); + + auto make_message_edits_table() + { + using namespace sqlite_orm; + return make_table("message_edits", + make_column("messageID", &message_edits_t::messageID), + make_column("old_content", &message_edits_t::old_content), + make_column("new_content", &message_edits_t::new_content), + foreign_key(&message_edits_t::messageID).references(&message_t::messageID), + primary_key(&message_edits_t::messageID, &message_edits_t::old_content, &message_edits_t::new_content)); + } + + using message_edits_table_t = decltype(make_message_edits_table()); + + auto make_message_deletes_table() + { + using namespace sqlite_orm; + return make_table("message_deletes", + make_column("messageID", &message_deletes_t::messageID), + make_column("channelID", &message_deletes_t::channelID), + make_column("content", &message_deletes_t::content), + foreign_key(&message_deletes_t::messageID).references(&message_t::messageID), + foreign_key(&message_deletes_t::channelID).references(&channel_info_t::channelID), + primary_key(&message_deletes_t::messageID, &message_deletes_t::channelID)); + } + + using message_deletes_table_t = decltype(make_message_deletes_table()); + + auto make_database(std::string path) + { + using namespace sqlite_orm; + return make_storage(std::move(path), make_user_table(), make_user_history_table(), make_channel_table(), make_channel_history_table(), + make_message_table(), make_attachment_table(), make_message_edits_table(), make_message_deletes_table()); + } + + using database_type = decltype(make_database("")); +} + +#endif //DISCORD_BOT_DATA_STRUCTS_H diff --git a/src/main.cpp b/src/main.cpp index e793167..7a7542b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,184 +7,14 @@ #include #include "blt/std/types.h" #include "blt/std/utility.h" +#include #include #include #include #include namespace sql = sqlite_orm; - -struct server_info_t -{ - blt::u32 member_count; - std::string name; - std::string description; - std::string icon; - std::string splash; - std::string discovery_splash; - std::string banner; -}; - -struct user_info_t -{ - blt::u64 userID; - std::string username; - std::string global_nickname; - std::string server_name; -}; - -auto make_user_table() -{ - return sql::make_table("users", - sql::make_column("userID", &user_info_t::userID, sql::primary_key()), - sql::make_column("username", &user_info_t::username), - sql::make_column("global_nickname", &user_info_t::global_nickname), - sql::make_column("server_name", &user_info_t::server_name)); -} - -using user_table_t = decltype(make_user_table()); - -struct user_history_t -{ - blt::u64 userID; - blt::u64 time_changed; - std::string old_username; - std::string old_global_nickname; - std::string old_server_name; -}; - -auto make_user_history_table() -{ - return sql::make_table("user_history", - sql::make_column("userID", &user_history_t::userID), - sql::make_column("time_changed", &user_history_t::time_changed), - sql::make_column("old_username", &user_history_t::old_username), - sql::make_column("old_global_nickname", &user_history_t::old_global_nickname), - sql::make_column("old_server_name", &user_history_t::old_server_name), - sql::foreign_key(&user_history_t::userID).references(&user_info_t::userID), - sql::primary_key(&user_history_t::userID, &user_history_t::time_changed)); -} - -using user_history_table_t = decltype(make_user_history_table()); - -struct channel_info_t -{ - blt::u64 channelID; - std::string channel_name; -}; - -auto make_channel_table() -{ - return sql::make_table("channels", - sql::make_column("channelID", &channel_info_t::channelID, sql::primary_key()), - sql::make_column("channel_name", &channel_info_t::channel_name)); -} - -using channel_table_t = decltype(make_channel_table()); - -struct channel_history_t -{ - blt::u64 channelID; - blt::u64 time_changed; - std::string old_channel_name; -}; - -auto make_channel_history_table() -{ - return sql::make_table("channel_history", - sql::make_column("channelID", &channel_history_t::channelID), - sql::make_column("time_changed", &channel_history_t::time_changed), - sql::make_column("old_channel_name", &channel_history_t::old_channel_name), - sql::foreign_key(&channel_history_t::channelID).references(&channel_info_t::channelID), - sql::primary_key(&channel_history_t::channelID, &channel_history_t::time_changed)); -} - -using channel_history_table_t = decltype(make_channel_history_table()); - -struct message_t -{ - blt::u64 messageID; - blt::u64 channelID; - blt::u64 userID; - std::string content; -}; - -auto make_message_table() -{ - return sql::make_table("messages", - sql::make_column("messageID", &message_t::messageID, sql::primary_key()), - sql::make_column("channelID", &message_t::channelID), - sql::make_column("userID", &message_t::userID), - sql::make_column("content", &message_t::content), - sql::foreign_key(&message_t::channelID).references(&channel_info_t::channelID), - sql::foreign_key(&message_t::userID).references(&user_info_t::userID)); -} - -using message_table_t = decltype(make_message_table()); - -struct attachment_t -{ - blt::u64 messageID; - std::string url; -}; - -auto make_attachment_table() -{ - return sql::make_table("attachments", - sql::make_column("messageID", &attachment_t::messageID), - sql::make_column("url", &attachment_t::url), - sql::foreign_key(&attachment_t::messageID).references(&message_t::messageID), - sql::primary_key(&attachment_t::messageID, &attachment_t::url)); -} - -using attachment_table_t = decltype(make_attachment_table()); - -struct message_edits_t -{ - blt::u64 messageID; - std::string old_content; - std::string new_content; -}; - -auto make_message_edits_table() -{ - return sql::make_table("message_edits", - sql::make_column("messageID", &message_edits_t::messageID), - sql::make_column("old_content", &message_edits_t::old_content), - sql::make_column("new_content", &message_edits_t::new_content), - sql::foreign_key(&message_edits_t::messageID).references(&message_t::messageID), - sql::primary_key(&message_edits_t::messageID, &message_edits_t::old_content, &message_edits_t::new_content)); -} - -using message_edits_table_t = decltype(make_message_edits_table()); - -struct message_deletes_t -{ - blt::u64 messageID; - blt::u64 channelID; - std::string content; -}; - -auto make_message_deletes_table() -{ - return sql::make_table("message_deletes", - sql::make_column("messageID", &message_deletes_t::messageID), - sql::make_column("channelID", &message_deletes_t::channelID), - sql::make_column("content", &message_deletes_t::content), - sql::foreign_key(&message_deletes_t::messageID).references(&message_t::messageID), - sql::foreign_key(&message_deletes_t::channelID).references(&channel_info_t::channelID), - sql::primary_key(&message_deletes_t::messageID, &message_deletes_t::channelID)); -} - -using message_deletes_table_t = decltype(make_message_deletes_table()); - -auto make_database(std::string path) -{ - return sql::make_storage(std::move(path), make_user_table(), make_user_history_table(), make_channel_table(), make_channel_history_table(), - make_message_table(), make_attachment_table(), make_message_edits_table(), make_message_deletes_table()); -} - -using database_type = decltype(make_database("")); +using namespace db; struct db_obj { @@ -198,16 +28,6 @@ struct db_obj std::mutex user_load_queue_mutex; database_type db; std::thread* thread; - - void ensure_channel_exists() - { - - } - - void ensure_user_exists() - { - - } public: explicit db_obj(blt::u64 guildID, const std::string& path): guildID(guildID), db(make_database(path + "/" + std::to_string(guildID) + "/")) @@ -444,6 +264,10 @@ int main(int argc, const char** argv) bot.on_user_update(wait_wrapper([&bot](const dpp::user_update_t& event) { BLT_INFO("User '%s' updated in some way; global name: '%s'", event.updated.username.c_str(), event.updated.global_name.c_str()); + for (const auto& guild : databases) + { + + } })); bot.on_guild_member_update(wait_wrapper([&bot](const dpp::guild_member_update_t& event) {