Skip to content

Commit

Permalink
refactor: Stickers are free (no more "premium" packs) (#9791)
Browse files Browse the repository at this point in the history
refactor: stickers are free

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
  • Loading branch information
Jiralite and kodiakhq[bot] committed Sep 18, 2023
1 parent 32d614c commit e02a59b
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 13 deletions.
21 changes: 16 additions & 5 deletions packages/core/src/api/sticker.ts
Expand Up @@ -4,21 +4,32 @@ import type { RequestData, REST } from '@discordjs/rest';
import {
Routes,
type RESTGetAPIStickerResult,
type RESTGetNitroStickerPacksResult,
type RESTGetStickerPacksResult,
type Snowflake,
} from 'discord-api-types/v10';

export class StickersAPI {
public constructor(private readonly rest: REST) {}

/**
* Fetches all of the nitro sticker packs
* Fetches all of the sticker packs
*
* @see {@link https://discord.com/developers/docs/resources/sticker#list-nitro-sticker-packs}
* @see {@link https://discord.com/developers/docs/resources/sticker#list-sticker-packs}
* @param options - The options for fetching the sticker packs
*/
public async getNitroStickers({ signal }: Pick<RequestData, 'signal'> = {}) {
return this.rest.get(Routes.nitroStickerPacks(), { signal }) as Promise<RESTGetNitroStickerPacksResult>;
public async getStickers({ signal }: Pick<RequestData, 'signal'> = {}) {
return this.rest.get(Routes.stickerPacks(), { signal }) as Promise<RESTGetStickerPacksResult>;
}

/**
* Fetches all of the sticker packs
*
* @see {@link https://discord.com/developers/docs/resources/sticker#list-sticker-packs}
* @param options - The options for fetching the sticker packs
* @deprecated Use {@link getStickers} instead.
*/
public async getNitroStickers(options: Pick<RequestData, 'signal'> = {}) {
return this.getStickers(options);
}

/**
Expand Down
28 changes: 24 additions & 4 deletions packages/discord.js/src/client/Client.js
Expand Up @@ -31,6 +31,8 @@ const PermissionsBitField = require('../util/PermissionsBitField');
const Status = require('../util/Status');
const Sweepers = require('../util/Sweepers');

let deprecationEmittedForPremiumStickerPacks = false;

/**
* The main hub for interacting with the Discord API, and the starting point for any bot.
* @extends {BaseClient}
Expand Down Expand Up @@ -358,18 +360,36 @@ class Client extends BaseClient {
}

/**
* Obtains the list of sticker packs available to Nitro subscribers from Discord.
* Obtains the list of available sticker packs.
* @returns {Promise<Collection<Snowflake, StickerPack>>}
* @example
* client.fetchPremiumStickerPacks()
* client.fetchStickerPacks()
* .then(packs => console.log(`Available sticker packs are: ${packs.map(pack => pack.name).join(', ')}`))
* .catch(console.error);
*/
async fetchPremiumStickerPacks() {
const data = await this.rest.get(Routes.nitroStickerPacks());
async fetchStickerPacks() {
const data = await this.rest.get(Routes.stickerPacks());
return new Collection(data.sticker_packs.map(p => [p.id, new StickerPack(this, p)]));
}

/**
* Obtains the list of available sticker packs.
* @returns {Promise<Collection<Snowflake, StickerPack>>}
* @deprecated Use {@link Client#fetchStickerPacks} instead.
*/
fetchPremiumStickerPacks() {
if (!deprecationEmittedForPremiumStickerPacks) {
process.emitWarning(
'The Client#fetchPremiumStickerPacks() method is deprecated. Use Client#fetchStickerPacks() instead.',
'DeprecationWarning',
);

deprecationEmittedForPremiumStickerPacks = true;
}

return this.fetchStickerPacks();
}

/**
* Obtains a guild preview from Discord, available for all guilds the bot is in and all Discoverable guilds.
* @param {GuildResolvable} guild The guild to fetch the preview for
Expand Down
6 changes: 3 additions & 3 deletions packages/discord.js/src/structures/Sticker.js
Expand Up @@ -179,11 +179,11 @@ class Sticker extends Base {
}

/**
* Fetches the pack this sticker is part of from Discord, if this is a Nitro sticker.
* @returns {Promise<?StickerPack>}
* Fetches the pack that contains this sticker.
* @returns {Promise<?StickerPack>} The sticker pack or `null` if this sticker does not belong to one.
*/
async fetchPack() {
return (this.packId && (await this.client.fetchPremiumStickerPacks()).get(this.packId)) ?? null;
return (this.packId && (await this.client.fetchStickerPacks()).get(this.packId)) ?? null;
}

/**
Expand Down
4 changes: 3 additions & 1 deletion packages/discord.js/typings/index.d.ts
Expand Up @@ -979,7 +979,9 @@ export class Client<Ready extends boolean = boolean> extends BaseClient {
public fetchGuildTemplate(template: GuildTemplateResolvable): Promise<GuildTemplate>;
public fetchVoiceRegions(): Promise<Collection<string, VoiceRegion>>;
public fetchSticker(id: Snowflake): Promise<Sticker>;
public fetchPremiumStickerPacks(): Promise<Collection<Snowflake, StickerPack>>;
public fetchStickerPacks(): Promise<Collection<Snowflake, StickerPack>>;
/** @deprecated Use {@link fetchStickerPacks} instead. */
public fetchPremiumStickerPacks(): ReturnType<Client['fetchStickerPacks']>;
public fetchWebhook(id: Snowflake, token?: string): Promise<Webhook>;
public fetchGuildWidget(guild: GuildResolvable): Promise<Widget>;
public generateInvite(options?: InviteGenerationOptions): string;
Expand Down

0 comments on commit e02a59b

Please sign in to comment.