Skip to content

Commit a367e2c

Browse files
Jiralitesdanialrazaalmeidxkodiakhq[bot]
committed
feat(EntitlementManager): Support get entitlement (#10606)
* feat: support get entitlement * docs: add return type Co-authored-by: Danial Raza <[email protected]> * fix: property typo Co-authored-by: Almeida <[email protected]> * fix: property typo Co-authored-by: Almeida <[email protected]> --------- Co-authored-by: Danial Raza <[email protected]> Co-authored-by: Almeida <[email protected]> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
1 parent 7678f11 commit a367e2c

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

packages/discord.js/src/managers/EntitlementManager.js

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ class EntitlementManager extends CachedManager {
3737
* @typedef {SKU|Snowflake} SKUResolvable
3838
*/
3939

40+
/**
41+
* Options used to fetch an entitlement
42+
* @typedef {BaseFetchOptions} FetchEntitlementOptions
43+
* @property {EntitlementResolvable} entitlement The entitlement to fetch
44+
*/
45+
4046
/**
4147
* Options used to fetch entitlements
4248
* @typedef {Object} FetchEntitlementsOptions
@@ -45,6 +51,7 @@ class EntitlementManager extends CachedManager {
4551
* @property {UserResolvable} [user] The user to fetch entitlements for
4652
* @property {SKUResolvable[]} [skus] The SKUs to fetch entitlements for
4753
* @property {boolean} [excludeEnded] Whether to exclude ended entitlements
54+
* @property {boolean} [excludeDeleted] Whether to exclude deleted entitlements
4855
* @property {boolean} [cache=true] Whether to cache the fetched entitlements
4956
* @property {Snowflake} [before] Consider only entitlements before this entitlement id
5057
* @property {Snowflake} [after] Consider only entitlements after this entitlement id
@@ -53,21 +60,49 @@ class EntitlementManager extends CachedManager {
5360

5461
/**
5562
* Fetches entitlements for this application
56-
* @param {FetchEntitlementsOptions} [options={}] Options for fetching the entitlements
57-
* @returns {Promise<Collection<Snowflake, Entitlement>>}
63+
* @param {EntitlementResolvable|FetchEntitlementOptions|FetchEntitlementsOptions} [options]
64+
* Options for fetching the entitlements
65+
* @returns {Promise<Entitlement|Collection<Snowflake, Entitlement>>}
5866
*/
59-
async fetch({ limit, guild, user, skus, excludeEnded, cache = true, before, after } = {}) {
67+
async fetch(options) {
68+
if (!options) return this._fetchMany(options);
69+
const { entitlement, cache, force } = options;
70+
const resolvedEntitlement = this.resolveId(entitlement ?? options);
71+
72+
if (resolvedEntitlement) {
73+
return this._fetchSingle({ entitlement: resolvedEntitlement, cache, force });
74+
}
75+
76+
return this._fetchMany(options);
77+
}
78+
79+
async _fetchSingle({ entitlement, cache, force = false }) {
80+
if (!force) {
81+
const existing = this.cache.get(entitlement);
82+
83+
if (existing) {
84+
return existing;
85+
}
86+
}
87+
88+
const data = await this.client.rest.get(Routes.entitlement(this.client.application.id, entitlement));
89+
return this._add(data, cache);
90+
}
91+
92+
async _fetchMany({ limit, guild, user, skus, excludeEnded, excludeDeleted, cache, before, after } = {}) {
6093
const query = makeURLSearchParams({
6194
limit,
6295
guild_id: guild && this.client.guilds.resolveId(guild),
6396
user_id: user && this.client.users.resolveId(user),
6497
sku_ids: skus?.map(sku => resolveSKUId(sku)).join(','),
6598
exclude_ended: excludeEnded,
99+
exclude_deleted: excludeDeleted,
66100
before,
67101
after,
68102
});
69103

70104
const entitlements = await this.client.rest.get(Routes.entitlements(this.client.application.id), { query });
105+
71106
return entitlements.reduce(
72107
(coll, entitlement) => coll.set(entitlement.id, this._add(entitlement, cache)),
73108
new Collection(),

packages/discord.js/typings/index.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4336,19 +4336,25 @@ export interface UserEntitlementCreateOptions {
43364336
user: UserResolvable;
43374337
}
43384338

4339+
export interface FetchEntitlementOptions extends BaseFetchOptions {
4340+
entitlement: EntitlementResolvable;
4341+
}
4342+
43394343
export interface FetchEntitlementsOptions {
43404344
limit?: number;
43414345
guild?: GuildResolvable;
43424346
user?: UserResolvable;
43434347
skus?: readonly SKUResolvable[];
43444348
excludeEnded?: boolean;
4349+
excludeDeleted?: boolean;
43454350
cache?: boolean;
43464351
before?: Snowflake;
43474352
after?: Snowflake;
43484353
}
43494354

43504355
export class EntitlementManager extends CachedManager<Snowflake, Entitlement, EntitlementResolvable> {
43514356
private constructor(client: Client<true>, iterable: Iterable<APIEntitlement>);
4357+
public fetch(options: EntitlementResolvable | FetchEntitlementOptions): Promise<Entitlement>;
43524358
public fetch(options?: FetchEntitlementsOptions): Promise<Collection<Snowflake, Entitlement>>;
43534359
public createTest(options: GuildEntitlementCreateOptions | UserEntitlementCreateOptions): Promise<Entitlement>;
43544360
public deleteTest(entitlement: EntitlementResolvable): Promise<void>;

0 commit comments

Comments
 (0)