Browse Source

fix: Message update without author (#1862)

pull/1863/head
Paulo GitHub 4 years ago
parent
commit
fabe034daa
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 26 additions and 20 deletions
  1. +26
    -20
      src/Discord.Net.WebSocket/DiscordSocketClient.cs

+ 26
- 20
src/Discord.Net.WebSocket/DiscordSocketClient.cs View File

@@ -1329,21 +1329,8 @@ namespace Discord.WebSocket
return; return;
} }


if (channel == null)
{
if (!data.GuildId.IsSpecified) // assume it is a DM
{
channel = CreateDMChannel(data.ChannelId, data.Author.Value, State);
}
else
{
await UnknownChannelAsync(type, data.ChannelId).ConfigureAwait(false);
return;
}
}

SocketMessage before = null, after = null; SocketMessage before = null, after = null;
SocketMessage cachedMsg = channel.GetCachedMessage(data.Id);
SocketMessage cachedMsg = channel?.GetCachedMessage(data.Id);
bool isCached = cachedMsg != null; bool isCached = cachedMsg != null;
if (isCached) if (isCached)
{ {
@@ -1365,7 +1352,7 @@ namespace Discord.WebSocket
author = guild.GetUser(data.Author.Value.Id); author = guild.GetUser(data.Author.Value.Id);
} }
else else
author = (channel as SocketChannel).GetUser(data.Author.Value.Id);
author = (channel as SocketChannel)?.GetUser(data.Author.Value.Id);


if (author == null) if (author == null)
{ {
@@ -1381,17 +1368,32 @@ namespace Discord.WebSocket
} }
else if (channel is SocketGroupChannel groupChannel) else if (channel is SocketGroupChannel groupChannel)
author = groupChannel.GetOrAddUser(data.Author.Value); author = groupChannel.GetOrAddUser(data.Author.Value);
else
{
await UnknownChannelUserAsync(type, data.Author.Value.Id, channel.Id).ConfigureAwait(false);
return;
}
} }
} }
else else
// Message author wasn't specified in the payload, so create a completely anonymous unknown user // Message author wasn't specified in the payload, so create a completely anonymous unknown user
author = new SocketUnknownUser(this, id: 0); author = new SocketUnknownUser(this, id: 0);


if (channel == null)
{
if (!data.GuildId.IsSpecified) // assume it is a DM
{
if (data.Author.IsSpecified)
{
var dmChannel = CreateDMChannel(data.ChannelId, data.Author.Value, State);
channel = dmChannel;
author = dmChannel.Recipient;
}
else
channel = CreateDMChannel(data.ChannelId, author, State);
}
else
{
await UnknownChannelAsync(type, data.ChannelId).ConfigureAwait(false);
return;
}
}

after = SocketMessage.Create(this, State, author, channel, data); after = SocketMessage.Create(this, State, author, channel, data);
} }
var cacheableBefore = new Cacheable<IMessage, ulong>(before, data.Id, isCached, async () => await channel.GetMessageAsync(data.Id).ConfigureAwait(false)); var cacheableBefore = new Cacheable<IMessage, ulong>(before, data.Id, isCached, async () => await channel.GetMessageAsync(data.Id).ConfigureAwait(false));
@@ -1989,6 +1991,10 @@ namespace Discord.WebSocket
{ {
return SocketDMChannel.Create(this, state, channelId, model); return SocketDMChannel.Create(this, state, channelId, model);
} }
internal SocketDMChannel CreateDMChannel(ulong channelId, SocketUser user, ClientState state)
{
return new SocketDMChannel(this, channelId, user);
}
internal ISocketPrivateChannel RemovePrivateChannel(ulong id) internal ISocketPrivateChannel RemovePrivateChannel(ulong id)
{ {
var channel = State.RemoveChannel(id) as ISocketPrivateChannel; var channel = State.RemoveChannel(id) as ISocketPrivateChannel;


Loading…
Cancel
Save