diff --git a/src/Discord.Net.Core/Entities/ApplicationRoleConnection/RoleConnection.cs b/src/Discord.Net.Core/Entities/ApplicationRoleConnection/RoleConnection.cs new file mode 100644 index 000000000..acef2dad1 --- /dev/null +++ b/src/Discord.Net.Core/Entities/ApplicationRoleConnection/RoleConnection.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; + +namespace Discord; + +public class RoleConnection +{ + /// + /// Gets the vanity name of the platform a bot has connected. + /// + public string PlatformName { get; } + + /// + /// Gets the username on the platform a bot has connected. + /// + public string PlatformUsername { get; } + + /// + /// + /// + public IReadOnlyDictionary Metadata { get; } + + internal RoleConnection(string platformName, string platformUsername, IReadOnlyDictionary metadata) + { + PlatformName = platformName; + PlatformUsername = platformUsername; + Metadata = metadata; + } +} diff --git a/src/Discord.Net.Core/Entities/ApplicationRoleConnection/RoleConnectionMetadata.cs b/src/Discord.Net.Core/Entities/ApplicationRoleConnection/RoleConnectionMetadata.cs index 18a887626..c13264d97 100644 --- a/src/Discord.Net.Core/Entities/ApplicationRoleConnection/RoleConnectionMetadata.cs +++ b/src/Discord.Net.Core/Entities/ApplicationRoleConnection/RoleConnectionMetadata.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Collections.Immutable; namespace Discord; @@ -10,11 +11,11 @@ public class RoleConnectionMetadata public string Name{ get; } - public Optional> NameLocalizations { get; } + public Optional> NameLocalizations { get; } public string Description { get; } - public Optional> DescriptionLocalizations { get; } + public Optional> DescriptionLocalizations { get; } internal RoleConnectionMetadata(RoleConnectionMetadataType type, string key, string name, string description, Dictionary nameLocalizations = null, Dictionary descriptionLocalizations = null) @@ -23,7 +24,7 @@ public class RoleConnectionMetadata Key = key; Name = name; Description = description; - NameLocalizations = nameLocalizations; - DescriptionLocalizations = descriptionLocalizations; + NameLocalizations = nameLocalizations.ToImmutableDictionary(); + DescriptionLocalizations = descriptionLocalizations.ToImmutableDictionary(); } } diff --git a/src/Discord.Net.Rest/API/Common/RoleConnection.cs b/src/Discord.Net.Rest/API/Common/RoleConnection.cs new file mode 100644 index 000000000..f8c26a6b6 --- /dev/null +++ b/src/Discord.Net.Rest/API/Common/RoleConnection.cs @@ -0,0 +1,16 @@ +using Newtonsoft.Json; +using System.Collections.Generic; + +namespace Discord.API; + +public class RoleConnection +{ + [JsonProperty("platform_name")] + public Optional PlatformName { get; set; } + + [JsonProperty("platform_username")] + public Optional PlatformUsername { get; set; } + + [JsonProperty("metadata")] + public Optional> Metadata { get; set; } +} diff --git a/src/Discord.Net.Rest/API/Common/RoleConnectionMetadata.cs b/src/Discord.Net.Rest/API/Common/RoleConnectionMetadata.cs index d4b2fe222..472c14e62 100644 --- a/src/Discord.Net.Rest/API/Common/RoleConnectionMetadata.cs +++ b/src/Discord.Net.Rest/API/Common/RoleConnectionMetadata.cs @@ -18,8 +18,8 @@ public class RoleConnectionMetadata public string Description { get; set; } [JsonProperty("name_localizations")] - public Optional>> NameLocalizations { get; set; } + public Optional>> NameLocalizations { get; set; } [JsonProperty("description_localizations")] - public Optional>> DescriptionLocalizations { get; set; } + public Optional>> DescriptionLocalizations { get; set; } } diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs index 3bee9a4cd..12656be88 100644 --- a/src/Discord.Net.Rest/DiscordRestApiClient.cs +++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs @@ -2490,6 +2490,16 @@ namespace Discord.API return await SendJsonAsync>("PUT", $"/applications/{CurrentApplicationId}/role-connections/metadata", roleConnections, options: options).ConfigureAwait(false); } + public async Task GetUserApplicationRoleConnection(RequestOptions options = null) + { + return await SendAsync("GET", $"/users/@me/applications/{CurrentApplicationId}/role-connection", options: options); + } + + public async Task GetUserApplicationRoleConnection(RoleConnection connection, RequestOptions options = null) + { + return await SendJsonAsync("PUT", $"/users/@me/applications/{CurrentApplicationId}/role-connection", connection, options: options); + } + #endregion } }