From 235ff5f7c7d6ffd2205c5447011cd6ba53ed05af Mon Sep 17 00:00:00 2001 From: RogueException Date: Thu, 22 Oct 2015 02:25:06 -0300 Subject: [PATCH] Added role updates via PRESENCE_UPDATE --- src/Discord.Net/API/Members.cs | 2 ++ src/Discord.Net/DiscordClient.cs | 8 +------- src/Discord.Net/Models/Member.cs | 20 +++++++++++++------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/Discord.Net/API/Members.cs b/src/Discord.Net/API/Members.cs index 2d2805a8d..2a48b653d 100644 --- a/src/Discord.Net/API/Members.cs +++ b/src/Discord.Net/API/Members.cs @@ -48,6 +48,8 @@ namespace Discord.API public string GameId; [JsonProperty("status")] public string Status; + [JsonProperty("roles")] //TODO: Might be temporary + public string[] Roles; } public class VoiceMemberInfo : MemberReference { diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 414170805..68f46173f 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -621,13 +621,7 @@ namespace Discord case "PRESENCE_UPDATE": { var data = e.Payload.ToObject(_serializer); - var member = _members[data.User.Id, data.GuildId]; - /*if (_config.TrackActivity) - { - var user = _users[data.User.Id]; - if (user != null) - user.UpdateActivity(DateTime.UtcNow); - }*/ + var member = _members.GetOrAdd(data.User.Id, data.GuildId); if (member != null) { member.Update(data); diff --git a/src/Discord.Net/Models/Member.cs b/src/Discord.Net/Models/Member.cs index b0b4db228..e892eed95 100644 --- a/src/Discord.Net/Models/Member.cs +++ b/src/Discord.Net/Models/Member.cs @@ -95,13 +95,8 @@ namespace Discord Update(model.User); if (model.JoinedAt.HasValue) JoinedAt = model.JoinedAt.Value; - - //Set roles, with the everyone role added too - string[] newRoles = new string[model.Roles.Length + 1]; - newRoles[0] = Server.EveryoneRoleId; - for (int i = 0; i < model.Roles.Length; i++) - newRoles[i + 1] = model.Roles[i]; - RoleIds = newRoles; + if (model.Roles != null) + UpdateRoles(model.Roles); UpdatePermissions(); } @@ -118,6 +113,8 @@ namespace Discord if (model.User != null) Update(model.User as UserReference); + if (model.Roles != null) + UpdateRoles(model.Roles); if (model.Status != null && Status != model.Status) { Status = model.Status; @@ -148,6 +145,15 @@ namespace Discord if (model.IsServerSuppressed != null) IsServerSuppressed = model.IsServerSuppressed.Value; } + private void UpdateRoles(string[] roleIds) + { + //Set roles, with the everyone role added too + string[] newRoles = new string[roleIds.Length + 1]; + newRoles[0] = Server.EveryoneRoleId; + for (int i = 0; i < roleIds.Length; i++) + newRoles[i + 1] = roleIds[i]; + RoleIds = newRoles; + } internal void UpdateActivity(DateTime? activity = null) {