From 84157c804f293ad38dcd89aa39475b4b18e0587c Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 12 Jun 2016 21:30:33 -0300 Subject: [PATCH] Create fake GuildUser if a message is downloaded for a missing user. --- src/Discord.Net/Entities/Users/GuildUser.cs | 3 ++- src/Discord.Net/Entities/WebSocket/MessageCache.cs | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net/Entities/Users/GuildUser.cs b/src/Discord.Net/Entities/Users/GuildUser.cs index 7e215c170..aa9485771 100644 --- a/src/Discord.Net/Entities/Users/GuildUser.cs +++ b/src/Discord.Net/Entities/Users/GuildUser.cs @@ -37,10 +37,11 @@ namespace Discord public DiscordClient Discord => Guild.Discord; - private GuildUser(Guild guild, User user) + public GuildUser(Guild guild, User user) { Guild = guild; User = user; + Roles = ImmutableArray.Create(); } public GuildUser(Guild guild, User user, Model model) : this(guild, user) diff --git a/src/Discord.Net/Entities/WebSocket/MessageCache.cs b/src/Discord.Net/Entities/WebSocket/MessageCache.cs index 87b0d7910..c51088129 100644 --- a/src/Discord.Net/Entities/WebSocket/MessageCache.cs +++ b/src/Discord.Net/Entities/WebSocket/MessageCache.cs @@ -116,9 +116,19 @@ namespace Discord RelativeMessageId = relativeId }; var downloadedMessages = await _discord.ApiClient.GetChannelMessagesAsync(_channel.Id, args).ConfigureAwait(false); + + var guild = (_channel as ICachedGuildChannel).Guild; return cachedMessages.Concat(downloadedMessages.Select(x => { - var user = _channel.GetUser(x.Author.Value.Id) ?? new User(_channel.Discord, x.Author.Value) as IUser; + IUser user = _channel.GetUser(x.Author.Value.Id); + if (user == null) + { + var newUser = new User(_channel.Discord, x.Author.Value); + if (guild != null) + user = new GuildUser(guild, newUser); + else + user = newUser; + } return new CachedMessage(_channel, user, x); })).ToImmutableArray(); }