From 340f506f009f143d336006758ec671eac81bc669 Mon Sep 17 00:00:00 2001 From: "string.Empty" Date: Sat, 10 Aug 2024 20:22:50 +0800 Subject: [PATCH] feat: bak data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 每当存档用户数据时均备份上次自动保存 --- Dice/BlackListManager.h | 5 +++- Dice/Dice.cpp | 55 +++++++++++++++++++++++++++-------------- Dice/DiceEvent.cpp | 13 ++++++---- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/Dice/BlackListManager.h b/Dice/BlackListManager.h index 8474d937..22e880a3 100644 --- a/Dice/BlackListManager.h +++ b/Dice/BlackListManager.h @@ -9,6 +9,9 @@ #include "DiceAttrVar.h" using std::pair; +using std::unordered_set; +using std::unordered_map; +using std::multimap; class DiceEvent; @@ -64,7 +67,7 @@ class DDBlackMark class DDBlackManager { - vector vBlackList; + std::vector vBlackList; //ƶ˱ӳ unordered_map mCloud; unordered_set sIDEmpty; diff --git a/Dice/Dice.cpp b/Dice/Dice.cpp index bfe02f45..92e61e09 100644 --- a/Dice/Dice.cpp +++ b/Dice/Dice.cpp @@ -135,13 +135,16 @@ void readUserData(){ fs::copy_options::overwrite_existing, ec); log << "ȡû¼" + to_string(cnt) + ""; } - else if (fs::exists(dir / "UserConf.bak")) { - cnt = loadBFile(dir / "UserConf.bak", UserList); - if (cnt > 0)log << "ָû¼" + to_string(cnt) + ""; + else if (fs::exists(dir / "UserConf.dat.bak") + && (cnt = loadBFile(dir / "UserConf.dat.bak", UserList)) > 0) { + log << "ָû¼" + to_string(cnt) + ""; } - else { - cnt = loadBFile(dir / "UserConf.RDconf", UserList); - if (cnt > 0)log << "Ǩû¼" + to_string(cnt) + ""; + else if (fs::exists(dir / "UserConf.bak") + && (cnt = loadBFile(dir / "UserConf.bak", UserList)) > 0) { + log << "ָû¼" + to_string(cnt) + ""; + } + else if ((cnt = loadBFile(dir / "UserConf.RDconf", UserList)) > 0) { + log << "Ǩû¼" + to_string(cnt) + ""; } //for QQ Channel if (User& self{ getUser(console.DiceMaid) }; !self.get_ll("tinyID")) { @@ -162,9 +165,13 @@ void readUserData(){ fs::copy_options::overwrite_existing, ec); log << "ȡҼ¼" + to_string(cnt) + ""; } - else if (fs::exists(dir / "PlayerCards.bak")) { - cnt = loadBFile(dir / "PlayerCards.bak", PList); - if (cnt > 0)log << "ָҼ¼" + to_string(cnt) + ""; + else if (fs::exists(dir / "PlayerCards.RDconf.bak") + && (cnt = loadBFile(dir / "PlayerCards.RDconf.bak", PList)) > 0) { + log << "ָҼ¼" + to_string(cnt) + ""; + } + else if (fs::exists(dir / "PlayerCards.bak") + && (cnt = loadBFile(dir / "PlayerCards.bak", PList)) > 0) { + log << "ָҼ¼" + to_string(cnt) + ""; } for (const auto& pl : PList) { if (!UserList.count(pl.first))getUser(pl.first); @@ -181,13 +188,16 @@ void readUserData(){ fs::copy_options::overwrite_existing, ec); log << "ȡȺļ¼" + to_string(cnt) + ""; } - else if (fs::exists(dir / "ChatConf.bak")) { - cnt = loadBFile(dir / "ChatConf.bak", ChatList); - if (cnt > 0)log << "ָȺļ¼" + to_string(cnt) + ""; + else if (fs::exists(dir / "ChatConf.dat.bak") + && (cnt = loadBFile(dir / "ChatConf.dat.bak", ChatList)) > 0) { + log << "ָȺļ¼" + to_string(cnt) + ""; } - else { - cnt = loadBFile(dir / "ChatConf.RDconf", ChatList); - if (cnt > 0)log << "ǨȺļ¼" + to_string(cnt) + ""; + else if (fs::exists(dir / "ChatConf.bak") + && (cnt = loadBFile(dir / "ChatConf.bak", ChatList)) > 0) { + log << "ָȺļ¼" + to_string(cnt) + ""; + } + else if ((cnt = loadBFile(dir / "ChatConf.RDconf", ChatList)) > 0) { + log << "ǨȺļ¼" + to_string(cnt) + ""; } } catch (const std::exception& e) { @@ -207,12 +217,19 @@ void dataBackUp() { std::error_code ec; std::filesystem::create_directory(DiceDir / "conf", ec); - std::filesystem::create_directory(DiceDir / "user", ec); + static auto dirUser{ DiceDir / "user" }; + std::filesystem::create_directory(dirUser, ec); std::filesystem::create_directory(DiceDir / "audit", ec); //б - saveBFile(DiceDir / "user" / "UserConf.dat", UserList); - saveBFile(DiceDir / "user" / "PlayerCards.RDconf", PList); - saveBFile(DiceDir / "user" / "ChatConf.dat", ChatList); + static auto pathUser{ dirUser / "UserConf.dat" }; + fs::copy_file(pathUser, dirUser / "UserConf.dat.bak", fs::copy_options::update_existing); + saveBFile(pathUser, UserList); + static auto pathPlayer{ dirUser / "PlayerCards.RDconf" }; + fs::copy_file(pathPlayer, dirUser / "PlayerCards.RDconf.bak", fs::copy_options::update_existing); + saveBFile(pathPlayer, PList); + static auto pathChat{ dirUser / "ChatConf.dat" }; + fs::copy_file(pathChat, dirUser / "ChatConf.dat.bak", fs::copy_options::update_existing); + saveBFile(pathChat, ChatList); } atomic_flag isIniting = ATOMIC_FLAG_INIT; diff --git a/Dice/DiceEvent.cpp b/Dice/DiceEvent.cpp index 8fb09d69..cd1f854d 100644 --- a/Dice/DiceEvent.cpp +++ b/Dice/DiceEvent.cpp @@ -3354,6 +3354,14 @@ int DiceEvent::InnerOrder() { replyHelp("pc"); return 1; } + else if (strOption == "clr") { + if (PList.count(fromChat.uid)) { + PList.erase(fromChat.uid); + replyMsg("strPcClr"); + } + else replyMsg("strPcNotExistErr"); + return 1; + } Player& pl = getPlayer(fromChat.uid); int resno = 0; if (strOption == "tag") { @@ -3490,11 +3498,6 @@ int DiceEvent::InnerOrder() { } return 1; } - else if (strOption == "clr") { - PList.erase(fromChat.uid); - replyMsg("strPcClr"); - return 1; - } else if (strOption == "type") { if ((at("new_type") = strip(readRest())).str_empty()) { set("attr","ģ");