more cringe (#2919)

This commit is contained in:
Mihail Gribkov
2024-04-28 17:42:38 +03:00
committed by GitHub
parent f85bf9ac48
commit f9086d3a2c
12 changed files with 87 additions and 4 deletions

View File

@@ -1,7 +1,45 @@
namespace Discord;
/// <summary>
/// Represents the type of entitlement.
/// </summary>
public enum EntitlementType
{
/// <summary>
/// The entitlement was purchased by user.
/// </summary>
Purchase = 1,
/// <summary>
/// Entitlement for Discord Nitro subscription.
/// </summary>
PremiumSubscription = 2,
/// <summary>
/// Entitlement was gifted by developer.
/// </summary>
DeveloperGift = 3,
/// <summary>
/// Entitlement was purchased by a dev in application test mode.
/// </summary>
TestModePurchase = 4,
/// <summary>
/// Entitlement was granted when the SKU was free.
/// </summary>
FreePurchase = 5,
/// <summary>
/// Entitlement was gifted by another user.
/// </summary>
UserGift = 6,
/// <summary>
/// Entitlement was claimed by user for free as a Nitro Subscriber.
/// </summary>
PremiumPurchase = 7,
/// <summary>
/// The entitlement was purchased as an app subscription.
/// </summary>

View File

@@ -2,10 +2,19 @@ using System;
namespace Discord;
/// <summary>
/// SKU flags for subscriptions.
/// </summary>
[Flags]
public enum SKUFlags
{
/// <summary>
/// The SKU is a guild subscription.
/// </summary>
GuildSubscription = 1 << 7,
/// <summary>
/// The SKU is a user subscription.
/// </summary>
UserSubscription = 1 << 8
}

View File

@@ -2,13 +2,23 @@ namespace Discord;
public enum SKUType
{
/// <summary>
/// Durable one-time purchase.
/// </summary>
Durable = 2,
/// <summary>
/// Consumable one-time purchase.
/// </summary>
Consumable = 3,
/// <summary>
/// Represents a recurring subscription.
/// </summary>
Subscription = 5,
/// <summary>
/// System-generated group for each <see cref="SKUType.Subscription"/> SKU created.
/// System-generated group for each <see cref="Subscription"/> SKU created.
/// </summary>
SubscriptionGroup = 6,
}

View File

@@ -349,5 +349,12 @@ namespace Discord
/// Returns all SKUs for a given application.
/// </summary>
Task<IReadOnlyCollection<SKU>> GetSKUsAsync(RequestOptions options = null);
/// <summary>
/// Marks a given one-time purchase entitlement for the user as consumed.
/// </summary>
/// <param name="entitlementId">The id of the entitlement.</param>
/// <param name="options">The options to be used when sending the request.</param>
Task ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options = null);
}
}

View File

@@ -24,7 +24,7 @@ internal class Entitlement
public EntitlementType Type { get; set; }
[JsonProperty("consumed")]
public bool IsConsumed { get; set; }
public Optional<bool> IsConsumed { get; set; }
[JsonProperty("starts_at")]
public Optional<DateTimeOffset> StartsAt { get; set; }

View File

@@ -292,6 +292,11 @@ namespace Discord.Rest
/// </summary>
Task<IReadOnlyCollection<SKU>> IDiscordClient.GetSKUsAsync(RequestOptions options) => Task.FromResult<IReadOnlyCollection<SKU>>(Array.Empty<SKU>());
/// <summary>
/// Marks a given one-time purchase entitlement for the user as consumed.
/// </summary>
Task IDiscordClient.ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options) => Task.CompletedTask;
#endregion
}
}

View File

@@ -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
}
}

View File

@@ -2828,6 +2828,9 @@ namespace Discord.API
public Task<SKU[]> ListSKUsAsync(RequestOptions options = null)
=> SendAsync<SKU[]>("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
}
}

View File

@@ -296,6 +296,10 @@ namespace Discord.Rest
public Task<IReadOnlyCollection<SKU>> GetSKUsAsync(RequestOptions options = null)
=> ClientHelper.ListSKUsAsync(this, options);
/// <inheritdoc />
public Task ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options = null)
=> ClientHelper.ConsumeEntitlementAsync(this, entitlementId, options);
#endregion
#region IDiscordClient

View File

@@ -55,7 +55,7 @@ public class RestEntitlement : RestEntity<ulong>, IEntitlement
: null;
ApplicationId = model.ApplicationId;
Type = model.Type;
IsConsumed = model.IsConsumed;
IsConsumed = model.IsConsumed.GetValueOrDefault(false);
StartsAt = model.StartsAt.IsSpecified
? model.StartsAt.Value
: null;

View File

@@ -447,6 +447,10 @@ namespace Discord.WebSocket
public Task<IReadOnlyCollection<SKU>> GetSKUsAsync(RequestOptions options = null)
=> ClientHelper.ListSKUsAsync(this, options);
/// <inheritdoc />
public Task ConsumeEntitlementAsync(ulong entitlementId, RequestOptions options = null)
=> ClientHelper.ConsumeEntitlementAsync(this, entitlementId, options);
/// <summary>
/// Gets entitlements from cache.
/// </summary>

View File

@@ -67,7 +67,7 @@ public class SocketEntitlement : SocketEntity<ulong>, IEntitlement
ApplicationId = model.ApplicationId;
Type = model.Type;
IsConsumed = model.IsConsumed;
IsConsumed = model.IsConsumed.GetValueOrDefault(false);
StartsAt = model.StartsAt.IsSpecified
? model.StartsAt.Value
: null;