From 2e9bca5b85f8547844f21548cb4b348ced8181df Mon Sep 17 00:00:00 2001 From: james7132 Date: Sat, 29 Oct 2016 08:03:58 +0000 Subject: [PATCH] Fix role comparison --- src/Discord.Net.Core/Extensions/RoleExtensions.cs | 19 +++++++++++++++++++ src/Discord.Net.Rest/Entities/Roles/RestRole.cs | 2 +- .../Entities/Roles/SocketRole.cs | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/Discord.Net.Core/Extensions/RoleExtensions.cs diff --git a/src/Discord.Net.Core/Extensions/RoleExtensions.cs b/src/Discord.Net.Core/Extensions/RoleExtensions.cs new file mode 100644 index 000000000..db146a36c --- /dev/null +++ b/src/Discord.Net.Core/Extensions/RoleExtensions.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Discord +{ + public static class RoleExtensions + { + internal static int Compare(this IRole r1, IRole r2) { + if(r2 == null) + return 1; + var result = r1.Position.CompareTo(r2.Position); + // As per Discord's documentation, a tie is broken by ID + if(result != 0) + return result; + return r1.Id.CompareTo(r2.Id); + } + } +} diff --git a/src/Discord.Net.Rest/Entities/Roles/RestRole.cs b/src/Discord.Net.Rest/Entities/Roles/RestRole.cs index 60d868caa..bfa081def 100644 --- a/src/Discord.Net.Rest/Entities/Roles/RestRole.cs +++ b/src/Discord.Net.Rest/Entities/Roles/RestRole.cs @@ -55,6 +55,6 @@ namespace Discord.Rest { [DebuggerDisplay(@"{DebuggerDisplay,nq}")] //IRole IGuild IRole.Guild => Guild; - public int CompareTo(IRole role) => Position.CompareTo(role.Position); + public int CompareTo(IRole role) => this.Compare(role); } } diff --git a/src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs b/src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs index d6612dcb6..5fa585138 100644 --- a/src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs +++ b/src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs @@ -57,6 +57,6 @@ namespace Discord.WebSocket //IRole IGuild IRole.Guild => Guild; - public int CompareTo(IRole role) => Position.CompareTo(role.Position); + public int CompareTo(IRole role) => this.CompareTo(role); } }