diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index a4bb83257..bdd0a13e0 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -118,6 +118,12 @@ namespace Discord { if (_voiceSocket.CurrentVoiceServerId != null) { + if (_config.TrackActivity) + { + var user = _users[e.UserId]; + if (user != null) + user.UpdateActivity(); + } var member = _members[e.UserId, _voiceSocket.CurrentVoiceServerId]; bool value = e.IsSpeaking; if (member.IsSpeaking != value) diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs index ae2a47858..a31fcb0f8 100644 --- a/src/Discord.Net/Models/User.cs +++ b/src/Discord.Net/Models/User.cs @@ -44,17 +44,14 @@ namespace Discord public IEnumerable Servers => _client.Servers.Where(x => x.HasMember(Id)); /// Returns a collection of all messages this user has sent that are still in cache. public IEnumerable Messages => _client.Messages.Where(x => x.UserId == Id); - - //TODO: Add voice triggering LastActivity + /// Returns the time this user last sent a message. - /// Is not currently affected by voice activity. - public DateTime LastActivity { get; private set; } + public DateTime? LastActivity { get; private set; } internal User(DiscordClient client, string id) { _client = client; Id = id; - LastActivity = DateTime.UtcNow; } internal void Update(UserReference model) @@ -70,10 +67,10 @@ namespace Discord IsVerified = model.IsVerified; } - internal void UpdateActivity(DateTime activity) + internal void UpdateActivity(DateTime? activity) { - if (activity > LastActivity) - LastActivity = activity; + if (LastActivity == null || activity > LastActivity.Value) + LastActivity = activity ?? DateTime.UtcNow; } public override string ToString() => Name;