summaryrefslogtreecommitdiff
path: root/src/discord
diff options
context:
space:
mode:
Diffstat (limited to 'src/discord')
-rw-r--r--src/discord/discord.cpp14
-rw-r--r--src/discord/discord.hpp2
2 files changed, 16 insertions, 0 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp
index 817aca8..5dc0464 100644
--- a/src/discord/discord.cpp
+++ b/src/discord/discord.cpp
@@ -1197,6 +1197,20 @@ void DiscordClient::AcceptVerificationGate(Snowflake guild_id, VerificationGateI
});
}
+void DiscordClient::RemoteAuthLogin(const std::string &ticket, const sigc::slot<void(std::optional<std::string>, DiscordError code)> &callback) {
+ http::request req(http::REQUEST_POST, "https://discord.com/api/v9/users/@me/remote-auth/login");
+ req.set_header("Content-Type", "application/json");
+ req.set_user_agent(Abaddon::Get().GetSettings().UserAgent);
+ req.set_body("{\"ticket\":\"" + ticket + "\"}");
+ m_http.Execute(std::move(req), [this, callback](const http::response_type &r) {
+ if (CheckCode(r)) {
+ callback(nlohmann::json::parse(r.text).at("encrypted_token").get<std::string>(), DiscordError::NONE);
+ } else {
+ callback(std::nullopt, GetCodeFromResponse(r));
+ }
+ });
+}
+
#ifdef WITH_VOICE
void DiscordClient::ConnectToVoice(Snowflake channel_id) {
auto channel = GetChannel(channel_id);
diff --git a/src/discord/discord.hpp b/src/discord/discord.hpp
index d2435dd..438e4e6 100644
--- a/src/discord/discord.hpp
+++ b/src/discord/discord.hpp
@@ -184,6 +184,8 @@ public:
void GetVerificationGateInfo(Snowflake guild_id, const sigc::slot<void(std::optional<VerificationGateInfoObject>)> &callback);
void AcceptVerificationGate(Snowflake guild_id, VerificationGateInfoObject info, const sigc::slot<void(DiscordError code)> &callback);
+ void RemoteAuthLogin(const std::string &ticket, const sigc::slot<void(std::optional<std::string>, DiscordError code)> &callback);
+
#ifdef WITH_VOICE
void ConnectToVoice(Snowflake channel_id);
void DisconnectFromVoice();