mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-13 18:13:29 +01:00
feat(EntitlementManager): Support get entitlement (#10606)
* feat: support get entitlement * docs: add return type Co-authored-by: Danial Raza <danialrazafb@gmail.com> * fix: property typo Co-authored-by: Almeida <github@almeidx.dev> * fix: property typo Co-authored-by: Almeida <github@almeidx.dev> --------- Co-authored-by: Danial Raza <danialrazafb@gmail.com> Co-authored-by: Almeida <github@almeidx.dev> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
@@ -37,6 +37,12 @@ class EntitlementManager extends CachedManager {
|
|||||||
* @typedef {SKU|Snowflake} SKUResolvable
|
* @typedef {SKU|Snowflake} SKUResolvable
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options used to fetch an entitlement
|
||||||
|
* @typedef {BaseFetchOptions} FetchEntitlementOptions
|
||||||
|
* @property {EntitlementResolvable} entitlement The entitlement to fetch
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Options used to fetch entitlements
|
* Options used to fetch entitlements
|
||||||
* @typedef {Object} FetchEntitlementsOptions
|
* @typedef {Object} FetchEntitlementsOptions
|
||||||
@@ -45,6 +51,7 @@ class EntitlementManager extends CachedManager {
|
|||||||
* @property {UserResolvable} [user] The user to fetch entitlements for
|
* @property {UserResolvable} [user] The user to fetch entitlements for
|
||||||
* @property {SKUResolvable[]} [skus] The SKUs to fetch entitlements for
|
* @property {SKUResolvable[]} [skus] The SKUs to fetch entitlements for
|
||||||
* @property {boolean} [excludeEnded] Whether to exclude ended entitlements
|
* @property {boolean} [excludeEnded] Whether to exclude ended entitlements
|
||||||
|
* @property {boolean} [excludeDeleted] Whether to exclude deleted entitlements
|
||||||
* @property {boolean} [cache=true] Whether to cache the fetched entitlements
|
* @property {boolean} [cache=true] Whether to cache the fetched entitlements
|
||||||
* @property {Snowflake} [before] Consider only entitlements before this entitlement id
|
* @property {Snowflake} [before] Consider only entitlements before this entitlement id
|
||||||
* @property {Snowflake} [after] Consider only entitlements after this entitlement id
|
* @property {Snowflake} [after] Consider only entitlements after this entitlement id
|
||||||
@@ -53,21 +60,49 @@ class EntitlementManager extends CachedManager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches entitlements for this application
|
* Fetches entitlements for this application
|
||||||
* @param {FetchEntitlementsOptions} [options={}] Options for fetching the entitlements
|
* @param {EntitlementResolvable|FetchEntitlementOptions|FetchEntitlementsOptions} [options]
|
||||||
* @returns {Promise<Collection<Snowflake, Entitlement>>}
|
* Options for fetching the entitlements
|
||||||
|
* @returns {Promise<Entitlement|Collection<Snowflake, Entitlement>>}
|
||||||
*/
|
*/
|
||||||
async fetch({ limit, guild, user, skus, excludeEnded, cache = true, before, after } = {}) {
|
async fetch(options) {
|
||||||
|
if (!options) return this._fetchMany(options);
|
||||||
|
const { entitlement, cache, force } = options;
|
||||||
|
const resolvedEntitlement = this.resolveId(entitlement ?? options);
|
||||||
|
|
||||||
|
if (resolvedEntitlement) {
|
||||||
|
return this._fetchSingle({ entitlement: resolvedEntitlement, cache, force });
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._fetchMany(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
async _fetchSingle({ entitlement, cache, force = false }) {
|
||||||
|
if (!force) {
|
||||||
|
const existing = this.cache.get(entitlement);
|
||||||
|
|
||||||
|
if (existing) {
|
||||||
|
return existing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await this.client.rest.get(Routes.entitlement(this.client.application.id, entitlement));
|
||||||
|
return this._add(data, cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
async _fetchMany({ limit, guild, user, skus, excludeEnded, excludeDeleted, cache, before, after } = {}) {
|
||||||
const query = makeURLSearchParams({
|
const query = makeURLSearchParams({
|
||||||
limit,
|
limit,
|
||||||
guild_id: guild && this.client.guilds.resolveId(guild),
|
guild_id: guild && this.client.guilds.resolveId(guild),
|
||||||
user_id: user && this.client.users.resolveId(user),
|
user_id: user && this.client.users.resolveId(user),
|
||||||
sku_ids: skus?.map(sku => resolveSKUId(sku)).join(','),
|
sku_ids: skus?.map(sku => resolveSKUId(sku)).join(','),
|
||||||
exclude_ended: excludeEnded,
|
exclude_ended: excludeEnded,
|
||||||
|
exclude_deleted: excludeDeleted,
|
||||||
before,
|
before,
|
||||||
after,
|
after,
|
||||||
});
|
});
|
||||||
|
|
||||||
const entitlements = await this.client.rest.get(Routes.entitlements(this.client.application.id), { query });
|
const entitlements = await this.client.rest.get(Routes.entitlements(this.client.application.id), { query });
|
||||||
|
|
||||||
return entitlements.reduce(
|
return entitlements.reduce(
|
||||||
(coll, entitlement) => coll.set(entitlement.id, this._add(entitlement, cache)),
|
(coll, entitlement) => coll.set(entitlement.id, this._add(entitlement, cache)),
|
||||||
new Collection(),
|
new Collection(),
|
||||||
|
|||||||
6
packages/discord.js/typings/index.d.ts
vendored
6
packages/discord.js/typings/index.d.ts
vendored
@@ -4336,12 +4336,17 @@ export interface UserEntitlementCreateOptions {
|
|||||||
user: UserResolvable;
|
user: UserResolvable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface FetchEntitlementOptions extends BaseFetchOptions {
|
||||||
|
entitlement: EntitlementResolvable;
|
||||||
|
}
|
||||||
|
|
||||||
export interface FetchEntitlementsOptions {
|
export interface FetchEntitlementsOptions {
|
||||||
limit?: number;
|
limit?: number;
|
||||||
guild?: GuildResolvable;
|
guild?: GuildResolvable;
|
||||||
user?: UserResolvable;
|
user?: UserResolvable;
|
||||||
skus?: readonly SKUResolvable[];
|
skus?: readonly SKUResolvable[];
|
||||||
excludeEnded?: boolean;
|
excludeEnded?: boolean;
|
||||||
|
excludeDeleted?: boolean;
|
||||||
cache?: boolean;
|
cache?: boolean;
|
||||||
before?: Snowflake;
|
before?: Snowflake;
|
||||||
after?: Snowflake;
|
after?: Snowflake;
|
||||||
@@ -4349,6 +4354,7 @@ export interface FetchEntitlementsOptions {
|
|||||||
|
|
||||||
export class EntitlementManager extends CachedManager<Snowflake, Entitlement, EntitlementResolvable> {
|
export class EntitlementManager extends CachedManager<Snowflake, Entitlement, EntitlementResolvable> {
|
||||||
private constructor(client: Client<true>, iterable: Iterable<APIEntitlement>);
|
private constructor(client: Client<true>, iterable: Iterable<APIEntitlement>);
|
||||||
|
public fetch(options: EntitlementResolvable | FetchEntitlementOptions): Promise<Entitlement>;
|
||||||
public fetch(options?: FetchEntitlementsOptions): Promise<Collection<Snowflake, Entitlement>>;
|
public fetch(options?: FetchEntitlementsOptions): Promise<Collection<Snowflake, Entitlement>>;
|
||||||
public createTest(options: GuildEntitlementCreateOptions | UserEntitlementCreateOptions): Promise<Entitlement>;
|
public createTest(options: GuildEntitlementCreateOptions | UserEntitlementCreateOptions): Promise<Entitlement>;
|
||||||
public deleteTest(entitlement: EntitlementResolvable): Promise<void>;
|
public deleteTest(entitlement: EntitlementResolvable): Promise<void>;
|
||||||
|
|||||||
Reference in New Issue
Block a user