From 6e531a2344c654b3438ce78a1a5374264897eb75 Mon Sep 17 00:00:00 2001 From: Mihail Gribkov <61027276+Misha-133@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:49:00 +0300 Subject: [PATCH] [Feature] Add team member Role property (#2965) --- .../Entities/Teams/ITeamMember.cs | 49 +++++++++------- .../Entities/Teams/TeamRole.cs | 27 +++++++++ src/Discord.Net.Rest/API/Common/TeamMember.cs | 29 ++++++---- .../Entities/Teams/RestTeam.cs | 2 +- .../Entities/Teams/RestTeamMember.cs | 58 ++++++++++++------- 5 files changed, 111 insertions(+), 54 deletions(-) create mode 100644 src/Discord.Net.Core/Entities/Teams/TeamRole.cs diff --git a/src/Discord.Net.Core/Entities/Teams/ITeamMember.cs b/src/Discord.Net.Core/Entities/Teams/ITeamMember.cs index fe0e499e57..a2d71bcced 100644 --- a/src/Discord.Net.Core/Entities/Teams/ITeamMember.cs +++ b/src/Discord.Net.Core/Entities/Teams/ITeamMember.cs @@ -1,25 +1,32 @@ -namespace Discord +namespace Discord; + +/// +/// Represents a Discord Team member. +/// +public interface ITeamMember { /// - /// Represents a Discord Team member. + /// Gets the membership state of this team member. /// - public interface ITeamMember - { - /// - /// Gets the membership state of this team member. - /// - MembershipState MembershipState { get; } - /// - /// Gets the permissions of this team member. - /// - string[] Permissions { get; } - /// - /// Gets the team unique identifier for this team member. - /// - ulong TeamId { get; } - /// - /// Gets the Discord user of this team member. - /// - IUser User { get; } - } + MembershipState MembershipState { get; } + + /// + /// Gets the permissions of this team member. + /// + string[] Permissions { get; } + + /// + /// Gets the team unique identifier for this team member. + /// + ulong TeamId { get; } + + /// + /// Gets the Discord user of this team member. + /// + IUser User { get; } + + /// + /// Gets the role of this team member. + /// + public TeamRole Role { get; } } diff --git a/src/Discord.Net.Core/Entities/Teams/TeamRole.cs b/src/Discord.Net.Core/Entities/Teams/TeamRole.cs new file mode 100644 index 0000000000..25ac7cf3ea --- /dev/null +++ b/src/Discord.Net.Core/Entities/Teams/TeamRole.cs @@ -0,0 +1,27 @@ +namespace Discord; + +/// +/// Represents a Discord Team member role. +/// +public enum TeamRole +{ + /// + /// The user is the owner of the team. + /// + Owner, + + /// + /// The user is an admin in the team. + /// + Admin, + + /// + /// The user is a developer in the team. + /// + Developer, + + /// + /// The user is a read-only member of the team. + /// + ReadOnly, +} diff --git a/src/Discord.Net.Rest/API/Common/TeamMember.cs b/src/Discord.Net.Rest/API/Common/TeamMember.cs index f3cba608e1..ca1ed1a9bf 100644 --- a/src/Discord.Net.Rest/API/Common/TeamMember.cs +++ b/src/Discord.Net.Rest/API/Common/TeamMember.cs @@ -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; } } diff --git a/src/Discord.Net.Rest/Entities/Teams/RestTeam.cs b/src/Discord.Net.Rest/Entities/Teams/RestTeam.cs index 43c9417cc0..1f8987c27a 100644 --- a/src/Discord.Net.Rest/Entities/Teams/RestTeam.cs +++ b/src/Discord.Net.Rest/Entities/Teams/RestTeam.cs @@ -34,7 +34,7 @@ internal virtual void Update(Model model) _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(); } } } diff --git a/src/Discord.Net.Rest/Entities/Teams/RestTeamMember.cs b/src/Discord.Net.Rest/Entities/Teams/RestTeamMember.cs index 322bb6a3f5..2fccc48d54 100644 --- a/src/Discord.Net.Rest/Entities/Teams/RestTeamMember.cs +++ b/src/Discord.Net.Rest/Entities/Teams/RestTeamMember.cs @@ -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 + /// + public MembershipState MembershipState { get; } + + /// + public string[] Permissions { get; } + + /// + public ulong TeamId { get; } + + /// + public IUser User { get; } + + /// + public TeamRole Role { get; } + + internal RestTeamMember(BaseDiscordClient discord, Model model, TeamModel team) { - /// - public MembershipState MembershipState { get; } - /// - public string[] Permissions { get; } - /// - public ulong TeamId { get; } - /// - public IUser User { get; } - - internal RestTeamMember(BaseDiscordClient discord, Model model) + 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); - } } }