From 71c6d2609f1713827e95c5f617011c053cd3eb6a Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Fri, 27 Jun 2025 11:01:20 +0100 Subject: [PATCH] feat: support new pinned messages routes (#1254) --- deno/payloads/v10/channel.ts | 14 ++++++++++ deno/payloads/v9/channel.ts | 14 ++++++++++ deno/rest/v10/channel.ts | 50 +++++++++++++++++++++++++++++++++--- deno/rest/v10/mod.ts | 21 +++++++++++++++ deno/rest/v9/channel.ts | 47 +++++++++++++++++++++++++++++++-- deno/rest/v9/mod.ts | 21 +++++++++++++++ payloads/v10/channel.ts | 14 ++++++++++ payloads/v9/channel.ts | 14 ++++++++++ rest/v10/channel.ts | 50 +++++++++++++++++++++++++++++++++--- rest/v10/index.ts | 21 +++++++++++++++ rest/v9/channel.ts | 47 +++++++++++++++++++++++++++++++-- rest/v9/index.ts | 21 +++++++++++++++ 12 files changed, 324 insertions(+), 10 deletions(-) diff --git a/deno/payloads/v10/channel.ts b/deno/payloads/v10/channel.ts index dc63bfd3..75e66996 100644 --- a/deno/payloads/v10/channel.ts +++ b/deno/payloads/v10/channel.ts @@ -2454,3 +2454,17 @@ export type APIMessageSnapshotFields = Pick< | 'timestamp' | 'type' >; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#message-pin-object} + */ +export interface APIMessagePin { + /** + * The time the message was pinned + */ + pinned_at: string; + /** + * The pinned message + */ + message: APIMessage; +} diff --git a/deno/payloads/v9/channel.ts b/deno/payloads/v9/channel.ts index 7bb1543f..54efa51e 100644 --- a/deno/payloads/v9/channel.ts +++ b/deno/payloads/v9/channel.ts @@ -2451,3 +2451,17 @@ export type APIMessageSnapshotFields = Pick< | 'timestamp' | 'type' >; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#message-pin-object} + */ +export interface APIMessagePin { + /** + * The time the message was pinned + */ + pinned_at: string; + /** + * The pinned message + */ + message: APIMessage; +} diff --git a/deno/rest/v10/channel.ts b/deno/rest/v10/channel.ts index ef5dc5b8..7121c160 100644 --- a/deno/rest/v10/channel.ts +++ b/deno/rest/v10/channel.ts @@ -24,6 +24,7 @@ import type { ChannelFlags, APIAttachment, APIMessageTopLevelComponent, + APIMessagePin, } from '../../payloads/v10/mod.ts'; import type { _AddUndefinedToPossiblyUndefinedPropertiesOfInterface, _StrictPartial } from '../../utils/internals.ts'; import type { RESTAPIPoll } from './poll.ts'; @@ -617,17 +618,60 @@ export type RESTPostAPIChannelFollowersResult = APIFollowedChannel; export type RESTPostAPIChannelTypingResult = never; /** - * @see {@link https://discord.com/developers/docs/resources/channel#get-pinned-messages} + * @see {@link https://discord.com/developers/docs/resources/message#get-channel-pins} + */ +export interface RESTGetAPIChannelMessagesPinsQuery { + /** + * Get messages pinned before this timestamp + */ + before?: string; + /** + * Maximum number of pins to return (1-50). + * + * @defaultValue `50` + */ + limit?: number; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/message#get-channel-pins} + */ +export interface RESTGetAPIChannelMessagesPinsResult { + /** + * Array of pinned messages + */ + items: APIMessagePin[]; + /** + * Whether there are more items available + */ + has_more: boolean; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/message#pin-message} + */ +export type RESTPutAPIChannelMessagesPinResult = never; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#unpin-message} + */ +export type RESTDeleteAPIChannelMessagesPinResult = never; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#get-pinned-messages-deprecated} + * @deprecated */ export type RESTGetAPIChannelPinsResult = APIMessage[]; /** - * @see {@link https://discord.com/developers/docs/resources/channel#pin-message} + * @see {@link https://discord.com/developers/docs/resources/message#pin-message-deprecated} + * @deprecated */ export type RESTPutAPIChannelPinResult = never; /** - * @see {@link https://discord.com/developers/docs/resources/channel#unpin-message} + * @see {@link https://discord.com/developers/docs/resources/message#unpin-message-deprecated} + * @deprecated */ export type RESTDeleteAPIChannelPinResult = never; diff --git a/deno/rest/v10/mod.ts b/deno/rest/v10/mod.ts index 8c4c5969..715e1706 100644 --- a/deno/rest/v10/mod.ts +++ b/deno/rest/v10/mod.ts @@ -181,9 +181,28 @@ export const Routes = { return `/channels/${channelId}/typing` as const; }, + /** + * Route for: + * - GET `/channels/{channel.id}/messages/pins` + */ + channelMessagesPins(channelId: Snowflake) { + return `/channels/${channelId}/messages/pins` as const; + }, + + /** + * Route for: + * - PUT `/channels/{channel.id}/messages/pins/{message.id}` + * - DELETE `/channels/{channel.id}/messages/pins/{message.id}` + */ + channelMessagesPin(channelId: Snowflake, messageId: Snowflake) { + return `/channels/${channelId}/messages/pins/${messageId}` as const; + }, + /** * Route for: * - GET `/channels/{channel.id}/pins` + * + * @deprecated Use {@link Routes.channelMessagesPins} instead. */ channelPins(channelId: Snowflake) { return `/channels/${channelId}/pins` as const; @@ -193,6 +212,8 @@ export const Routes = { * Route for: * - PUT `/channels/{channel.id}/pins/{message.id}` * - DELETE `/channels/{channel.id}/pins/{message.id}` + * + * @deprecated Use {@link Routes.channelMessagesPin} instead. */ channelPin(channelId: Snowflake, messageId: Snowflake) { return `/channels/${channelId}/pins/${messageId}` as const; diff --git a/deno/rest/v9/channel.ts b/deno/rest/v9/channel.ts index c9f30893..f7da4ee5 100644 --- a/deno/rest/v9/channel.ts +++ b/deno/rest/v9/channel.ts @@ -24,6 +24,7 @@ import type { ChannelFlags, APIAttachment, APIMessageTopLevelComponent, + APIMessagePin, } from '../../payloads/v9/mod.ts'; import type { _AddUndefinedToPossiblyUndefinedPropertiesOfInterface, _StrictPartial } from '../../utils/internals.ts'; import type { RESTAPIPoll } from './poll.ts'; @@ -631,12 +632,54 @@ export type RESTPostAPIChannelFollowersResult = APIFollowedChannel; export type RESTPostAPIChannelTypingResult = never; /** - * @see {@link https://discord.com/developers/docs/resources/channel#get-pinned-messages} + * @see {@link https://discord.com/developers/docs/resources/message#get-channel-pins} + */ +export interface RESTGetAPIChannelMessagesPinsQuery { + /** + * Get messages pinned before this timestamp + */ + before?: string; + /** + * Maximum number of pins to return (1-50). + * + * @defaultValue `50` + */ + limit?: number; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/message#get-channel-pins} + */ +export interface RESTGetAPIChannelMessagesPinsResult { + /** + * Array of pinned messages + */ + items: APIMessagePin[]; + /** + * Whether there are more items available + */ + has_more: boolean; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/message#pin-message} + */ +export type RESTPutAPIChannelMessagesPinResult = never; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#unpin-message} + */ +export type RESTDeleteAPIChannelMessagesPinResult = never; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#get-pinned-messages-deprecated} + * @deprecated */ export type RESTGetAPIChannelPinsResult = APIMessage[]; /** - * @see {@link https://discord.com/developers/docs/resources/channel#pin-message} + * @see {@link https://discord.com/developers/docs/resources/message#pin-message-deprecated} + * @deprecated */ export type RESTPutAPIChannelPinResult = never; diff --git a/deno/rest/v9/mod.ts b/deno/rest/v9/mod.ts index ffbe87e4..22ad03d2 100644 --- a/deno/rest/v9/mod.ts +++ b/deno/rest/v9/mod.ts @@ -181,9 +181,28 @@ export const Routes = { return `/channels/${channelId}/typing` as const; }, + /** + * Route for: + * - GET `/channels/{channel.id}/messages/pins` + */ + channelMessagesPins(channelId: Snowflake) { + return `/channels/${channelId}/messages/pins` as const; + }, + + /** + * Route for: + * - PUT `/channels/{channel.id}/messages/pins/{message.id}` + * - DELETE `/channels/{channel.id}/messages/pins/{message.id}` + */ + channelMessagesPin(channelId: Snowflake, messageId: Snowflake) { + return `/channels/${channelId}/messages/pins/${messageId}` as const; + }, + /** * Route for: * - GET `/channels/{channel.id}/pins` + * + * @deprecated Use {@link Routes.channelMessagesPins} instead. */ channelPins(channelId: Snowflake) { return `/channels/${channelId}/pins` as const; @@ -193,6 +212,8 @@ export const Routes = { * Route for: * - PUT `/channels/{channel.id}/pins/{message.id}` * - DELETE `/channels/{channel.id}/pins/{message.id}` + * + * @deprecated Use {@link Routes.channelMessagesPin} instead. */ channelPin(channelId: Snowflake, messageId: Snowflake) { return `/channels/${channelId}/pins/${messageId}` as const; diff --git a/payloads/v10/channel.ts b/payloads/v10/channel.ts index 5f79ce60..cafe25e3 100644 --- a/payloads/v10/channel.ts +++ b/payloads/v10/channel.ts @@ -2454,3 +2454,17 @@ export type APIMessageSnapshotFields = Pick< | 'timestamp' | 'type' >; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#message-pin-object} + */ +export interface APIMessagePin { + /** + * The time the message was pinned + */ + pinned_at: string; + /** + * The pinned message + */ + message: APIMessage; +} diff --git a/payloads/v9/channel.ts b/payloads/v9/channel.ts index 29854eab..a1af2444 100644 --- a/payloads/v9/channel.ts +++ b/payloads/v9/channel.ts @@ -2451,3 +2451,17 @@ export type APIMessageSnapshotFields = Pick< | 'timestamp' | 'type' >; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#message-pin-object} + */ +export interface APIMessagePin { + /** + * The time the message was pinned + */ + pinned_at: string; + /** + * The pinned message + */ + message: APIMessage; +} diff --git a/rest/v10/channel.ts b/rest/v10/channel.ts index 8539459a..e7bb8332 100644 --- a/rest/v10/channel.ts +++ b/rest/v10/channel.ts @@ -24,6 +24,7 @@ import type { ChannelFlags, APIAttachment, APIMessageTopLevelComponent, + APIMessagePin, } from '../../payloads/v10/index'; import type { _AddUndefinedToPossiblyUndefinedPropertiesOfInterface, _StrictPartial } from '../../utils/internals'; import type { RESTAPIPoll } from './poll'; @@ -617,17 +618,60 @@ export type RESTPostAPIChannelFollowersResult = APIFollowedChannel; export type RESTPostAPIChannelTypingResult = never; /** - * @see {@link https://discord.com/developers/docs/resources/channel#get-pinned-messages} + * @see {@link https://discord.com/developers/docs/resources/message#get-channel-pins} + */ +export interface RESTGetAPIChannelMessagesPinsQuery { + /** + * Get messages pinned before this timestamp + */ + before?: string; + /** + * Maximum number of pins to return (1-50). + * + * @defaultValue `50` + */ + limit?: number; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/message#get-channel-pins} + */ +export interface RESTGetAPIChannelMessagesPinsResult { + /** + * Array of pinned messages + */ + items: APIMessagePin[]; + /** + * Whether there are more items available + */ + has_more: boolean; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/message#pin-message} + */ +export type RESTPutAPIChannelMessagesPinResult = never; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#unpin-message} + */ +export type RESTDeleteAPIChannelMessagesPinResult = never; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#get-pinned-messages-deprecated} + * @deprecated */ export type RESTGetAPIChannelPinsResult = APIMessage[]; /** - * @see {@link https://discord.com/developers/docs/resources/channel#pin-message} + * @see {@link https://discord.com/developers/docs/resources/message#pin-message-deprecated} + * @deprecated */ export type RESTPutAPIChannelPinResult = never; /** - * @see {@link https://discord.com/developers/docs/resources/channel#unpin-message} + * @see {@link https://discord.com/developers/docs/resources/message#unpin-message-deprecated} + * @deprecated */ export type RESTDeleteAPIChannelPinResult = never; diff --git a/rest/v10/index.ts b/rest/v10/index.ts index 414b7de4..1022db73 100644 --- a/rest/v10/index.ts +++ b/rest/v10/index.ts @@ -181,9 +181,28 @@ export const Routes = { return `/channels/${channelId}/typing` as const; }, + /** + * Route for: + * - GET `/channels/{channel.id}/messages/pins` + */ + channelMessagesPins(channelId: Snowflake) { + return `/channels/${channelId}/messages/pins` as const; + }, + + /** + * Route for: + * - PUT `/channels/{channel.id}/messages/pins/{message.id}` + * - DELETE `/channels/{channel.id}/messages/pins/{message.id}` + */ + channelMessagesPin(channelId: Snowflake, messageId: Snowflake) { + return `/channels/${channelId}/messages/pins/${messageId}` as const; + }, + /** * Route for: * - GET `/channels/{channel.id}/pins` + * + * @deprecated Use {@link Routes.channelMessagesPins} instead. */ channelPins(channelId: Snowflake) { return `/channels/${channelId}/pins` as const; @@ -193,6 +212,8 @@ export const Routes = { * Route for: * - PUT `/channels/{channel.id}/pins/{message.id}` * - DELETE `/channels/{channel.id}/pins/{message.id}` + * + * @deprecated Use {@link Routes.channelMessagesPin} instead. */ channelPin(channelId: Snowflake, messageId: Snowflake) { return `/channels/${channelId}/pins/${messageId}` as const; diff --git a/rest/v9/channel.ts b/rest/v9/channel.ts index 3f502322..3c1380ac 100644 --- a/rest/v9/channel.ts +++ b/rest/v9/channel.ts @@ -24,6 +24,7 @@ import type { ChannelFlags, APIAttachment, APIMessageTopLevelComponent, + APIMessagePin, } from '../../payloads/v9/index'; import type { _AddUndefinedToPossiblyUndefinedPropertiesOfInterface, _StrictPartial } from '../../utils/internals'; import type { RESTAPIPoll } from './poll'; @@ -631,12 +632,54 @@ export type RESTPostAPIChannelFollowersResult = APIFollowedChannel; export type RESTPostAPIChannelTypingResult = never; /** - * @see {@link https://discord.com/developers/docs/resources/channel#get-pinned-messages} + * @see {@link https://discord.com/developers/docs/resources/message#get-channel-pins} + */ +export interface RESTGetAPIChannelMessagesPinsQuery { + /** + * Get messages pinned before this timestamp + */ + before?: string; + /** + * Maximum number of pins to return (1-50). + * + * @defaultValue `50` + */ + limit?: number; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/message#get-channel-pins} + */ +export interface RESTGetAPIChannelMessagesPinsResult { + /** + * Array of pinned messages + */ + items: APIMessagePin[]; + /** + * Whether there are more items available + */ + has_more: boolean; +} + +/** + * @see {@link https://discord.com/developers/docs/resources/message#pin-message} + */ +export type RESTPutAPIChannelMessagesPinResult = never; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#unpin-message} + */ +export type RESTDeleteAPIChannelMessagesPinResult = never; + +/** + * @see {@link https://discord.com/developers/docs/resources/message#get-pinned-messages-deprecated} + * @deprecated */ export type RESTGetAPIChannelPinsResult = APIMessage[]; /** - * @see {@link https://discord.com/developers/docs/resources/channel#pin-message} + * @see {@link https://discord.com/developers/docs/resources/message#pin-message-deprecated} + * @deprecated */ export type RESTPutAPIChannelPinResult = never; diff --git a/rest/v9/index.ts b/rest/v9/index.ts index 2e403564..740faef4 100644 --- a/rest/v9/index.ts +++ b/rest/v9/index.ts @@ -181,9 +181,28 @@ export const Routes = { return `/channels/${channelId}/typing` as const; }, + /** + * Route for: + * - GET `/channels/{channel.id}/messages/pins` + */ + channelMessagesPins(channelId: Snowflake) { + return `/channels/${channelId}/messages/pins` as const; + }, + + /** + * Route for: + * - PUT `/channels/{channel.id}/messages/pins/{message.id}` + * - DELETE `/channels/{channel.id}/messages/pins/{message.id}` + */ + channelMessagesPin(channelId: Snowflake, messageId: Snowflake) { + return `/channels/${channelId}/messages/pins/${messageId}` as const; + }, + /** * Route for: * - GET `/channels/{channel.id}/pins` + * + * @deprecated Use {@link Routes.channelMessagesPins} instead. */ channelPins(channelId: Snowflake) { return `/channels/${channelId}/pins` as const; @@ -193,6 +212,8 @@ export const Routes = { * Route for: * - PUT `/channels/{channel.id}/pins/{message.id}` * - DELETE `/channels/{channel.id}/pins/{message.id}` + * + * @deprecated Use {@link Routes.channelMessagesPin} instead. */ channelPin(channelId: Snowflake, messageId: Snowflake) { return `/channels/${channelId}/pins/${messageId}` as const;