[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.
/// Gets the membership state of this team member.
/// </summary>
public interface ITeamMember
{
/// <summary>
/// Gets the membership state of this team member.
/// </summary>
MembershipState MembershipState { get; }
/// <summary>
/// Gets the permissions of this team member.
/// </summary>
string[] Permissions { get; }
/// <summary>
/// Gets the team unique identifier for this team member.
/// </summary>
ulong TeamId { get; }
/// <summary>
/// Gets the Discord user of this team member.
/// </summary>
IUser User { get; }
}
MembershipState MembershipState { get; }
/// <summary>
/// Gets the permissions of this team member.
/// </summary>
string[] Permissions { get; }
/// <summary>
/// Gets the team unique identifier for this team member.
/// </summary>
ulong TeamId { get; }
/// <summary>
/// Gets the Discord user of this team member.
/// </summary>
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;
namespace Discord.API
namespace Discord.API;
internal class TeamMember
{
internal class TeamMember
{
[JsonProperty("membership_state")]
public MembershipState MembershipState { get; set; }
[JsonProperty("permissions")]
public string[] Permissions { get; set; }
[JsonProperty("team_id")]
public ulong TeamId { get; set; }
[JsonProperty("user")]
public User User { get; set; }
}
[JsonProperty("membership_state")]
public MembershipState MembershipState { get; set; }
[JsonProperty("permissions")]
public string[] Permissions { get; set; }
[JsonProperty("team_id")]
public ulong TeamId { get; set; }
[JsonProperty("user")]
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;
Name = model.Name;
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,30 +1,48 @@
using System;
using Model = Discord.API.TeamMember;
using TeamModel = Discord.API.Team;
namespace Discord.Rest
namespace Discord.Rest;
public class RestTeamMember : ITeamMember
{
public class RestTeamMember : ITeamMember
{
/// <inheritdoc />
public MembershipState MembershipState { get; }
/// <inheritdoc />
public string[] Permissions { get; }
/// <inheritdoc />
public ulong TeamId { get; }
/// <inheritdoc />
public IUser User { get; }
/// <inheritdoc />
public MembershipState MembershipState { get; }
internal RestTeamMember(BaseDiscordClient discord, Model model)
/// <inheritdoc />
public string[] Permissions { get; }
/// <inheritdoc />
public ulong TeamId { get; }
/// <inheritdoc />
public IUser User { get; }
/// <inheritdoc />
public TeamRole Role { get; }
internal RestTeamMember(BaseDiscordClient discord, Model model, TeamModel team)
{
MembershipState = model.MembershipState switch
{
MembershipState = model.MembershipState switch
API.MembershipState.Invited => MembershipState.Invited,
API.MembershipState.Accepted => MembershipState.Accepted,
_ => throw new InvalidOperationException("Invalid membership state"),
};
Permissions = model.Permissions;
TeamId = model.TeamId;
User = RestUser.Create(discord, model.User);
if (team.OwnerUserId == model.User.Id)
Role = TeamRole.Owner;
else
Role = model.Role switch
{
API.MembershipState.Invited => MembershipState.Invited,
API.MembershipState.Accepted => MembershipState.Accepted,
_ => throw new InvalidOperationException("Invalid membership state"),
"admin" => TeamRole.Admin,
"developer" => TeamRole.Developer,
"read_only" => TeamRole.ReadOnly,
_ => 0
};
Permissions = model.Permissions;
TeamId = model.TeamId;
User = RestUser.Create(discord, model.User);
}
}
}