summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2020-08-21 00:42:46 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2020-08-21 00:42:46 -0400
commit6f11aa4dae4c7334b150752f5cf8d270ce746d9c (patch)
tree45d7ed1776b9294ce5a0f89f872aff5e21a1f425 /discord
parenta201d5905ad9188e890eeb0cc0aee8d4fb9dcf3c (diff)
downloadabaddon-portaudio-6f11aa4dae4c7334b150752f5cf8d270ce746d9c.tar.gz
abaddon-portaudio-6f11aa4dae4c7334b150752f5cf8d270ce746d9c.zip
shitty MESSAGE_CREATE handling
Diffstat (limited to 'discord')
-rw-r--r--discord/discord.cpp17
-rw-r--r--discord/discord.hpp8
-rw-r--r--discord/websocket.cpp8
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;