@@ -314,11 +314,13 @@ namespace Discord.WebSocket | |||||
/// Clears cached users from the client. | /// Clears cached users from the client. | ||||
/// </summary> | /// </summary> | ||||
public void PurgeUserCache() => State.PurgeUsers(); | public void PurgeUserCache() => State.PurgeUsers(); | ||||
internal SocketGlobalUser GetOrCreateUser(ClientState state, Discord.API.User model, bool cache) | |||||
internal SocketGlobalUser GetOrCreateUser(ClientState state, Discord.API.User model) | |||||
{ | { | ||||
if (cache) | |||||
return state.GetOrAddUser(model.Id, x => SocketGlobalUser.Create(this, state, model)); | |||||
return state.GetUser(model.Id) ?? SocketGlobalUser.Create(this, state, model); | |||||
return state.GetOrAddUser(model.Id, x => SocketGlobalUser.Create(this, state, model)); | |||||
} | |||||
internal SocketUser GetOrCreateTemporaryUser(ClientState state, Discord.API.User model) | |||||
{ | |||||
return state.GetUser(model.Id) ?? (SocketUser)SocketUnknownUser.Create(this, state, model); | |||||
} | } | ||||
internal SocketGlobalUser GetOrCreateSelfUser(ClientState state, Discord.API.User model) | internal SocketGlobalUser GetOrCreateSelfUser(ClientState state, Discord.API.User model) | ||||
{ | { | ||||
@@ -29,14 +29,14 @@ namespace Discord.WebSocket | |||||
/// </summary> | /// </summary> | ||||
public new IReadOnlyCollection<SocketUser> Users => ImmutableArray.Create(Discord.CurrentUser, Recipient); | public new IReadOnlyCollection<SocketUser> Users => ImmutableArray.Create(Discord.CurrentUser, Recipient); | ||||
internal SocketDMChannel(DiscordSocketClient discord, ulong id, SocketGlobalUser recipient) | |||||
internal SocketDMChannel(DiscordSocketClient discord, ulong id, SocketUser recipient) | |||||
: base(discord, id) | : base(discord, id) | ||||
{ | { | ||||
Recipient = recipient; | Recipient = recipient; | ||||
} | } | ||||
internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, Model model) | internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, Model model) | ||||
{ | { | ||||
var entity = new SocketDMChannel(discord, model.Id, discord.GetOrCreateUser(state, model.Recipients.Value[0], false)); | |||||
var entity = new SocketDMChannel(discord, model.Id, discord.GetOrCreateTemporaryUser(state, model.Recipients.Value[0])); | |||||
entity.Update(state, model); | entity.Update(state, model); | ||||
return entity; | return entity; | ||||
} | } | ||||
@@ -46,7 +46,7 @@ namespace Discord.WebSocket | |||||
} | } | ||||
internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, ulong channelId, API.User recipient) | internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, ulong channelId, API.User recipient) | ||||
{ | { | ||||
var entity = new SocketDMChannel(discord, channelId, discord.GetOrCreateUser(state, recipient, false)); | |||||
var entity = new SocketDMChannel(discord, channelId, discord.GetOrCreateTemporaryUser(state, recipient)); | |||||
entity.Update(state, recipient); | entity.Update(state, recipient); | ||||
return entity; | return entity; | ||||
} | } | ||||
@@ -38,7 +38,7 @@ namespace Discord.WebSocket | |||||
} | } | ||||
internal static SocketGroupUser Create(SocketGroupChannel channel, ClientState state, Model model) | internal static SocketGroupUser Create(SocketGroupChannel channel, ClientState state, Model model) | ||||
{ | { | ||||
var entity = new SocketGroupUser(channel, channel.Discord.GetOrCreateUser(state, model, true)); | |||||
var entity = new SocketGroupUser(channel, channel.Discord.GetOrCreateUser(state, model)); | |||||
entity.Update(state, model); | entity.Update(state, model); | ||||
return entity; | return entity; | ||||
} | } | ||||
@@ -116,20 +116,20 @@ namespace Discord.WebSocket | |||||
} | } | ||||
internal static SocketGuildUser Create(SocketGuild guild, ClientState state, UserModel model) | internal static SocketGuildUser Create(SocketGuild guild, ClientState state, UserModel model) | ||||
{ | { | ||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model, true)); | |||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model)); | |||||
entity.Update(state, model); | entity.Update(state, model); | ||||
entity.UpdateRoles(new ulong[0]); | entity.UpdateRoles(new ulong[0]); | ||||
return entity; | return entity; | ||||
} | } | ||||
internal static SocketGuildUser Create(SocketGuild guild, ClientState state, MemberModel model) | internal static SocketGuildUser Create(SocketGuild guild, ClientState state, MemberModel model) | ||||
{ | { | ||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model.User, true)); | |||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model.User)); | |||||
entity.Update(state, model); | entity.Update(state, model); | ||||
return entity; | return entity; | ||||
} | } | ||||
internal static SocketGuildUser Create(SocketGuild guild, ClientState state, PresenceModel model) | internal static SocketGuildUser Create(SocketGuild guild, ClientState state, PresenceModel model) | ||||
{ | { | ||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model.User, true)); | |||||
var entity = new SocketGuildUser(guild, guild.Discord.GetOrCreateUser(state, model.User)); | |||||
entity.Update(state, model, false); | entity.Update(state, model, false); | ||||
return entity; | return entity; | ||||
} | } | ||||