diff --git a/src/Discord.Net/Models/Server.cs b/src/Discord.Net/Models/Server.cs
index 2ceaac81f..9da95c5bf 100644
--- a/src/Discord.Net/Models/Server.cs
+++ b/src/Discord.Net/Models/Server.cs
@@ -29,11 +29,12 @@ namespace Discord
[JsonIgnore]
public User Owner { get; private set; }
private string _ownerId;
-
+
/// Returns the AFK voice channel for this server (see AFKTimeout).
[JsonIgnore]
- public Channel AFKChannel { get; private set; }
-
+ public Channel AFKChannel => _afkChannel.Value;
+ private Reference _afkChannel;
+
/// Returns the default channel for this server.
[JsonIgnore]
public Channel DefaultChannel { get; private set; }
@@ -75,6 +76,8 @@ namespace Discord
internal Server(DiscordClient client, string id)
: base(client, id)
{
+ _afkChannel = new Reference(x => _client.Channels[x]);
+
//Global Cache
_channels = new ConcurrentDictionary();
_members = new ConcurrentDictionary();
@@ -83,8 +86,11 @@ namespace Discord
//Local Cache
_bans = new ConcurrentDictionary();
_invites = new ConcurrentDictionary();
- }
- internal override void LoadReferences() { }
+ }
+ internal override void LoadReferences()
+ {
+ _afkChannel.Load();
+ }
internal override void UnloadReferences()
{
//Global Cache
@@ -113,15 +119,15 @@ namespace Discord
invites.Clear();
_bans.Clear();
- }
+
+ _afkChannel.Unload();
+ }
internal void Update(GuildInfo model)
{
- //Can be null
- AFKChannel = _client.Channels[model.AFKChannelId];
-
if (model.AFKTimeout != null)
AFKTimeout = model.AFKTimeout.Value;
+ if (model.AFKChannelId != null)
if (model.JoinedAt != null)
JoinedAt = model.JoinedAt.Value;
if (model.Name != null)
@@ -143,6 +149,8 @@ namespace Discord
role.Update(x);
}
}
+
+ _afkChannel.Id = model.AFKChannelId; //Can be null
}
internal void Update(ExtendedGuildInfo model)
{