From ca7232afc9c7bee80bde1eb4902032c0243f3ad2 Mon Sep 17 00:00:00 2001 From: Speedy <45142584+SpeedyCraftah@users.noreply.github.com> Date: Mon, 13 Jun 2022 21:07:59 +0100 Subject: [PATCH] Add user account functionality for fetching active threads --- src/managers/ThreadManager.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/managers/ThreadManager.js b/src/managers/ThreadManager.js index fc0a4b3..45e51c6 100644 --- a/src/managers/ThreadManager.js +++ b/src/managers/ThreadManager.js @@ -225,16 +225,30 @@ class ThreadManager extends CachedManager { return this.constructor._mapThreads(raw, this.client, { parent: this.channel, cache }); } + /** + * Discord.js self-bot specific options field for fetching active threads. + * @typedef {Object} FetchChannelThreadsOptions + * @property {string} [sort_by] The order in which the threads should be fetched in (default is last_message_time) + * @property {string} [sort_order] How the threads should be ordered (default is desc) + * @property {number} [limit] The maximum number of threads to return (default is 25) + * @property {number} [offset] The number of threads to offset fetching (useful when making multiple fetches) (default is 0) + */ + /** * Obtains the accessible active threads from Discord, requires `READ_MESSAGE_HISTORY` in the parent channel. * @param {boolean} [cache=true] Whether to cache the new thread objects if they aren't already + * @param {FetchChannelThreadsOptions} [selfbot_options] Options for self-bots where advanced users can specify further options * @returns {Promise} */ - async fetchActive(cache = true) { - if (!this.client.user.bot) { - throw new Error('INVALID_USER_METHOD: User accounts cannot use this method\nI will fix it .-.'); + async fetchActive(cache = true, options = null) { + if (options && this.client.user.bot) { + throw new Error('INVALID_BOT_OPTIONS: Options can only be specified for user accounts.'); } - const raw = await this.client.api.guilds(this.channel.guild.id).threads.active.get(); + + const raw = this.client.user.bot ? + await this.client.api.guilds(this.channel.guild.id).threads.active.get() + : await this.client.api.channels(this.channel.id).threads[`search?archived=false&limit=${options?.limit || '25'}&offset=${options?.offset || '0'}&sort_by=${options?.sort_by || 'last_message_time'}&sort_order=${options?.sort_order || 'desc'}`].get(); + return this.constructor._mapThreads(raw, this.client, { parent: this.channel, cache }); }