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 {