diff --git a/src/Discord.Net/API/Common.cs b/src/Discord.Net/API/Common.cs index 843c58ffc..cd65a82f8 100644 --- a/src/Discord.Net/API/Common.cs +++ b/src/Discord.Net/API/Common.cs @@ -260,7 +260,7 @@ namespace Discord.API public class RoleInfo { [JsonProperty("permissions")] - public int Permissions; + public uint Permissions; [JsonProperty("name")] public string Name; [JsonProperty("id")] diff --git a/src/Discord.Net/Models/Member.cs b/src/Discord.Net/Models/Member.cs index 863113b52..63dd1ad28 100644 --- a/src/Discord.Net/Models/Member.cs +++ b/src/Discord.Net/Models/Member.cs @@ -186,7 +186,7 @@ namespace Discord if (permissions.RawValue != newPermissions) { - permissions.RawValue = newPermissions; + permissions.SetRawValue(newPermissions); channel._areMembersStale = true; } } diff --git a/src/Discord.Net/Models/PackedPermissions.cs b/src/Discord.Net/Models/PackedPermissions.cs index 63c07127b..7fcbe5200 100644 --- a/src/Discord.Net/Models/PackedPermissions.cs +++ b/src/Discord.Net/Models/PackedPermissions.cs @@ -44,7 +44,16 @@ namespace Discord { private bool _isLocked; protected uint _rawValue; - public uint RawValue { get { return _rawValue; } internal set { _rawValue = value; } } //Internal set bypasses isLocked for API changes. + public uint RawValue + { + get { return _rawValue; } + set + { + if (_isLocked) + throw new InvalidOperationException("Unable to edit cached permissions directly, use Copy() to make an editable copy."); + _rawValue = value; + } + } protected PackedPermissions(bool isLocked, uint rawValue) { _isLocked = isLocked; _rawValue = rawValue; } @@ -92,6 +101,11 @@ namespace Discord //6 Unused + internal void SetRawValue(uint rawValue) + { + //Bypasses isLocked for API changes. + _rawValue = rawValue; + } protected bool GetBit(int pos) => ((_rawValue >> (pos - 1)) & 1U) == 1; protected void SetBit(int pos, bool value) { diff --git a/src/Discord.Net/Models/Role.cs b/src/Discord.Net/Models/Role.cs index ee93fd9ea..4114b4ee7 100644 --- a/src/Discord.Net/Models/Role.cs +++ b/src/Discord.Net/Models/Role.cs @@ -41,7 +41,7 @@ namespace Discord internal void Update(API.RoleInfo model) { Name = model.Name; - Permissions.RawValue = (uint)model.Permissions; + Permissions.SetRawValue(model.Permissions); foreach (var member in Members) member.UpdatePermissions();