Browse Source

Add IGuildUser.Hirearchy, added docstrings

Property can be renamed as needed.
tags/1.0-rc
james7132 8 years ago
parent
commit
97a6bf6b6e
4 changed files with 21 additions and 10 deletions
  1. +5
    -0
      src/Discord.Net.Core/Entities/Users/IGuildUser.cs
  2. +12
    -7
      src/Discord.Net.Core/Extensions/GuildUserExtensions.cs
  3. +2
    -2
      src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
  4. +2
    -1
      src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs

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

@@ -28,5 +28,10 @@ namespace Discord
Task KickAsync(RequestOptions options = null);
/// <summary> Modifies this user's properties in this guild. </summary>
Task ModifyAsync(Action<ModifyGuildMemberParams> func, RequestOptions options = null);

/// <summary> The position of the user within the role hirearchy. </summary>
/// <remarks> The returned value equal to the position of the highest role the user has,
/// or int.MaxValue if user is the server owner. </remarks>
int Hirearchy { get; }
}
}

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

@@ -21,15 +21,20 @@ namespace Discord
return user.RoleIds.Select(r => guild.GetRole(r));
}

public static int CompareRoles(this IGuildUser left, IGuildUser right) {
// These should never be empty since the everyone role is always present
var roleLeft = left.GetRoles().Max();
var roleRight= right.GetRoles().Max();
return roleLeft.CompareTo(roleRight);
internal static int GetHirearchy(this IGuildUser user) {
if(user == null)
return -1;
if(user.Id == user.Guild.OwnerId)
return int.MaxValue;
return user.GetRoles().Max(r => r.Position);
}

public static int Compare(this IGuildUser user, IRole role) {
return user.GetRoles().Max().CompareTo(role);
internal static int CompareRole(this IGuildUser user, IRole role) {
if(user == null)
return -1;
if(role == null)
return 1;
return -user.Hirearchy.CompareTo(role.Position);
}
}
}

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

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

//IVoiceState
bool IVoiceState.IsSelfDeafened => false;


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

@@ -96,7 +96,8 @@ namespace Discord.WebSocket
IGuild IGuildUser.Guild => Guild;
ulong IGuildUser.GuildId => Guild.Id;
IReadOnlyCollection<ulong> IGuildUser.RoleIds => RoleIds;
public int CompareTo(IRole role) => this.Compare(role);
public int CompareTo(IRole role) => this.CompareRole(role);
public int Hirearchy => this.GetHirearchy();

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


Loading…
Cancel
Save