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(); }