mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
chore(Threads): general fixup and catch up on features (#5959)
Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
const BaseManager = require('./BaseManager');
|
||||
const GuildChannel = require('../structures/GuildChannel');
|
||||
const PermissionOverwrites = require('../structures/PermissionOverwrites');
|
||||
const ThreadChannel = require('../structures/ThreadChannel');
|
||||
const Collection = require('../util/Collection');
|
||||
const { ChannelTypes, ThreadChannelTypes } = require('../util/Constants');
|
||||
|
||||
@@ -36,7 +37,7 @@ class GuildChannelManager extends BaseManager {
|
||||
|
||||
/**
|
||||
* The cache of this Manager
|
||||
* @type {Collection<Snowflake, GuildChannel>}
|
||||
* @type {Collection<Snowflake, GuildChannel|ThreadChannel>}
|
||||
* @name GuildChannelManager#cache
|
||||
*/
|
||||
|
||||
@@ -50,27 +51,30 @@ class GuildChannelManager extends BaseManager {
|
||||
/**
|
||||
* Data that can be resolved to give a Guild Channel object. This can be:
|
||||
* * A GuildChannel object
|
||||
* * A ThreadChannel object
|
||||
* * A Snowflake
|
||||
* @typedef {GuildChannel|Snowflake} GuildChannelResolvable
|
||||
* @typedef {GuildChannel|ThreadChannel|Snowflake} GuildChannelResolvable
|
||||
*/
|
||||
|
||||
/**
|
||||
* Resolves a GuildChannelResolvable to a Channel object.
|
||||
* @method resolve
|
||||
* @memberof GuildChannelManager
|
||||
* @instance
|
||||
* @param {GuildChannelResolvable} channel The GuildChannel resolvable to resolve
|
||||
* @returns {?GuildChannel}
|
||||
* @returns {?(GuildChannel|ThreadChannel)}
|
||||
*/
|
||||
resolve(channel) {
|
||||
if (channel instanceof ThreadChannel) return super.resolve(channel.id);
|
||||
return super.resolve(channel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves a GuildChannelResolvable to a channel ID string.
|
||||
* @method resolveID
|
||||
* @memberof GuildChannelManager
|
||||
* @instance
|
||||
* @param {GuildChannelResolvable} channel The GuildChannel resolvable to resolve
|
||||
* @returns {?Snowflake}
|
||||
*/
|
||||
resolveID(channel) {
|
||||
if (channel instanceof ThreadChannel) return super.resolveID(channel.id);
|
||||
return super.resolveID(channel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Options used to create a new channel in a guild.
|
||||
|
||||
@@ -63,8 +63,8 @@ class ThreadManager extends BaseManager {
|
||||
* A number that is allowed to be the duration in minutes before a thread is automatically archived. This can be:
|
||||
* * `60` (1 hour)
|
||||
* * `1440` (1 day)
|
||||
* * `4320` (3 days)
|
||||
* * `10080` (7 days)
|
||||
* * `4320` (3 days) <warn>This is only available when the guild has the `THREE_DAY_THREAD_ARCHIVE` feature.</warn>
|
||||
* * `10080` (7 days) <warn>This is only available when the guild has the `SEVEN_DAY_THREAD_ARCHIVE` feature.</warn>
|
||||
* @typedef {number} ThreadAutoArchiveDuration
|
||||
*/
|
||||
|
||||
@@ -76,8 +76,8 @@ class ThreadManager extends BaseManager {
|
||||
* @property {ThreadAutoArchiveDuration} autoArchiveDuration How long before the thread is automatically archived
|
||||
* @property {MessageResolvable} [startMessage] The message to start a public or news thread from,
|
||||
* creates a private thread if not provided
|
||||
* @property {ThreadChannelType|number} [type] The type of thread to create
|
||||
* <warn>When creating threads in a `news` channel this is always `news_thread`</warn>
|
||||
* @property {ThreadChannelType|number} [type='public_thread'] The type of thread to create
|
||||
* <warn>When creating threads in a `news` channel this is ignored and is always `news_thread`</warn>
|
||||
* @param {string} [reason] Reason for creating the thread
|
||||
*/
|
||||
|
||||
@@ -89,16 +89,21 @@ class ThreadManager extends BaseManager {
|
||||
* // Create a new public thread
|
||||
* channel.threads
|
||||
* .create({
|
||||
* name: 'food-talk'
|
||||
* name: 'food-talk',
|
||||
* autoArchiveDuration: 60,
|
||||
* startMessage: channel.lastMessageID,
|
||||
* reason: 'Needed a separate thread for food',
|
||||
* })
|
||||
* .then(console.log)
|
||||
* .catch(console.error);
|
||||
* @example
|
||||
* // Create a new private thread
|
||||
* channel.threads
|
||||
* .create({ name: 'mod-talk', autoArchiveDuration: 60, reason: 'Needed a separate thread for moderation' })
|
||||
* .create({
|
||||
* name: 'mod-talk',
|
||||
* autoArchiveDuration: 60,
|
||||
* type: 'private_thread',
|
||||
* reason: 'Needed a separate thread for moderation',
|
||||
* })
|
||||
* .then(console.log)
|
||||
* .catch(console.error);
|
||||
*/
|
||||
@@ -113,7 +118,7 @@ class ThreadManager extends BaseManager {
|
||||
if (!startMessageID) throw new TypeError('INVALID_TYPE', 'startMessage', 'MessageResolvable');
|
||||
path = path.messages(startMessageID);
|
||||
} else if (this.channel.type !== 'news') {
|
||||
resolvedType = typeof type === 'string' ? ChannelTypes[type.toUpperCase()] : type;
|
||||
resolvedType = typeof type === 'string' ? ChannelTypes[type.toUpperCase()] : type ?? resolvedType;
|
||||
}
|
||||
|
||||
const data = await path.threads.post({
|
||||
|
||||
@@ -170,7 +170,10 @@ class Guild extends AnonymousGuild {
|
||||
* * NEWS
|
||||
* * PARTNERED
|
||||
* * PREVIEW_ENABLED
|
||||
* * PRIVATE_THREADS
|
||||
* * RELAY_ENABLED
|
||||
* * SEVEN_DAY_THREAD_ARCHIVE
|
||||
* * THREE_DAY_THREAD_ARCHIVE
|
||||
* * TICKETED_EVENTS_ENABLED
|
||||
* * VANITY_URL
|
||||
* * VERIFIED
|
||||
|
||||
@@ -256,13 +256,13 @@ class GuildMember extends Base {
|
||||
/**
|
||||
* Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,
|
||||
* taking into account roles and permission overwrites.
|
||||
* @param {ChannelResolvable} channel The guild channel to use as context
|
||||
* @param {GuildChannelResolvable} channel The guild channel to use as context
|
||||
* @returns {Readonly<Permissions>}
|
||||
*/
|
||||
permissionsIn(channel) {
|
||||
channel = this.guild.channels.resolve(channel);
|
||||
if (!channel) throw new Error('GUILD_CHANNEL_RESOLVE');
|
||||
return channel.memberPermissions(this);
|
||||
return channel.permissionsFor(this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -764,6 +764,7 @@ exports.APIErrors = {
|
||||
ANNOUNCEMENT_EDIT_LIMIT_EXCEEDED: 20022,
|
||||
CHANNEL_HIT_WRITE_RATELIMIT: 20028,
|
||||
CONTENT_NOT_ALLOWED: 20031,
|
||||
GUILD_PREMIUM_LEVEL_TOO_LOW: 20035,
|
||||
MAXIMUM_GUILDS: 30001,
|
||||
MAXIMUM_FRIENDS: 30002,
|
||||
MAXIMUM_PINS: 30003,
|
||||
|
||||
14
typings/index.d.ts
vendored
14
typings/index.d.ts
vendored
@@ -1082,7 +1082,7 @@ declare module 'discord.js' {
|
||||
public deleteDM(): Promise<DMChannel>;
|
||||
public edit(data: GuildMemberEditData, reason?: string): Promise<GuildMember>;
|
||||
public kick(reason?: string): Promise<GuildMember>;
|
||||
public permissionsIn(channel: ChannelResolvable): Readonly<Permissions>;
|
||||
public permissionsIn(channel: GuildChannelResolvable): Readonly<Permissions>;
|
||||
public setNickname(nickname: string | null, reason?: string): Promise<GuildMember>;
|
||||
public toJSON(): unknown;
|
||||
public toString(): string;
|
||||
@@ -2400,7 +2400,11 @@ declare module 'discord.js' {
|
||||
): Promise<Collection<Snowflake, ApplicationCommandPermissions[]>>;
|
||||
}
|
||||
|
||||
export class GuildChannelManager extends BaseManager<Snowflake, GuildChannel, GuildChannelResolvable> {
|
||||
export class GuildChannelManager extends BaseManager<
|
||||
Snowflake,
|
||||
GuildChannel | ThreadChannel,
|
||||
GuildChannelResolvable
|
||||
> {
|
||||
constructor(guild: Guild, iterable?: Iterable<any>);
|
||||
public readonly channelCountWithoutThreads: number;
|
||||
public guild: Guild;
|
||||
@@ -2740,6 +2744,7 @@ declare module 'discord.js' {
|
||||
ANNOUNCEMENT_EDIT_LIMIT_EXCEEDED: 20022;
|
||||
CHANNEL_HIT_WRITE_RATELIMIT: 20028;
|
||||
CONTENT_NOT_ALLOWED: 20031;
|
||||
GUILD_PREMIUM_LEVEL_TOO_LOW: 20035;
|
||||
MAXIMUM_GUILDS: 30001;
|
||||
MAXIMUM_FRIENDS: 30002;
|
||||
MAXIMUM_PINS: 30003;
|
||||
@@ -3372,7 +3377,7 @@ declare module 'discord.js' {
|
||||
type?: number;
|
||||
}
|
||||
|
||||
type GuildChannelResolvable = Snowflake | GuildChannel;
|
||||
type GuildChannelResolvable = Snowflake | GuildChannel | ThreadChannel;
|
||||
|
||||
interface GuildChannelCreateOptions {
|
||||
permissionOverwrites?: OverwriteResolvable[] | Collection<Snowflake, OverwriteResolvable>;
|
||||
@@ -3466,7 +3471,10 @@ declare module 'discord.js' {
|
||||
| 'NEWS'
|
||||
| 'PARTNERED'
|
||||
| 'PREVIEW_ENABLED'
|
||||
| 'PRIVATE_THREADS'
|
||||
| 'RELAY_ENABLED'
|
||||
| 'SEVEN_DAY_THREAD_ARCHIVE'
|
||||
| 'THREE_DAY_THREAD_ARCHIVE'
|
||||
| 'TICKETED_EVENTS_ENABLED'
|
||||
| 'VANITY_URL'
|
||||
| 'VERIFIED'
|
||||
|
||||
Reference in New Issue
Block a user