diff --git a/src/Discord.Net.Core/Entities/ApplicationFlags.cs b/src/Discord.Net.Core/Entities/ApplicationFlags.cs
new file mode 100644
index 000000000..1ede4257d
--- /dev/null
+++ b/src/Discord.Net.Core/Entities/ApplicationFlags.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Discord
+{
+ ///
+ /// Represents public flags for an application.
+ ///
+ public enum ApplicationFlags
+ {
+ GatewayPresence = 1 << 12,
+ GatewayPresenceLimited = 1 << 13,
+ GatewayGuildMembers = 1 << 14,
+ GatewayGuildMembersLimited = 1 << 15,
+ VerificationPendingGuildLimit = 1 << 16,
+ Embedded = 1 << 17,
+ GatewayMessageContent = 1 << 18,
+ GatewayMessageContentLimited = 1 << 19
+ }
+}
diff --git a/src/Discord.Net.Core/Entities/ApplicationInstallParams.cs b/src/Discord.Net.Core/Entities/ApplicationInstallParams.cs
new file mode 100644
index 000000000..180592f1e
--- /dev/null
+++ b/src/Discord.Net.Core/Entities/ApplicationInstallParams.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Discord
+{
+ ///
+ /// Represents install parameters for an application.
+ ///
+ public class ApplicationInstallParams
+ {
+ ///
+ /// Gets the scopes to install this application.
+ ///
+ public IReadOnlyCollection Scopes { get; }
+
+ ///
+ /// Gets the default permissions to install this application
+ ///
+ public GuildPermission? Permission { get; }
+
+ internal ApplicationInstallParams(string[] scopes, GuildPermission? permission)
+ {
+ Scopes = scopes.ToImmutableArray();
+ Permission = permission;
+ }
+ }
+}
diff --git a/src/Discord.Net.Core/Entities/IApplication.cs b/src/Discord.Net.Core/Entities/IApplication.cs
index 2174baff9..9f9881340 100644
--- a/src/Discord.Net.Core/Entities/IApplication.cs
+++ b/src/Discord.Net.Core/Entities/IApplication.cs
@@ -1,3 +1,5 @@
+using System.Collections.Generic;
+
namespace Discord
{
///
@@ -16,8 +18,16 @@ namespace Discord
///
/// Gets the RPC origins of the application.
///
- string[] RPCOrigins { get; }
- ulong Flags { get; }
+ IReadOnlyCollection RPCOrigins { get; }
+ ApplicationFlags Flags { get; }
+ ///
+ /// Gets a collection of install parameters for this application.
+ ///
+ ApplicationInstallParams InstallParams { get; }
+ ///
+ /// Gets a collection of tags related to the application.
+ ///
+ IReadOnlyCollection Tags { get; }
///
/// Gets the icon URL of the application.
///
diff --git a/src/Discord.Net.Rest/API/Common/Application.cs b/src/Discord.Net.Rest/API/Common/Application.cs
index e828f9910..4ef6940a2 100644
--- a/src/Discord.Net.Rest/API/Common/Application.cs
+++ b/src/Discord.Net.Rest/API/Common/Application.cs
@@ -7,7 +7,7 @@ namespace Discord.API
[JsonProperty("description")]
public string Description { get; set; }
[JsonProperty("rpc_origins")]
- public string[] RPCOrigins { get; set; }
+ public Optional RPCOrigins { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("id")]
@@ -18,12 +18,16 @@ namespace Discord.API
public bool IsBotPublic { get; set; }
[JsonProperty("bot_require_code_grant")]
public bool BotRequiresCodeGrant { get; set; }
+ [JsonProperty("install_params")]
+ public Optional InstallParams { get; set; }
+
[JsonProperty("team")]
public Team Team { get; set; }
[JsonProperty("flags"), Int53]
- public Optional Flags { get; set; }
+ public Optional Flags { get; set; }
[JsonProperty("owner")]
public Optional Owner { get; set; }
+ public Optional Tags { get; set; }
}
}
diff --git a/src/Discord.Net.Rest/API/Common/InstallParams.cs b/src/Discord.Net.Rest/API/Common/InstallParams.cs
new file mode 100644
index 000000000..1fb987f30
--- /dev/null
+++ b/src/Discord.Net.Rest/API/Common/InstallParams.cs
@@ -0,0 +1,17 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Discord.API
+{
+ internal class InstallParams
+ {
+ [JsonProperty("scopes")]
+ public string[] Scopes { get; set; }
+ [JsonProperty("permissions")]
+ public ulong Permission { get; set; }
+ }
+}
diff --git a/src/Discord.Net.Rest/Entities/RestApplication.cs b/src/Discord.Net.Rest/Entities/RestApplication.cs
index 5c2f872cf..beec52433 100644
--- a/src/Discord.Net.Rest/Entities/RestApplication.cs
+++ b/src/Discord.Net.Rest/Entities/RestApplication.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Diagnostics;
using System.Threading.Tasks;
using Model = Discord.API.Application;
@@ -18,9 +20,9 @@ namespace Discord.Rest
///
public string Description { get; private set; }
///
- public string[] RPCOrigins { get; private set; }
+ public IReadOnlyCollection RPCOrigins { get; private set; }
///
- public ulong Flags { get; private set; }
+ public ApplicationFlags Flags { get; private set; }
///
public bool IsBotPublic { get; private set; }
///
@@ -36,6 +38,10 @@ namespace Discord.Rest
///
public string IconUrl => CDN.GetApplicationIconUrl(Id, _iconId);
+ public ApplicationInstallParams InstallParams { get; private set; }
+
+ public IReadOnlyCollection Tags { get; private set; }
+
internal RestApplication(BaseDiscordClient discord, ulong id)
: base(discord, id)
{
@@ -49,14 +55,17 @@ namespace Discord.Rest
internal void Update(Model model)
{
Description = model.Description;
- RPCOrigins = model.RPCOrigins;
+ RPCOrigins = model.RPCOrigins.IsSpecified ? model.RPCOrigins.Value.ToImmutableArray() : ImmutableArray.Empty;
Name = model.Name;
_iconId = model.Icon;
IsBotPublic = model.IsBotPublic;
BotRequiresCodeGrant = model.BotRequiresCodeGrant;
+ Tags = model.Tags.GetValueOrDefault(null)?.ToImmutableArray() ?? ImmutableArray.Empty;
+ var installParams = model.InstallParams.GetValueOrDefault(null);
+ InstallParams = new ApplicationInstallParams(installParams?.Scopes ?? new string[0], (GuildPermission?)installParams?.Permission ?? null);
if (model.Flags.IsSpecified)
- Flags = model.Flags.Value; //TODO: Do we still need this?
+ Flags = model.Flags.Value;
if (model.Owner.IsSpecified)
Owner = RestUser.Create(Discord, model.Owner.Value);
if (model.Team != null)