From cd3be8b5cf3c963bc38e8c792063d6c43a9a93dc Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 12 Jun 2016 14:02:02 -0300 Subject: [PATCH] Fixed handling of message updates when not in cache --- src/Discord.Net/DiscordSocketClient.cs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net/DiscordSocketClient.cs b/src/Discord.Net/DiscordSocketClient.cs index d2e3fa6cc..509139ca7 100644 --- a/src/Discord.Net/DiscordSocketClient.cs +++ b/src/Discord.Net/DiscordSocketClient.cs @@ -762,10 +762,23 @@ namespace Discord var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; if (channel != null) { - var msg = channel.GetMessage(data.Id); - var before = _enablePreUpdateEvents ? msg.Clone() : null; - msg.Update(data, UpdateSource.WebSocket); - await MessageUpdated.RaiseAsync(before, msg).ConfigureAwait(false); + IMessage before = null, after = null; + CachedMessage cachedMsg = channel.GetMessage(data.Id); + if (cachedMsg != null) + { + before = _enablePreUpdateEvents ? cachedMsg.Clone() : null; + cachedMsg.Update(data, UpdateSource.WebSocket); + after = cachedMsg; + } + else if (data.Author.IsSpecified) + { + //Edited message isnt in cache, create a detached one + var author = channel.GetUser(data.Author.Value.Id); + if (author != null) + after = new Message(channel, author, data); + } + if (after != null) + await MessageUpdated.RaiseAsync(before, after).ConfigureAwait(false); } else {