From fe42864b005c0d243d6e2d6ac46433f5aa37eec6 Mon Sep 17 00:00:00 2001 From: Skillz4Killz <23035000+Skillz4Killz@users.noreply.github.com> Date: Mon, 21 Mar 2022 12:08:43 +0000 Subject: [PATCH] fix: add nitroStickerPacks helper. Closes #2095 --- bot.ts | 7 +++++-- helpers/misc/nitroStickerPacks.ts | 13 +++++++++++++ transformers/sticker.ts | 17 ++++++++++++++++- util/constants.ts | 3 +++ 4 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 helpers/misc/nitroStickerPacks.ts diff --git a/bot.ts b/bot.ts index b979887df..8a2d785a6 100644 --- a/bot.ts +++ b/bot.ts @@ -59,9 +59,9 @@ import { transformWelcomeScreen } from "./transformers/welcomeScreen.ts"; import { transformVoiceRegion } from "./transformers/voiceRegion.ts"; import { transformWidget } from "./transformers/widget.ts"; import { transformStageInstance } from "./transformers/stageInstance.ts"; -import { transformSticker } from "./transformers/sticker.ts"; +import { StickerPack, transformSticker, transformStickerPack } from "./transformers/sticker.ts"; import { GetGatewayBot, transformGatewayBot } from "./transformers/gatewayBot.ts"; -import { DiscordEmoji, DiscordGatewayPayload, DiscordReady } from "./types/discord.ts"; +import { DiscordEmoji, DiscordGatewayPayload, DiscordReady, DiscordStickerPack } from "./types/discord.ts"; import { Errors, GatewayDispatchEventNames, GatewayIntents } from "./types/shared.ts"; import { @@ -343,6 +343,7 @@ export function createHelpers( ...createBaseHelpers(customHelpers || {}), }) ) { + // @ts-ignore - TODO: make the types better converted[name as keyof FinalHelpers] = ( // @ts-ignore - TODO: make the types better ...args: RemoveFirstFromTuple> @@ -397,6 +398,7 @@ export interface Transformers { widget: (bot: Bot, payload: DiscordGuildWidget) => GuildWidget; stageInstance: (bot: Bot, payload: DiscordStageInstance) => StageInstance; sticker: (bot: Bot, payload: DiscordSticker) => Sticker; + stickerPack: (bot: Bot, payload: DiscordStickerPack) => StickerPack; } export function createTransformers(options: Partial) { @@ -435,6 +437,7 @@ export function createTransformers(options: Partial) { widget: options.widget || transformWidget, stageInstance: options.stageInstance || transformStageInstance, sticker: options.sticker || transformSticker, + stickerPack: options.stickerPack || transformStickerPack, gatewayBot: options.gatewayBot || transformGatewayBot, }; } diff --git a/helpers/misc/nitroStickerPacks.ts b/helpers/misc/nitroStickerPacks.ts new file mode 100644 index 000000000..dec7ed691 --- /dev/null +++ b/helpers/misc/nitroStickerPacks.ts @@ -0,0 +1,13 @@ +import { Bot } from "../../bot.ts"; +import { DiscordStickerPack } from "../../types/discord.ts"; + +/** Returns the list of sticker packs available to Nitro subscribers. */ +export async function nitroStickerPacks(bot: Bot) { + const packs = await bot.rest.runMethod( + bot.rest, + "get", + bot.constants.endpoints.NITRO_STICKER_PACKS, + ); + + return packs.map((pack) => bot.transformers.stickerPack(bot, pack)); +} diff --git a/transformers/sticker.ts b/transformers/sticker.ts index f20cadab4..bbf6f6f83 100644 --- a/transformers/sticker.ts +++ b/transformers/sticker.ts @@ -1,5 +1,5 @@ import { Bot } from "../bot.ts"; -import { DiscordSticker } from "../types/discord.ts"; +import { DiscordSticker, DiscordStickerPack } from "../types/discord.ts"; import { Optionalize } from "../types/shared.ts"; export function transformSticker(bot: Bot, payload: DiscordSticker) { @@ -20,4 +20,19 @@ export function transformSticker(bot: Bot, payload: DiscordSticker) { return sticker as Optionalize; } +export function transformStickerPack(bot: Bot, payload: DiscordStickerPack) { + const pack = { + id: bot.transformers.snowflake(payload.id), + stickers: payload.stickers.map((sticker) => bot.transformers.sticker(bot, sticker)), + name: payload.name, + skuId: bot.transformers.snowflake(payload.sku_id), + coverStickerId: payload.cover_sticker_id ? bot.transformers.snowflake(payload.cover_sticker_id) : undefined, + description: payload.description, + bannerAssetId: payload.banner_asset_id ? bot.transformers.snowflake(payload.banner_asset_id) : undefined, + }; + + return pack as Optionalize; +} + export interface Sticker extends ReturnType {} +export interface StickerPack extends ReturnType {} diff --git a/util/constants.ts b/util/constants.ts index af84e9a35..7d16850eb 100644 --- a/util/constants.ts +++ b/util/constants.ts @@ -169,6 +169,9 @@ export const endpoints = { // Stage instances STAGE_INSTANCES: `${baseEndpoints.BASE_URL}/stage-instances`, STAGE_INSTANCE: (channelId: bigint) => `${baseEndpoints.BASE_URL}/stage-instances/${channelId}`, + + // Misc Endpoints + NITRO_STICKER_PACKS: `${baseEndpoints.BASE_URL}/sticker-packs`, }; export const SLASH_COMMANDS_NAME_REGEX = /^[\w-]{1,32}$/;