diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-08-21 00:42:46 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-08-21 00:42:46 -0400 |
commit | 6f11aa4dae4c7334b150752f5cf8d270ce746d9c (patch) | |
tree | 45d7ed1776b9294ce5a0f89f872aff5e21a1f425 /discord | |
parent | a201d5905ad9188e890eeb0cc0aee8d4fb9dcf3c (diff) | |
download | abaddon-portaudio-6f11aa4dae4c7334b150752f5cf8d270ce746d9c.tar.gz abaddon-portaudio-6f11aa4dae4c7334b150752f5cf8d270ce746d9c.zip |
shitty MESSAGE_CREATE handling
Diffstat (limited to 'discord')
-rw-r--r-- | discord/discord.cpp | 17 | ||||
-rw-r--r-- | discord/discord.hpp | 8 | ||||
-rw-r--r-- | discord/websocket.cpp | 8 |
3 files changed, 30 insertions, 3 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp index 89c7694..a7d2993 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -113,6 +113,10 @@ void DiscordClient::FetchMessagesInChannel(Snowflake id, std::function<void(cons }); } +const MessageData *DiscordClient::GetMessage(Snowflake id) const { + return &m_messages.at(id); +} + void DiscordClient::UpdateToken(std::string token) { m_token = token; m_http.SetAuth(token); @@ -147,7 +151,10 @@ void DiscordClient::HandleGatewayMessage(nlohmann::json j) { switch (iter->second) { case GatewayEvent::READY: { HandleGatewayReady(m); - } + } break; + case GatewayEvent::MESSAGE_CREATE: { + HandleGatewayMessageCreate(m); + } break; } } break; default: @@ -164,7 +171,12 @@ void DiscordClient::HandleGatewayReady(const GatewayMessage &msg) { } m_abaddon->DiscordNotifyReady(); m_user_settings = data.UserSettings; - return; +} + +void DiscordClient::HandleGatewayMessageCreate(const GatewayMessage& msg) { + MessageData data = msg.Data; + StoreMessage(data.ID, data); + m_abaddon->DiscordNotifyMessageCreate(data.ID); } void DiscordClient::StoreGuild(Snowflake id, const GuildData &g) { @@ -211,6 +223,7 @@ void DiscordClient::SendIdentify() { void DiscordClient::LoadEventMap() { m_event_map["READY"] = GatewayEvent::READY; + m_event_map["MESSAGE_CREATE"] = GatewayEvent::MESSAGE_CREATE; } #define JS_D(k, t) \ diff --git a/discord/discord.hpp b/discord/discord.hpp index 4ece752..051f715 100644 --- a/discord/discord.hpp +++ b/discord/discord.hpp @@ -7,6 +7,11 @@ #include <unordered_set> #include <mutex> +// bruh +#ifdef GetMessage +#undef GetMessage +#endif + struct Snowflake { Snowflake(); Snowflake(const Snowflake &s); @@ -64,6 +69,7 @@ enum class GatewayOp : int { enum class GatewayEvent : int { READY, + MESSAGE_CREATE, }; struct GatewayMessage { @@ -381,12 +387,14 @@ public: void UpdateSettingsGuildPositions(const std::vector<Snowflake> &pos); void FetchMessagesInChannel(Snowflake id, std::function<void(const std::vector<MessageData> &)> cb); + const MessageData *GetMessage(Snowflake id) const; void UpdateToken(std::string token); private: void HandleGatewayMessage(nlohmann::json msg); void HandleGatewayReady(const GatewayMessage &msg); + void HandleGatewayMessageCreate(const GatewayMessage &msg); void HeartbeatThread(); void SendIdentify(); diff --git a/discord/websocket.cpp b/discord/websocket.cpp index b867368..8232ac6 100644 --- a/discord/websocket.cpp +++ b/discord/websocket.cpp @@ -39,7 +39,13 @@ void Websocket::OnMessage(const ix::WebSocketMessagePtr &msg) { // printf("%s\n", msg->str.substr(0, 1000).c_str()); //else // printf("%s\n", msg->str.c_str()); - auto obj = nlohmann::json::parse(msg->str); + nlohmann::json obj; + try { + obj = nlohmann::json::parse(msg->str); + } catch (std::exception &e) { + printf("Error decoding JSON. Discarding message: %s\n", e.what()); + return; + } if (m_json_callback) m_json_callback(obj); } break; |