diff --git a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs index 139640e5a..01ce78a24 100644 --- a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs +++ b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Discord { /// A Guild-User pairing. - public interface IGuildUser : IUser, IVoiceState, IComparable + public interface IGuildUser : IUser, IVoiceState, IComparable, IComparable { /// Gets when this user joined this guild. DateTimeOffset? JoinedAt { get; } diff --git a/src/Discord.Net.Core/Extensions/GuildUserExtensions.cs b/src/Discord.Net.Core/Extensions/GuildUserExtensions.cs index 51e00fb42..b66a75b1f 100644 --- a/src/Discord.Net.Core/Extensions/GuildUserExtensions.cs +++ b/src/Discord.Net.Core/Extensions/GuildUserExtensions.cs @@ -22,10 +22,15 @@ namespace Discord } internal static int Compare(this IGuildUser u1, IGuildUser u2) { + // These should never be empty since the everyone role is always present var r1 = u1.GetRoles().Max(); var r2 = u2.GetRoles().Max(); var result = r1.CompareTo(r2); return result != 0 ? result : u1.Id.CompareTo(u2.Id); } + + internal static int Compare(this IGuildUser user, IRole role) { + return user.GetRoles().Max().CompareTo(role); + } } } diff --git a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs index 6e242e264..bebd245e6 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs @@ -98,6 +98,7 @@ namespace Discord.Rest } public int CompareTo(IGuildUser user) => this.Compare(user); + public int CompareTo(IRole role) => this.Compare(role); //IVoiceState bool IVoiceState.IsSelfDeafened => false; diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs index 3610b6284..9c8165d30 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs @@ -97,6 +97,7 @@ namespace Discord.WebSocket ulong IGuildUser.GuildId => Guild.Id; IReadOnlyCollection IGuildUser.RoleIds => RoleIds; public int CompareTo(IGuildUser user) => this.Compare(user); + public int CompareTo(IRole role) => this.Compare(role); //IUser Task IUser.GetDMChannelAsync(CacheMode mode, RequestOptions options)