| @@ -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) | ||||