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);
- }
}
}