Browse Source

Implemented IComparable<T> on IRole and IGuildUUser

tags/1.0-rc
james7132 8 years ago
parent
commit
f3cd96d2fe
7 changed files with 23 additions and 6 deletions
  1. +2
    -2
      src/Discord.Net.Core/Entities/Roles/IRole.cs
  2. +1
    -1
      src/Discord.Net.Core/Entities/Users/IGuildUser.cs
  3. +12
    -0
      src/Discord.Net.Core/Extensions/GuildUserExtensions.cs
  4. +3
    -3
      src/Discord.Net.Rest/Entities/Roles/RestRole.cs
  5. +3
    -0
      src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
  6. +1
    -0
      src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs
  7. +1
    -0
      src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs

+ 2
- 2
src/Discord.Net.Core/Entities/Roles/IRole.cs View File

@@ -4,7 +4,7 @@ using System.Threading.Tasks;


namespace Discord namespace Discord
{ {
public interface IRole : ISnowflakeEntity, IDeletable, IMentionable
public interface IRole : ISnowflakeEntity, IDeletable, IMentionable, IComparable<IRole>
{ {
/// <summary> Gets the guild owning this role.</summary> /// <summary> Gets the guild owning this role.</summary>
IGuild Guild { get; } IGuild Guild { get; }
@@ -27,4 +27,4 @@ namespace Discord
///// <summary> Modifies this role. </summary> ///// <summary> Modifies this role. </summary>
Task ModifyAsync(Action<ModifyGuildRoleParams> func, RequestOptions options = null); Task ModifyAsync(Action<ModifyGuildRoleParams> func, RequestOptions options = null);
} }
}
}

+ 1
- 1
src/Discord.Net.Core/Entities/Users/IGuildUser.cs View File

@@ -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
public interface IGuildUser : IUser, IVoiceState, IComparable<IGuildUser>
{ {
/// <summary> Gets when this user joined this guild. </summary> /// <summary> Gets when this user joined this guild. </summary>
DateTimeOffset? JoinedAt { get; } DateTimeOffset? JoinedAt { get; }


+ 12
- 0
src/Discord.Net.Core/Extensions/GuildUserExtensions.cs View File

@@ -15,5 +15,17 @@ namespace Discord
=> RemoveRolesAsync(user, (IEnumerable<IRole>)roles); => RemoveRolesAsync(user, (IEnumerable<IRole>)roles);
public static Task RemoveRolesAsync(this IGuildUser user, IEnumerable<IRole> roles) public static Task RemoveRolesAsync(this IGuildUser user, IEnumerable<IRole> roles)
=> user.ModifyAsync(x => x.RoleIds = user.RoleIds.Except(roles.Select(y => y.Id)).ToArray()); => user.ModifyAsync(x => x.RoleIds = user.RoleIds.Except(roles.Select(y => y.Id)).ToArray());

public static IEnumerable<IRole> GetRoles(this IGuildUser user) {
var guild = user.Guild;
return user.RoleIds.Select(r => guild.GetRole(r));
}

internal static int Compare(this IGuildUser u1, IGuildUser u2) {
var r1 = u1.GetRoles().Max();
var r2 = u2.GetRoles().Max();
var result = r1.CompareTo(r2);
return result != 0 ? result : u1.Id.CompareTo(u2.Id);
}
} }
} }

+ 3
- 3
src/Discord.Net.Rest/Entities/Roles/RestRole.cs View File

@@ -4,9 +4,7 @@ using System.Diagnostics;
using System.Threading.Tasks; using System.Threading.Tasks;
using Model = Discord.API.Role; using Model = Discord.API.Role;


namespace Discord.Rest
{
[DebuggerDisplay(@"{DebuggerDisplay,nq}")]
namespace Discord.Rest { [DebuggerDisplay(@"{DebuggerDisplay,nq}")]
public class RestRole : RestEntity<ulong>, IRole public class RestRole : RestEntity<ulong>, IRole
{ {
public RestGuild Guild { get; } public RestGuild Guild { get; }
@@ -51,10 +49,12 @@ namespace Discord.Rest
public Task DeleteAsync(RequestOptions options = null) public Task DeleteAsync(RequestOptions options = null)
=> RoleHelper.DeleteAsync(this, Discord, options); => RoleHelper.DeleteAsync(this, Discord, options);



public override string ToString() => Name; public override string ToString() => Name;
private string DebuggerDisplay => $"{Name} ({Id})"; private string DebuggerDisplay => $"{Name} ({Id})";


//IRole //IRole
IGuild IRole.Guild => Guild; IGuild IRole.Guild => Guild;
public int CompareTo(IRole role) => Position.CompareTo(role.Position);
} }
} }

+ 3
- 0
src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs View File

@@ -96,6 +96,8 @@ namespace Discord.Rest
throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object."); throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object.");
} }
} }
public int CompareTo(IGuildUser user) => this.Compare(user);


//IVoiceState //IVoiceState
bool IVoiceState.IsSelfDeafened => false; bool IVoiceState.IsSelfDeafened => false;
@@ -103,5 +105,6 @@ namespace Discord.Rest
bool IVoiceState.IsSuppressed => false; bool IVoiceState.IsSuppressed => false;
IVoiceChannel IVoiceState.VoiceChannel => null; IVoiceChannel IVoiceState.VoiceChannel => null;
string IVoiceState.VoiceSessionId => null; string IVoiceState.VoiceSessionId => null;

} }
} }

+ 1
- 0
src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs View File

@@ -57,5 +57,6 @@ namespace Discord.WebSocket


//IRole //IRole
IGuild IRole.Guild => Guild; IGuild IRole.Guild => Guild;
public int CompareTo(IRole role) => Position.CompareTo(role.Position);
} }
} }

+ 1
- 0
src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs View File

@@ -96,6 +96,7 @@ namespace Discord.WebSocket
IGuild IGuildUser.Guild => Guild; IGuild IGuildUser.Guild => Guild;
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);


//IUser //IUser
Task<IDMChannel> IUser.GetDMChannelAsync(CacheMode mode, RequestOptions options) Task<IDMChannel> IUser.GetDMChannelAsync(CacheMode mode, RequestOptions options)


Loading…
Cancel
Save