Skip to content

Commit d188a55

Browse files
authored
Implemented JSON and Automation Generation
JSON data containing primary colors of the player and the other team. Added automation generation option using a Home Assistant API token.
1 parent 9ec29ae commit d188a55

10 files changed

+584
-169
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include "pch.h"
2+
#include "RocketLeagueAssistant.h"
3+
#include "IMGUI/imgui_internal.h"
4+
#include "IMGUI/imgui_searchablecombo.h"
5+
#include "imgui_stdlib.h"
6+
7+
8+
void RocketLeagueAssistant::CreateAutomation(std::string webhookURL, std::string automationID)
9+
{
10+
11+
12+
//Get HA url, transform
13+
CVarWrapper haBaseURLURLCVar = cvarManager->getCvar("ha_haBaseURL");
14+
if (!haBaseURLURLCVar) { return; }
15+
16+
//convert to string
17+
auto baseURL = cvarManager->getCvar("ha_haBaseURL");
18+
std::string baseURLString = baseURL.getStringValue();
19+
20+
//Get toekn, transform
21+
CVarWrapper hatokenLCVar = cvarManager->getCvar("ha_token");
22+
if (!hatokenLCVar) { return; }
23+
24+
//convert to string
25+
auto token = cvarManager->getCvar("ha_token");
26+
std::string tokenString = token.getStringValue();
27+
28+
CurlRequest req;
29+
//std::string dataVar = "{\"data\" :";
30+
//std::string both = dataVar + " \"" + event + "\"}";
31+
32+
req.verb = "POST";
33+
req.url = baseURLString + "/api/config/automation/config/" + automationID;
34+
35+
std::map<std::string, std::string> jsonHeader{ {"Authorization", "Bearer " + tokenString}};
36+
37+
req.headers = jsonHeader;
38+
39+
std::string dataVar = "{\"id\" :";
40+
std::string last = R"T("alias":"RocketLeague - BakkesGenerated","description":"","trigger":[{"platform":"webhook","webhook_id":")T" + webhookURL + R"T("}],"condition":[],"action":[{"choose":[{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'home' }}","alias":"Blue Team (Home) Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'away' }}","alias":"Orange Team (Away) Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'mainmenu' }}","alias":"Main Menu Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'teamScored' }}","alias":"Your Team Scored Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'otherTeamScored' }}","alias":"The Other Team Scored Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'teamDemoed' }}","alias":"Your Team Demo'd the Other Team Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'gotDemoed' }}","alias":"The Other Team Demo'd Your Team Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'freeplay' }}","alias":"Freeplay Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'overtime' }}","alias":"Overtime Automation"}],"sequence":[]},{"conditions":[{"condition":"template","value_template":"{{ trigger.json.data == 'exit' }}","alias":"Game Exit Automation (ex: Return Lights to Normal)"}],"sequence":[]}]}],"mode":"single"}
41+
)T";
42+
43+
LOG("{}", last);
44+
std::string both = dataVar + " \"" + automationID + "\"," + last;
45+
46+
req.body = both;
47+
48+
LOG("{}", req.url);
49+
50+
HttpWrapper::SendCurlRequest(req, [this](int code, std::string result)
51+
{
52+
LOG("Body result(Generally empty): {}", result);
53+
});
54+
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include <ctime>
2+
#include <iostream>
3+
#include "pch.h"
4+
#include "RocketLeagueAssistant.h"
5+
#include "IMGUI/imgui_internal.h"
6+
#include "IMGUI/imgui_searchablecombo.h"
7+
#include "imgui_stdlib.h"
8+
#include <iostream>
9+
#include <vector>
10+
#include <random>
11+
#include <string>
12+
#include <functional> //for std::function
13+
#include <algorithm> //for std::generate_n
14+
15+
typedef std::vector<char> char_array;
16+
17+
std::string random_string()
18+
{
19+
std::string str("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
20+
21+
std::random_device rd;
22+
std::mt19937 generator(rd());
23+
24+
std::shuffle(str.begin(), str.end(), generator);
25+
26+
return str.substr(0, 32); // assumes 32 < number of characters in str
27+
}
28+
29+
std::string random_number()
30+
{
31+
std::string str("012345678901234567890");
32+
33+
std::random_device rd;
34+
std::mt19937 generator(rd());
35+
36+
std::shuffle(str.begin(), str.end(), generator);
37+
38+
return str.substr(0, 13); // assumes 32 < number of characters in str
39+
}
40+
41+
std::string RocketLeagueAssistant::GenWebHook() {
42+
43+
44+
45+
std::string webhookURL = "rocketleagueassistant-"+random_string();
46+
return webhookURL;
47+
48+
};
49+
50+
std::string RocketLeagueAssistant::GenAutomationID() {
51+
52+
std::string automationID = random_number();
53+
return automationID;
54+
55+
};

0 commit comments

Comments
 (0)