[Feature] Add team member Role property (#2965)

This commit is contained in:
Mihail Gribkov
2024-07-21 17:49:00 +03:00
committed by GitHub
parent 721e03bcce
commit 6e531a2344
5 changed files with 111 additions and 54 deletions

View File

@@ -1,25 +1,32 @@
namespace Discord namespace Discord;
/// <summary>
/// Represents a Discord Team member.
/// </summary>
public interface ITeamMember
{ {
/// <summary>
/// Represents a Discord Team member.
/// </summary>
public interface ITeamMember
{
/// <summary> /// <summary>
/// Gets the membership state of this team member. /// Gets the membership state of this team member.
/// </summary> /// </summary>
MembershipState MembershipState { get; } MembershipState MembershipState { get; }
/// <summary> /// <summary>
/// Gets the permissions of this team member. /// Gets the permissions of this team member.
/// </summary> /// </summary>
string[] Permissions { get; } string[] Permissions { get; }
/// <summary> /// <summary>
/// Gets the team unique identifier for this team member. /// Gets the team unique identifier for this team member.
/// </summary> /// </summary>
ulong TeamId { get; } ulong TeamId { get; }
/// <summary> /// <summary>
/// Gets the Discord user of this team member. /// Gets the Discord user of this team member.
/// </summary> /// </summary>
IUser User { get; } IUser User { get; }
}
/// <summary>
/// Gets the role of this team member.
/// </summary>
public TeamRole Role { get; }
} }

View File

@@ -0,0 +1,27 @@
namespace Discord;
/// <summary>
/// Represents a Discord Team member role.
/// </summary>
public enum TeamRole
{
/// <summary>
/// The user is the owner of the team.
/// </summary>
Owner,
/// <summary>
/// The user is an admin in the team.
/// </summary>
Admin,
/// <summary>
/// The user is a developer in the team.
/// </summary>
Developer,
/// <summary>
/// The user is a read-only member of the team.
/// </summary>
ReadOnly,
}

View File

@@ -1,16 +1,21 @@
using Newtonsoft.Json; using Newtonsoft.Json;
namespace Discord.API namespace Discord.API;
internal class TeamMember
{ {
internal class TeamMember
{
[JsonProperty("membership_state")] [JsonProperty("membership_state")]
public MembershipState MembershipState { get; set; } public MembershipState MembershipState { get; set; }
[JsonProperty("permissions")] [JsonProperty("permissions")]
public string[] Permissions { get; set; } public string[] Permissions { get; set; }
[JsonProperty("team_id")] [JsonProperty("team_id")]
public ulong TeamId { get; set; } public ulong TeamId { get; set; }
[JsonProperty("user")] [JsonProperty("user")]
public User User { get; set; } public User User { get; set; }
}
[JsonProperty("role")]
public string Role { get; set; }
} }

View File

@@ -34,7 +34,7 @@ namespace Discord.Rest
_iconId = model.Icon.Value; _iconId = model.Icon.Value;
Name = model.Name; Name = model.Name;
OwnerUserId = model.OwnerUserId; OwnerUserId = model.OwnerUserId;
TeamMembers = model.TeamMembers.Select(x => new RestTeamMember(Discord, x)).ToImmutableArray(); TeamMembers = model.TeamMembers.Select(x => new RestTeamMember(Discord, x, model)).ToImmutableArray();
} }
} }
} }

View File

@@ -1,20 +1,28 @@
using System; using System;
using Model = Discord.API.TeamMember;
namespace Discord.Rest using Model = Discord.API.TeamMember;
using TeamModel = Discord.API.Team;
namespace Discord.Rest;
public class RestTeamMember : ITeamMember
{ {
public class RestTeamMember : ITeamMember
{
/// <inheritdoc /> /// <inheritdoc />
public MembershipState MembershipState { get; } public MembershipState MembershipState { get; }
/// <inheritdoc /> /// <inheritdoc />
public string[] Permissions { get; } public string[] Permissions { get; }
/// <inheritdoc /> /// <inheritdoc />
public ulong TeamId { get; } public ulong TeamId { get; }
/// <inheritdoc /> /// <inheritdoc />
public IUser User { get; } public IUser User { get; }
internal RestTeamMember(BaseDiscordClient discord, Model model) /// <inheritdoc />
public TeamRole Role { get; }
internal RestTeamMember(BaseDiscordClient discord, Model model, TeamModel team)
{ {
MembershipState = model.MembershipState switch MembershipState = model.MembershipState switch
{ {
@@ -25,6 +33,16 @@ namespace Discord.Rest
Permissions = model.Permissions; Permissions = model.Permissions;
TeamId = model.TeamId; TeamId = model.TeamId;
User = RestUser.Create(discord, model.User); User = RestUser.Create(discord, model.User);
}
if (team.OwnerUserId == model.User.Id)
Role = TeamRole.Owner;
else
Role = model.Role switch
{
"admin" => TeamRole.Admin,
"developer" => TeamRole.Developer,
"read_only" => TeamRole.ReadOnly,
_ => 0
};
} }
} }