From f9086d3a2c940602898c1a427bc30e27dd944936 Mon Sep 17 00:00:00 2001 From: Mihail Gribkov <61027276+Misha-133@users.noreply.github.com> Date: Sun, 28 Apr 2024 17:42:38 +0300 Subject: [PATCH] more cringe (#2919) --- .../AppSubscriptions/EntitlementType.cs | 38 +++++++++++++++++++ .../Entities/AppSubscriptions/SKUFlags.cs | 9 +++++ .../Entities/AppSubscriptions/SKUType.cs | 12 +++++- src/Discord.Net.Core/IDiscordClient.cs | 7 ++++ .../API/Common/Entitlement.cs | 2 +- src/Discord.Net.Rest/BaseDiscordClient.cs | 5 +++ src/Discord.Net.Rest/ClientHelper.cs | 3 ++ src/Discord.Net.Rest/DiscordRestApiClient.cs | 3 ++ src/Discord.Net.Rest/DiscordRestClient.cs | 4 ++ .../AppSubscriptions/RestEntitlement.cs | 2 +- .../DiscordSocketClient.cs | 4 ++ .../AppSubscriptions/SocketEntitlement.cs | 2 +- 12 files changed, 87 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Core/Entities/AppSubscriptions/EntitlementType.cs b/src/Discord.Net.Core/Entities/AppSubscriptions/EntitlementType.cs index 6dac3676..e6a23866 100644 --- a/src/Discord.Net.Core/Entities/AppSubscriptions/EntitlementType.cs +++ b/src/Discord.Net.Core/Entities/AppSubscriptions/EntitlementType.cs @@ -1,7 +1,45 @@ namespace Discord; +/// +/// Represents the type of entitlement. +/// public enum EntitlementType { + /// + /// The entitlement was purchased by user. + /// + Purchase = 1, + + /// + /// Entitlement for Discord Nitro subscription. + /// + PremiumSubscription = 2, + + /// + /// Entitlement was gifted by developer. + /// + DeveloperGift = 3, + + /// + /// Entitlement was purchased by a dev in application test mode. + /// + TestModePurchase = 4, + + /// + /// Entitlement was granted when the SKU was free. + /// + FreePurchase = 5, + + /// + /// Entitlement was gifted by another user. + /// + UserGift = 6, + + /// + /// Entitlement was claimed by user for free as a Nitro Subscriber. + /// + PremiumPurchase = 7, + /// /// The entitlement was purchased as an app subscription. /// diff --git a/src/Discord.Net.Core/Entities/AppSubscriptions/SKUFlags.cs b/src/Discord.Net.Core/Entities/AppSubscriptions/SKUFlags.cs index d748bf7b..09e5a90a 100644 --- a/src/Discord.Net.Core/Entities/AppSubscriptions/SKUFlags.cs +++ b/src/Discord.Net.Core/Entities/AppSubscriptions/SKUFlags.cs @@ -2,10 +2,19 @@ using System; namespace Discord; +/// +/// SKU flags for subscriptions. +/// [Flags] public enum SKUFlags { + /// + /// The SKU is a guild subscription. + /// GuildSubscription = 1 << 7, + /// + /// The SKU is a user subscription. + /// UserSubscription = 1 << 8 } diff --git a/src/Discord.Net.Core/Entities/AppSubscriptions/SKUType.cs b/src/Discord.Net.Core/Entities/AppSubscriptions/SKUType.cs index a15b6c59..8adcf66c 100644 --- a/src/Discord.Net.Core/Entities/AppSubscriptions/SKUType.cs +++ b/src/Discord.Net.Core/Entities/AppSubscriptions/SKUType.cs @@ -2,13 +2,23 @@ namespace Discord; public enum SKUType { + /// + /// Durable one-time purchase. + /// + Durable = 2, + + /// + /// Consumable one-time purchase. + /// + Consumable = 3, + /// /// Represents a recurring subscription. /// Subscription = 5, /// - /// System-generated group for each SKU created. + /// System-generated group for each SKU created. /// SubscriptionGroup = 6, } diff --git a/src/Discord.Net.Core/IDiscordClient.cs b/src/Discord.Net.Core/IDiscordClient.cs index a87a25c7..90562840 100644 --- a/src/Discord.Net.Core/IDiscordClient.cs +++ b/src/Discord.Net.Core/IDiscordClient.cs @@ -349,5 +349,12 @@ namespace Discord /// Returns all SKUs for a given application. /// Task> GetSKUsAsync(RequestOptions options = null); + + /// + /// Marks a given one-time purchase entitlement for the user as consumed. + /// + /// The id of the entitlement. + /// The options to be used when sending the request. + Task ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options = null); } } diff --git a/src/Discord.Net.Rest/API/Common/Entitlement.cs b/src/Discord.Net.Rest/API/Common/Entitlement.cs index f12945e4..01acabd6 100644 --- a/src/Discord.Net.Rest/API/Common/Entitlement.cs +++ b/src/Discord.Net.Rest/API/Common/Entitlement.cs @@ -24,7 +24,7 @@ internal class Entitlement public EntitlementType Type { get; set; } [JsonProperty("consumed")] - public bool IsConsumed { get; set; } + public Optional IsConsumed { get; set; } [JsonProperty("starts_at")] public Optional StartsAt { get; set; } diff --git a/src/Discord.Net.Rest/BaseDiscordClient.cs b/src/Discord.Net.Rest/BaseDiscordClient.cs index d3853953..d369050e 100644 --- a/src/Discord.Net.Rest/BaseDiscordClient.cs +++ b/src/Discord.Net.Rest/BaseDiscordClient.cs @@ -292,6 +292,11 @@ namespace Discord.Rest /// Task> IDiscordClient.GetSKUsAsync(RequestOptions options) => Task.FromResult>(Array.Empty()); + /// + /// Marks a given one-time purchase entitlement for the user as consumed. + /// + Task IDiscordClient.ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options) => Task.CompletedTask; + #endregion } } diff --git a/src/Discord.Net.Rest/ClientHelper.cs b/src/Discord.Net.Rest/ClientHelper.cs index 3d7d3c97..b660697a 100644 --- a/src/Discord.Net.Rest/ClientHelper.cs +++ b/src/Discord.Net.Rest/ClientHelper.cs @@ -446,6 +446,9 @@ namespace Discord.Rest return models.Select(x => new SKU(x.Id, x.Type, x.ApplicationId, x.Name, x.Slug)).ToImmutableArray(); } + public static Task ConsumeEntitlementAsync(BaseDiscordClient client, ulong entitlementId, RequestOptions options = null) + => client.ApiClient.ConsumeEntitlementAsync(entitlementId, options); + #endregion } } diff --git a/src/Discord.Net.Rest/DiscordRestApiClient.cs b/src/Discord.Net.Rest/DiscordRestApiClient.cs index 5c1b6c62..b10efa92 100644 --- a/src/Discord.Net.Rest/DiscordRestApiClient.cs +++ b/src/Discord.Net.Rest/DiscordRestApiClient.cs @@ -2828,6 +2828,9 @@ namespace Discord.API public Task ListSKUsAsync(RequestOptions options = null) => SendAsync("GET", () => $"applications/{CurrentApplicationId}/skus", new BucketIds(), options: options); + public Task ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options = null) + => SendAsync("POST", () => $"applications/{CurrentApplicationId}/entitlements/{entitlementId}/consume", new BucketIds(), options: options); + #endregion } } diff --git a/src/Discord.Net.Rest/DiscordRestClient.cs b/src/Discord.Net.Rest/DiscordRestClient.cs index 4c8615db..0d5ae058 100644 --- a/src/Discord.Net.Rest/DiscordRestClient.cs +++ b/src/Discord.Net.Rest/DiscordRestClient.cs @@ -296,6 +296,10 @@ namespace Discord.Rest public Task> GetSKUsAsync(RequestOptions options = null) => ClientHelper.ListSKUsAsync(this, options); + /// + public Task ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options = null) + => ClientHelper.ConsumeEntitlementAsync(this, entitlementId, options); + #endregion #region IDiscordClient diff --git a/src/Discord.Net.Rest/Entities/AppSubscriptions/RestEntitlement.cs b/src/Discord.Net.Rest/Entities/AppSubscriptions/RestEntitlement.cs index e1d2b61e..5c7f70d8 100644 --- a/src/Discord.Net.Rest/Entities/AppSubscriptions/RestEntitlement.cs +++ b/src/Discord.Net.Rest/Entities/AppSubscriptions/RestEntitlement.cs @@ -55,7 +55,7 @@ public class RestEntitlement : RestEntity, IEntitlement : null; ApplicationId = model.ApplicationId; Type = model.Type; - IsConsumed = model.IsConsumed; + IsConsumed = model.IsConsumed.GetValueOrDefault(false); StartsAt = model.StartsAt.IsSpecified ? model.StartsAt.Value : null; diff --git a/src/Discord.Net.WebSocket/DiscordSocketClient.cs b/src/Discord.Net.WebSocket/DiscordSocketClient.cs index 2001ae01..0bb23a6d 100644 --- a/src/Discord.Net.WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net.WebSocket/DiscordSocketClient.cs @@ -447,6 +447,10 @@ namespace Discord.WebSocket public Task> GetSKUsAsync(RequestOptions options = null) => ClientHelper.ListSKUsAsync(this, options); + /// + public Task ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options = null) + => ClientHelper.ConsumeEntitlementAsync(this, entitlementId, options); + /// /// Gets entitlements from cache. /// diff --git a/src/Discord.Net.WebSocket/Entities/AppSubscriptions/SocketEntitlement.cs b/src/Discord.Net.WebSocket/Entities/AppSubscriptions/SocketEntitlement.cs index 0bfafe87..a4b71d92 100644 --- a/src/Discord.Net.WebSocket/Entities/AppSubscriptions/SocketEntitlement.cs +++ b/src/Discord.Net.WebSocket/Entities/AppSubscriptions/SocketEntitlement.cs @@ -67,7 +67,7 @@ public class SocketEntitlement : SocketEntity, IEntitlement ApplicationId = model.ApplicationId; Type = model.Type; - IsConsumed = model.IsConsumed; + IsConsumed = model.IsConsumed.GetValueOrDefault(false); StartsAt = model.StartsAt.IsSpecified ? model.StartsAt.Value : null;