diff --git a/src/MaaCore/Config/Miscellaneous/CopilotConfig.cpp b/src/MaaCore/Config/Miscellaneous/CopilotConfig.cpp index 54e1d14001..7479d49cad 100644 --- a/src/MaaCore/Config/Miscellaneous/CopilotConfig.cpp +++ b/src/MaaCore/Config/Miscellaneous/CopilotConfig.cpp @@ -4,10 +4,42 @@ #include "TilePack.h" #include "Utils/Logger.hpp" +#include "Utils/NoWarningCPR.h" using namespace asst::battle; using namespace asst::battle::copilot; +bool asst::CopilotConfig::parse_magic_code(const std::string& copilot_magic_code) +{ + if (copilot_magic_code.empty()) { + Log.error("copilot_magic_code is empty"); + return false; + } + + cpr::Response response = + cpr::Get(cpr::Url("https://prts.maa.plus/copilot/get/" + copilot_magic_code), cpr::Timeout { 10000 }); + + if (response.status_code != 200) { + Log.error("copilot_magic_code request failed"); + return false; + } + + auto json = json::parse(response.text); + + if (json && json->contains("status_code") && json->at("status_code").as_integer() == 200) { + if (json->contains("data") && json->at("data").contains("content")) { + auto content_str = json->at("data").at("content").as_string(); + auto content = json::parse(content_str); + if (content) { + return parse(*content); + } + } + } + + Log.error("using copilot_code failed, response:", response.text); + return false; +} + void asst::CopilotConfig::clear() { m_data = decltype(m_data)(); diff --git a/src/MaaCore/Config/Miscellaneous/CopilotConfig.h b/src/MaaCore/Config/Miscellaneous/CopilotConfig.h index 8f9f03986c..2ea9d92971 100644 --- a/src/MaaCore/Config/Miscellaneous/CopilotConfig.h +++ b/src/MaaCore/Config/Miscellaneous/CopilotConfig.h @@ -18,6 +18,7 @@ namespace asst const battle::copilot::CombatData& get_data() const noexcept { return m_data; } const std::string& get_stage_name() const noexcept { return m_data.info.stage_name; } + bool parse_magic_code(const std::string& copilot_magic_code); void clear(); protected: diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj index 7d7e5362ab..18a6afe5cc 100644 --- a/src/MaaCore/MaaCore.vcxproj +++ b/src/MaaCore/MaaCore.vcxproj @@ -179,6 +179,7 @@ + diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters index a2708925fc..3374a633b7 100644 --- a/src/MaaCore/MaaCore.vcxproj.filters +++ b/src/MaaCore/MaaCore.vcxproj.filters @@ -324,6 +324,9 @@ 源文件\Utils + + 源文件\Utils + 源文件\Utils diff --git a/src/MaaCore/Task/Interface/CopilotTask.cpp b/src/MaaCore/Task/Interface/CopilotTask.cpp index f0b3f9d82b..d4fc44254c 100644 --- a/src/MaaCore/Task/Interface/CopilotTask.cpp +++ b/src/MaaCore/Task/Interface/CopilotTask.cpp @@ -1,5 +1,7 @@ #include "CopilotTask.h" +#include + #include "Config/Miscellaneous/CopilotConfig.h" #include "Task/Miscellaneous/BattleFormationTask.h" #include "Task/Miscellaneous/BattleProcessTask.h" @@ -42,7 +44,16 @@ bool asst::CopilotTask::set_params(const json::value& params) return false; } - if (!Copilot.load(utils::path(*filename_opt))) { + static const std::regex maa_regex(R"(^maa://(\d+)$)"); + std::smatch match; + + if (std::regex_match(*filename_opt, match, maa_regex)) { + if (!Copilot.parse_magic_code(match[1].str())) { + Log.error("CopilotConfig parse failed"); + return false; + } + } + else if (!Copilot.load(utils::path(*filename_opt))) { Log.error("CopilotConfig parse failed"); return false; } diff --git a/src/MaaCore/Task/ReportDataTask.h b/src/MaaCore/Task/ReportDataTask.h index 655191a98f..6d49e55887 100644 --- a/src/MaaCore/Task/ReportDataTask.h +++ b/src/MaaCore/Task/ReportDataTask.h @@ -2,19 +2,12 @@ #include "AbstractTask.h" -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4244) -#endif -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - #include #include #include +#include "Utils/NoWarningCPR.h" + namespace asst { enum class ReportType diff --git a/src/MaaCore/Utils/NoWarningCPR.h b/src/MaaCore/Utils/NoWarningCPR.h new file mode 100644 index 0000000000..a79ce7ab45 --- /dev/null +++ b/src/MaaCore/Utils/NoWarningCPR.h @@ -0,0 +1,7 @@ +#pragma once + +#include "Common/AsstConf.h" + +ASST_SUPPRESS_CV_WARNINGS_START +#include +ASST_SUPPRESS_CV_WARNINGS_END