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)