@@ -123,24 +123,63 @@ class MessageManager extends CachedManager {
123
123
return data . reduce ( ( _data , message ) => _data . set ( message . id , this . _add ( message , options . cache ) ) , new Collection ( ) ) ;
124
124
}
125
125
126
+ /**
127
+ * Options used to fetch pinned messages.
128
+ *
129
+ * @typedef {Object } FetchPinnedMessagesOptions
130
+ * @property {DateResolvable } [before] Consider only pinned messages before this time
131
+ * @property {number } [limit] The maximum number of pinned messages to return
132
+ * @property {boolean } [cache] Whether to cache the pinned messages
133
+ */
134
+
135
+ /**
136
+ * Data returned from fetching pinned messages.
137
+ *
138
+ * @typedef {Object } FetchPinnedMessagesResponse
139
+ * @property {MessagePin[] } items The pinned messages
140
+ * @property {boolean } hasMore Whether there are additional pinned messages that require a subsequent call
141
+ */
142
+
143
+ /**
144
+ * Pinned message data returned from fetching pinned messages.
145
+ *
146
+ * @typedef {Object } MessagePin
147
+ * @property {Date } pinnedAt The time the message was pinned at
148
+ * @property {number } pinnedTimestamp The timestamp the message was pinned at
149
+ * @property {Message } message The pinned message
150
+ */
151
+
126
152
/**
127
153
* Fetches the pinned messages of this channel and returns a collection of them.
128
154
* <info>The returned Collection does not contain any reaction data of the messages.
129
155
* Those need to be fetched separately.</info>
130
156
*
131
- * @param {boolean } [cache=true] Whether to cache the message(s)
132
- * @returns {Promise<Collection<Snowflake, Message> > }
157
+ * @param {FetchPinnedMessagesOptions } [options={}] Options for fetching pinned messages
158
+ * @returns {Promise<FetchPinnedMessagesResponse > }
133
159
* @example
134
160
* // Get pinned messages
135
- * channel.messages.fetchPinned ()
136
- * .then(messages => console.log(`Received ${messages.size } messages`))
161
+ * channel.messages.fetchPins ()
162
+ * .then(messages => console.log(`Received ${messages.items.length } messages`))
137
163
* .catch(console.error);
138
164
*/
139
- async fetchPinned ( cache = true ) {
140
- const data = await this . client . rest . get ( Routes . channelPins ( this . channel . id ) ) ;
141
- const messages = new Collection ( ) ;
142
- for ( const message of data ) messages . set ( message . id , this . _add ( message , cache ) ) ;
143
- return messages ;
165
+ async fetchPins ( options = { } ) {
166
+ const data = await this . client . rest . get ( Routes . channelMessagesPins ( this . channel . id ) , {
167
+ query : makeURLSearchParams ( {
168
+ ...options ,
169
+ before : options . before && new Date ( options . before ) . toISOString ( ) ,
170
+ } ) ,
171
+ } ) ;
172
+
173
+ return {
174
+ items : data . items . map ( item => ( {
175
+ pinnedTimestamp : Date . parse ( item . pinned_at ) ,
176
+ get pinnedAt ( ) {
177
+ return new Date ( this . pinnedTimestamp ) ;
178
+ } ,
179
+ message : this . _add ( item . message , options . cache ) ,
180
+ } ) ) ,
181
+ hasMore : data . has_more ,
182
+ } ;
144
183
}
145
184
146
185
/**
@@ -221,7 +260,7 @@ class MessageManager extends CachedManager {
221
260
const messageId = this . resolveId ( message ) ;
222
261
if ( ! messageId ) throw new DiscordjsTypeError ( ErrorCodes . InvalidType , 'message' , 'MessageResolvable' ) ;
223
262
224
- await this . client . rest . put ( Routes . channelPin ( this . channel . id , messageId ) , { reason } ) ;
263
+ await this . client . rest . put ( Routes . channelMessagesPin ( this . channel . id , messageId ) , { reason } ) ;
225
264
}
226
265
227
266
/**
@@ -235,7 +274,7 @@ class MessageManager extends CachedManager {
235
274
const messageId = this . resolveId ( message ) ;
236
275
if ( ! messageId ) throw new DiscordjsTypeError ( ErrorCodes . InvalidType , 'message' , 'MessageResolvable' ) ;
237
276
238
- await this . client . rest . delete ( Routes . channelPin ( this . channel . id , messageId ) , { reason } ) ;
277
+ await this . client . rest . delete ( Routes . channelMessagesPin ( this . channel . id , messageId ) , { reason } ) ;
239
278
}
240
279
241
280
/**
0 commit comments