2022-12-17 17:24:45 +01:00
|
|
|
#include "api_service.hpp"
|
2023-03-01 21:27:15 +00:00
|
|
|
|
2023-10-30 21:18:32 +01:00
|
|
|
#include "http_client/http_client.hpp"
|
2022-12-17 17:24:45 +01:00
|
|
|
#include "pointers.hpp"
|
2022-12-22 11:49:34 +01:00
|
|
|
#include "services/creator_storage/creator_storage_service.hpp"
|
2022-12-17 17:24:45 +01:00
|
|
|
|
2023-10-30 21:18:32 +01:00
|
|
|
|
2022-12-17 17:24:45 +01:00
|
|
|
namespace big
|
|
|
|
{
|
|
|
|
|
|
|
|
api_service::api_service()
|
|
|
|
{
|
|
|
|
g_api_service = this;
|
|
|
|
}
|
|
|
|
|
|
|
|
api_service::~api_service()
|
|
|
|
{
|
|
|
|
g_api_service = nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool api_service::get_rid_from_username(std::string_view username, uint64_t& result)
|
|
|
|
{
|
2023-10-30 21:18:32 +01:00
|
|
|
const auto response = g_http_client.post("https://scui.rockstargames.com/api/friend/accountsearch", {{"Authorization", AUTHORIZATION_TICKET}, {"X-Requested-With", "XMLHttpRequest"}}, {std::format("searchNickname={}", username)});
|
2022-12-17 17:24:45 +01:00
|
|
|
if (response.status_code == 200)
|
|
|
|
{
|
2023-07-01 22:25:40 +00:00
|
|
|
try
|
2022-12-17 17:24:45 +01:00
|
|
|
{
|
2023-07-01 22:25:40 +00:00
|
|
|
nlohmann::json obj = nlohmann::json::parse(response.text);
|
|
|
|
|
|
|
|
if (obj["Total"] > 0 && username.compare(obj["Accounts"].at(0)["Nickname"]) == 0)
|
|
|
|
{
|
|
|
|
result = obj["Accounts"].at(0)["RockstarId"];
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (std::exception& e)
|
|
|
|
{
|
|
|
|
return false;
|
2022-12-17 17:24:45 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool api_service::get_username_from_rid(uint64_t rid, std::string& result)
|
|
|
|
{
|
2023-10-30 21:18:32 +01:00
|
|
|
const auto response = g_http_client.post("https://scui.rockstargames.com/api/friend/getprofile", {{"Authorization", AUTHORIZATION_TICKET}, {"X-Requested-With", "XMLHttpRequest"}, {"Content-Type", "application/json"}}, std::format(R"({{"RockstarId":"{}"}})", rid));
|
2022-12-22 11:49:34 +01:00
|
|
|
if (response.status_code == 200)
|
2022-12-17 17:24:45 +01:00
|
|
|
{
|
2023-07-01 22:25:40 +00:00
|
|
|
try
|
|
|
|
{
|
|
|
|
nlohmann::json obj = nlohmann::json::parse(response.text);
|
|
|
|
result = obj["Accounts"].at(0)["RockstarAccount"]["Name"];
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
catch (std::exception& e)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2022-12-17 17:24:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2022-12-22 11:49:34 +01:00
|
|
|
// Ratelimit: 10 per Minute, if exceeded than 5 min cooldown
|
2022-12-17 17:24:45 +01:00
|
|
|
bool api_service::send_socialclub_message(uint64_t rid, std::string_view message)
|
|
|
|
{
|
2023-10-30 21:18:32 +01:00
|
|
|
const auto response = g_http_client.post("https://scui.rockstargames.com/api/messaging/sendmessage", {{"Authorization", AUTHORIZATION_TICKET}, {"X-Requested-With", "XMLHttpRequest"}, {"Content-Type", "application/json"}}, {std::format(R"({{"env":"prod","title":"gta5","version":11,"recipientRockstarId":"{}","messageText":"{}"}})", rid, message)});
|
2022-12-17 17:24:45 +01:00
|
|
|
|
|
|
|
return response.status_code == 200;
|
|
|
|
}
|
2022-12-22 11:49:34 +01:00
|
|
|
|
2023-01-03 11:35:11 +01:00
|
|
|
bool api_service::get_job_details(std::string_view content_id, nlohmann::json& result)
|
2022-12-22 11:49:34 +01:00
|
|
|
{
|
2023-10-30 21:18:32 +01:00
|
|
|
const auto response = g_http_client.get("https://scapi.rockstargames.com/ugc/mission/details",
|
|
|
|
{{"X-AMC", "true"}, {"X-Requested-With", "XMLHttpRequest"}},
|
|
|
|
{{"title", "gtav"}, {"contentId", content_id.data()}});
|
2022-12-22 11:49:34 +01:00
|
|
|
|
2023-07-01 22:25:40 +00:00
|
|
|
if (response.status_code != 200)
|
|
|
|
return false;
|
2022-12-22 11:49:34 +01:00
|
|
|
|
2023-07-01 22:25:40 +00:00
|
|
|
try
|
|
|
|
{
|
|
|
|
result = nlohmann::json::parse(response.text);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
catch (std::exception& e)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2022-12-22 11:49:34 +01:00
|
|
|
}
|
|
|
|
|
2023-01-03 11:35:11 +01:00
|
|
|
bool api_service::download_job_metadata(std::string_view content_id, int f1, int f0, int lang)
|
2022-12-22 11:49:34 +01:00
|
|
|
{
|
2023-10-30 21:18:32 +01:00
|
|
|
const auto response = g_http_client.get(std::format("https://prod.cloud.rockstargames.com/ugc/gta5mission/{}/{}_{}_{}.json",
|
2023-03-01 21:27:15 +00:00
|
|
|
content_id,
|
|
|
|
f1,
|
|
|
|
f0,
|
2023-10-30 21:18:32 +01:00
|
|
|
languages.at(lang)));
|
2023-01-03 11:35:11 +01:00
|
|
|
|
|
|
|
if (response.status_code == 200)
|
2022-12-22 11:49:34 +01:00
|
|
|
{
|
2023-10-30 21:18:32 +01:00
|
|
|
const auto of = creator_storage_service::create_file(std::string(content_id) + ".json");
|
2023-01-03 11:35:11 +01:00
|
|
|
|
2023-10-30 21:18:32 +01:00
|
|
|
return g_http_client.download(response.url, of);
|
2022-12-22 11:49:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
2022-12-17 17:24:45 +01:00
|
|
|
}
|