summaryrefslogtreecommitdiff
path: root/discord/discord.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'discord/discord.cpp')
-rw-r--r--discord/discord.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp
index 6c61be2..37ac59f 100644
--- a/discord/discord.cpp
+++ b/discord/discord.cpp
@@ -177,10 +177,6 @@ void DiscordClient::UpdateToken(std::string token) {
m_http.SetAuth(token);
}
-std::string DiscordClient::DecompressGatewayMessage(std::string str) {
- return std::string();
-}
-
void DiscordClient::HandleGatewayMessageRaw(std::string str) {
// handles multiple zlib compressed messages, calling HandleGatewayMessage when a full message is received
std::vector<uint8_t> buf(str.begin(), str.end());
@@ -254,6 +250,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
case GatewayEvent::MESSAGE_DELETE: {
HandleGatewayMessageDelete(m);
} break;
+ case GatewayEvent::MESSAGE_UPDATE: {
+ HandleGatewayMessageUpdate(m);
+ } break;
}
} break;
default:
@@ -289,11 +288,27 @@ void DiscordClient::HandleGatewayMessageCreate(const GatewayMessage &msg) {
StoreMessage(data.ID, data);
m_abaddon->DiscordNotifyMessageCreate(data.ID);
}
+
void DiscordClient::HandleGatewayMessageDelete(const GatewayMessage &msg) {
MessageDeleteData data = msg.Data;
m_abaddon->DiscordNotifyMessageDelete(data.ID, data.ChannelID);
}
+void DiscordClient::HandleGatewayMessageUpdate(const GatewayMessage &msg) {
+ // less than stellar way of doing this probably
+ MessageData data;
+ data.from_json_edited(msg.Data);
+
+ if (m_messages.find(data.ID) == m_messages.end()) return;
+
+ auto &current = m_messages.at(data.ID);
+
+ if (data.Content != current.Content) {
+ current.Content = data.Content;
+ m_abaddon->DiscordNotifyMessageUpdateContent(data.ID, data.ChannelID);
+ }
+}
+
void DiscordClient::StoreGuild(Snowflake id, const GuildData &g) {
assert(id.IsValid() && id == g.ID);
m_guilds[id] = g;
@@ -355,4 +370,5 @@ void DiscordClient::LoadEventMap() {
m_event_map["READY"] = GatewayEvent::READY;
m_event_map["MESSAGE_CREATE"] = GatewayEvent::MESSAGE_CREATE;
m_event_map["MESSAGE_DELETE"] = GatewayEvent::MESSAGE_DELETE;
+ m_event_map["MESSAGE_UPDATE"] = GatewayEvent::MESSAGE_UPDATE;
}