From 7650ce4f7244c04f30e31938965e5023aa858945 Mon Sep 17 00:00:00 2001 From: Danial Raza Date: Wed, 15 May 2024 14:33:08 +0200 Subject: [PATCH] feat: support avatar decorations (#834) --- deno/payloads/v10/guild.ts | 8 +++++++- deno/payloads/v10/user.ts | 24 ++++++++++++++++++++++++ deno/payloads/v9/guild.ts | 8 +++++++- deno/payloads/v9/user.ts | 24 ++++++++++++++++++++++++ deno/rest/v10/mod.ts | 12 ++++++++++++ deno/rest/v9/mod.ts | 12 ++++++++++++ payloads/v10/guild.ts | 8 +++++++- payloads/v10/user.ts | 24 ++++++++++++++++++++++++ payloads/v9/guild.ts | 8 +++++++- payloads/v9/user.ts | 24 ++++++++++++++++++++++++ rest/v10/index.ts | 12 ++++++++++++ rest/v9/index.ts | 12 ++++++++++++ 12 files changed, 172 insertions(+), 4 deletions(-) diff --git a/deno/payloads/v10/guild.ts b/deno/payloads/v10/guild.ts index 77d7210b..ee4f51bc 100644 --- a/deno/payloads/v10/guild.ts +++ b/deno/payloads/v10/guild.ts @@ -8,7 +8,7 @@ import type { PresenceUpdateReceiveStatus } from './gateway.ts'; import type { OAuth2Scopes } from './oauth2.ts'; import type { APIRole } from './permissions.ts'; import type { APISticker } from './sticker.ts'; -import type { APIUser } from './user.ts'; +import type { APIAvatarDecorationData, APIUser } from './user.ts'; /** * https://discord.com/developers/docs/resources/guild#unavailable-guild-object @@ -668,6 +668,12 @@ export interface APIGuildMember { * Timestamp of when the time out will be removed; until then, they cannot interact with the guild */ communication_disabled_until?: string | null; + /** + * The data for the member's guild avatar decoration + * + * See https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ + avatar_decoration_data?: APIAvatarDecorationData | null; } /** diff --git a/deno/payloads/v10/user.ts b/deno/payloads/v10/user.ts index f3a2e432..a8927b17 100644 --- a/deno/payloads/v10/user.ts +++ b/deno/payloads/v10/user.ts @@ -87,8 +87,16 @@ export interface APIUser { * The user's avatar decoration hash * * See https://discord.com/developers/docs/reference#image-formatting + * + * @deprecated Use `avatar_decoration_data` instead */ avatar_decoration?: string | null; + /** + * The data for the user's avatar decoration + * + * See https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ + avatar_decoration_data?: APIAvatarDecorationData | null; } /** @@ -320,3 +328,19 @@ export interface APIApplicationRoleConnection { */ metadata: Record; } + +/** + * https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ +export interface APIAvatarDecorationData { + /** + * The avatar decoration hash + * + * See https://discord.com/developers/docs/reference#image-formatting + */ + asset: string; + /** + * The id of the avatar decoration's SKU + */ + sku_id: Snowflake; +} diff --git a/deno/payloads/v9/guild.ts b/deno/payloads/v9/guild.ts index 51860a14..51bc1f24 100644 --- a/deno/payloads/v9/guild.ts +++ b/deno/payloads/v9/guild.ts @@ -8,7 +8,7 @@ import type { PresenceUpdateReceiveStatus } from './gateway.ts'; import type { OAuth2Scopes } from './oauth2.ts'; import type { APIRole } from './permissions.ts'; import type { APISticker } from './sticker.ts'; -import type { APIUser } from './user.ts'; +import type { APIAvatarDecorationData, APIUser } from './user.ts'; /** * https://discord.com/developers/docs/resources/guild#unavailable-guild-object @@ -660,6 +660,12 @@ export interface APIGuildMember { * Timestamp of when the time out will be removed; until then, they cannot interact with the guild */ communication_disabled_until?: string | null; + /** + * The data for the member's guild avatar decoration + * + * See https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ + avatar_decoration_data?: APIAvatarDecorationData | null; } /** diff --git a/deno/payloads/v9/user.ts b/deno/payloads/v9/user.ts index 6ab59491..8cb9018a 100644 --- a/deno/payloads/v9/user.ts +++ b/deno/payloads/v9/user.ts @@ -87,8 +87,16 @@ export interface APIUser { * The user's avatar decoration hash * * See https://discord.com/developers/docs/reference#image-formatting + * + * @deprecated Use `avatar_decoration_data` instead */ avatar_decoration?: string | null; + /** + * The data for the user's avatar decoration + * + * See https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ + avatar_decoration_data?: APIAvatarDecorationData | null; } /** @@ -320,3 +328,19 @@ export interface APIApplicationRoleConnection { */ metadata: Record; } + +/** + * https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ +export interface APIAvatarDecorationData { + /** + * The avatar decoration hash + * + * See https://discord.com/developers/docs/reference#image-formatting + */ + asset: string; + /** + * The id of the avatar decoration's SKU + */ + sku_id: Snowflake; +} diff --git a/deno/rest/v10/mod.ts b/deno/rest/v10/mod.ts index 75d9c771..b6c12325 100644 --- a/deno/rest/v10/mod.ts +++ b/deno/rest/v10/mod.ts @@ -1101,11 +1101,23 @@ export const CDNRoutes = { * - GET `/avatar-decorations/{user.id}/{user.avatar_decoration}.png` * * This route supports the extension: PNG + * + * @deprecated Use {@link CDNRoutes.avatarDecoration} instead. */ userAvatarDecoration(userId: Snowflake, userAvatarDecoration: string) { return `/avatar-decorations/${userId}/${userAvatarDecoration}.png` as const; }, + /** + * Route for: + * - GET `/avatar-decoration-presets/{avatar_decoration_data_asset}.png` + * + * This route supports the extension: PNG + */ + avatarDecoration(avatarDecorationDataAsset: string) { + return `/avatar-decoration-presets/${avatarDecorationDataAsset}.png` as const; + }, + /** * Route for: * - GET `/app-icons/{application.id}/{application.icon}.{png|jpeg|webp}` diff --git a/deno/rest/v9/mod.ts b/deno/rest/v9/mod.ts index a041fbce..57f5fc10 100644 --- a/deno/rest/v9/mod.ts +++ b/deno/rest/v9/mod.ts @@ -1110,11 +1110,23 @@ export const CDNRoutes = { * - GET `/avatar-decorations/{user.id}/{user.avatar_decoration}.png` * * This route supports the extension: PNG + * + * @deprecated Use {@link CDNRoutes.avatarDecoration} instead. */ userAvatarDecoration(userId: Snowflake, userAvatarDecoration: string) { return `/avatar-decorations/${userId}/${userAvatarDecoration}.png` as const; }, + /** + * Route for: + * - GET `/avatar-decoration-presets/{avatar_decoration_data_asset}.png` + * + * This route supports the extension: PNG + */ + avatarDecoration(avatarDecorationDataAsset: string) { + return `/avatar-decoration-presets/${avatarDecorationDataAsset}.png` as const; + }, + /** * Route for: * - GET `/app-icons/{application.id}/{application.icon}.{png|jpeg|webp}` diff --git a/payloads/v10/guild.ts b/payloads/v10/guild.ts index cf656067..c0a0c449 100644 --- a/payloads/v10/guild.ts +++ b/payloads/v10/guild.ts @@ -8,7 +8,7 @@ import type { PresenceUpdateReceiveStatus } from './gateway'; import type { OAuth2Scopes } from './oauth2'; import type { APIRole } from './permissions'; import type { APISticker } from './sticker'; -import type { APIUser } from './user'; +import type { APIAvatarDecorationData, APIUser } from './user'; /** * https://discord.com/developers/docs/resources/guild#unavailable-guild-object @@ -668,6 +668,12 @@ export interface APIGuildMember { * Timestamp of when the time out will be removed; until then, they cannot interact with the guild */ communication_disabled_until?: string | null; + /** + * The data for the member's guild avatar decoration + * + * See https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ + avatar_decoration_data?: APIAvatarDecorationData | null; } /** diff --git a/payloads/v10/user.ts b/payloads/v10/user.ts index 3c4069a0..3c1eb512 100644 --- a/payloads/v10/user.ts +++ b/payloads/v10/user.ts @@ -87,8 +87,16 @@ export interface APIUser { * The user's avatar decoration hash * * See https://discord.com/developers/docs/reference#image-formatting + * + * @deprecated Use `avatar_decoration_data` instead */ avatar_decoration?: string | null; + /** + * The data for the user's avatar decoration + * + * See https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ + avatar_decoration_data?: APIAvatarDecorationData | null; } /** @@ -320,3 +328,19 @@ export interface APIApplicationRoleConnection { */ metadata: Record; } + +/** + * https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ +export interface APIAvatarDecorationData { + /** + * The avatar decoration hash + * + * See https://discord.com/developers/docs/reference#image-formatting + */ + asset: string; + /** + * The id of the avatar decoration's SKU + */ + sku_id: Snowflake; +} diff --git a/payloads/v9/guild.ts b/payloads/v9/guild.ts index ff154b02..e09774d2 100644 --- a/payloads/v9/guild.ts +++ b/payloads/v9/guild.ts @@ -8,7 +8,7 @@ import type { PresenceUpdateReceiveStatus } from './gateway'; import type { OAuth2Scopes } from './oauth2'; import type { APIRole } from './permissions'; import type { APISticker } from './sticker'; -import type { APIUser } from './user'; +import type { APIAvatarDecorationData, APIUser } from './user'; /** * https://discord.com/developers/docs/resources/guild#unavailable-guild-object @@ -660,6 +660,12 @@ export interface APIGuildMember { * Timestamp of when the time out will be removed; until then, they cannot interact with the guild */ communication_disabled_until?: string | null; + /** + * The data for the member's guild avatar decoration + * + * See https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ + avatar_decoration_data?: APIAvatarDecorationData | null; } /** diff --git a/payloads/v9/user.ts b/payloads/v9/user.ts index 7760640e..6976fe3a 100644 --- a/payloads/v9/user.ts +++ b/payloads/v9/user.ts @@ -87,8 +87,16 @@ export interface APIUser { * The user's avatar decoration hash * * See https://discord.com/developers/docs/reference#image-formatting + * + * @deprecated Use `avatar_decoration_data` instead */ avatar_decoration?: string | null; + /** + * The data for the user's avatar decoration + * + * See https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ + avatar_decoration_data?: APIAvatarDecorationData | null; } /** @@ -320,3 +328,19 @@ export interface APIApplicationRoleConnection { */ metadata: Record; } + +/** + * https://discord.com/developers/docs/resources/user#avatar-decoration-data-object + */ +export interface APIAvatarDecorationData { + /** + * The avatar decoration hash + * + * See https://discord.com/developers/docs/reference#image-formatting + */ + asset: string; + /** + * The id of the avatar decoration's SKU + */ + sku_id: Snowflake; +} diff --git a/rest/v10/index.ts b/rest/v10/index.ts index 30627799..b7fed8ce 100644 --- a/rest/v10/index.ts +++ b/rest/v10/index.ts @@ -1101,11 +1101,23 @@ export const CDNRoutes = { * - GET `/avatar-decorations/{user.id}/{user.avatar_decoration}.png` * * This route supports the extension: PNG + * + * @deprecated Use {@link CDNRoutes.avatarDecoration} instead. */ userAvatarDecoration(userId: Snowflake, userAvatarDecoration: string) { return `/avatar-decorations/${userId}/${userAvatarDecoration}.png` as const; }, + /** + * Route for: + * - GET `/avatar-decoration-presets/{avatar_decoration_data_asset}.png` + * + * This route supports the extension: PNG + */ + avatarDecoration(avatarDecorationDataAsset: string) { + return `/avatar-decoration-presets/${avatarDecorationDataAsset}.png` as const; + }, + /** * Route for: * - GET `/app-icons/{application.id}/{application.icon}.{png|jpeg|webp}` diff --git a/rest/v9/index.ts b/rest/v9/index.ts index 6fc30fde..129f728a 100644 --- a/rest/v9/index.ts +++ b/rest/v9/index.ts @@ -1110,11 +1110,23 @@ export const CDNRoutes = { * - GET `/avatar-decorations/{user.id}/{user.avatar_decoration}.png` * * This route supports the extension: PNG + * + * @deprecated Use {@link CDNRoutes.avatarDecoration} instead. */ userAvatarDecoration(userId: Snowflake, userAvatarDecoration: string) { return `/avatar-decorations/${userId}/${userAvatarDecoration}.png` as const; }, + /** + * Route for: + * - GET `/avatar-decoration-presets/{avatar_decoration_data_asset}.png` + * + * This route supports the extension: PNG + */ + avatarDecoration(avatarDecorationDataAsset: string) { + return `/avatar-decoration-presets/${avatarDecorationDataAsset}.png` as const; + }, + /** * Route for: * - GET `/app-icons/{application.id}/{application.icon}.{png|jpeg|webp}`