@@ -6,7 +6,7 @@ using System.Threading.Tasks; | |||||
namespace Discord | namespace Discord | ||||
{ | { | ||||
/// <summary> A Guild-User pairing. </summary> | /// <summary> A Guild-User pairing. </summary> | ||||
public interface IGuildUser : IUser, IVoiceState, IComparable<IGuildUser> | |||||
public interface IGuildUser : IUser, IVoiceState, IComparable<IGuildUser>, IComparable<IRole> | |||||
{ | { | ||||
/// <summary> Gets when this user joined this guild. </summary> | /// <summary> Gets when this user joined this guild. </summary> | ||||
DateTimeOffset? JoinedAt { get; } | DateTimeOffset? JoinedAt { get; } | ||||
@@ -22,10 +22,15 @@ namespace Discord | |||||
} | } | ||||
internal static int Compare(this IGuildUser u1, IGuildUser u2) { | 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 r1 = u1.GetRoles().Max(); | ||||
var r2 = u2.GetRoles().Max(); | var r2 = u2.GetRoles().Max(); | ||||
var result = r1.CompareTo(r2); | var result = r1.CompareTo(r2); | ||||
return result != 0 ? result : u1.Id.CompareTo(u2.Id); | return result != 0 ? result : u1.Id.CompareTo(u2.Id); | ||||
} | } | ||||
internal static int Compare(this IGuildUser user, IRole role) { | |||||
return user.GetRoles().Max().CompareTo(role); | |||||
} | |||||
} | } | ||||
} | } |
@@ -98,6 +98,7 @@ namespace Discord.Rest | |||||
} | } | ||||
public int CompareTo(IGuildUser user) => this.Compare(user); | public int CompareTo(IGuildUser user) => this.Compare(user); | ||||
public int CompareTo(IRole role) => this.Compare(role); | |||||
//IVoiceState | //IVoiceState | ||||
bool IVoiceState.IsSelfDeafened => false; | bool IVoiceState.IsSelfDeafened => false; | ||||
@@ -97,6 +97,7 @@ namespace Discord.WebSocket | |||||
ulong IGuildUser.GuildId => Guild.Id; | ulong IGuildUser.GuildId => Guild.Id; | ||||
IReadOnlyCollection<ulong> IGuildUser.RoleIds => RoleIds; | IReadOnlyCollection<ulong> IGuildUser.RoleIds => RoleIds; | ||||
public int CompareTo(IGuildUser user) => this.Compare(user); | public int CompareTo(IGuildUser user) => this.Compare(user); | ||||
public int CompareTo(IRole role) => this.Compare(role); | |||||
//IUser | //IUser | ||||
Task<IDMChannel> IUser.GetDMChannelAsync(CacheMode mode, RequestOptions options) | Task<IDMChannel> IUser.GetDMChannelAsync(CacheMode mode, RequestOptions options) | ||||