diff --git a/src/structures/Channel.js b/src/structures/Channel.js index cec50c7bf162..1832237ae77f 100644 --- a/src/structures/Channel.js +++ b/src/structures/Channel.js @@ -10,6 +10,7 @@ let StoreChannel; let TextChannel; let ThreadChannel; let VoiceChannel; +let DirectoryChannel; const { ChannelTypes, ThreadChannelTypes, VoiceBasedChannelTypes } = require('../util/Constants'); const SnowflakeUtil = require('../util/SnowflakeUtil'); @@ -164,6 +165,14 @@ class Channel extends Base { return ThreadChannelTypes.includes(this.type); } + /** + * Indicates whether this channel is a {@link DirectoryChannel} + * @returns {boolean} + */ + isDirectory() { + return this.type === 'GUILD_DIRECTORY'; + } + static create(client, data, guild, { allowUnknownGuild, fromInteraction } = {}) { CategoryChannel ??= require('./CategoryChannel'); DMChannel ??= require('./DMChannel'); @@ -173,6 +182,7 @@ class Channel extends Base { TextChannel ??= require('./TextChannel'); ThreadChannel ??= require('./ThreadChannel'); VoiceChannel ??= require('./VoiceChannel'); + DirectoryChannel ??= require('./DirectoryChannel'); let channel; if (!data.guild_id && !guild) { @@ -218,6 +228,10 @@ class Channel extends Base { if (!allowUnknownGuild) channel.parent?.threads.cache.set(channel.id, channel); break; } + + case ChannelTypes.GUILD_DIRECTORY: + channel = new DirectoryChannel(client, data); + break; } if (channel && !allowUnknownGuild) guild.channels?.cache.set(channel.id, channel); } diff --git a/src/structures/DirectoryChannel.js b/src/structures/DirectoryChannel.js new file mode 100644 index 000000000000..faf2e3d04eea --- /dev/null +++ b/src/structures/DirectoryChannel.js @@ -0,0 +1,19 @@ +'use strict'; + +const { Channel } = require('./Channel'); + +/** + * Represents a channel that displays a directory of guilds + */ +class DirectoryChannel extends Channel { + _patch(data) { + super._patch(data); + /** + * The channel's name + * @type {string} + */ + this.name = data.name; + } +} + +module.exports = DirectoryChannel; diff --git a/src/util/Constants.js b/src/util/Constants.js index 396811d31aa7..6f99b3374e9e 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -529,6 +529,7 @@ exports.ActivityTypes = createEnum(['PLAYING', 'STREAMING', 'LISTENING', 'WATCHI * * `GUILD_PUBLIC_THREAD` - a guild text channel's public thread channel * * `GUILD_PRIVATE_THREAD` - a guild text channel's private thread channel * * `GUILD_STAGE_VOICE` - a guild stage voice channel + * * `GUILD_DIRECTORY` - the channel in a hub containing guilds * * `UNKNOWN` - a generic channel of unknown type, could be Channel or GuildChannel * @typedef {string} ChannelType * @see {@link https://discord.com/developers/docs/resources/channel#channel-object-channel-types} @@ -547,6 +548,7 @@ exports.ChannelTypes = createEnum([ 'GUILD_PUBLIC_THREAD', 'GUILD_PRIVATE_THREAD', 'GUILD_STAGE_VOICE', + 'GUILD_DIRECTORY', ]); /** diff --git a/typings/enums.d.ts b/typings/enums.d.ts index 1dd883576a53..67e0fa84f30b 100644 --- a/typings/enums.d.ts +++ b/typings/enums.d.ts @@ -48,6 +48,7 @@ export const enum ChannelTypes { GUILD_PUBLIC_THREAD = 11, GUILD_PRIVATE_THREAD = 12, GUILD_STAGE_VOICE = 13, + GUILD_DIRECTORY = 14, } export const enum MessageTypes { diff --git a/typings/index.d.ts b/typings/index.d.ts index b3d013ecef17..738296ea624e 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -523,6 +523,7 @@ export type CategoryChannelTypes = ExcludeEnum< | 'GUILD_NEWS_THREAD' | 'GUILD_PRIVATE_THREAD' | 'GUILD_CATEGORY' + | 'GUILD_DIRECTORY' >; export class CategoryChannel extends GuildChannel { @@ -557,6 +558,7 @@ export abstract class Channel extends Base { public isText(): this is TextBasedChannel; public isVoice(): this is BaseGuildVoiceChannel; public isThread(): this is ThreadChannel; + public isDirectory(): this is DirectoryChannel; public toString(): ChannelMention; } @@ -2237,6 +2239,8 @@ export class StageChannel extends BaseGuildVoiceChannel { public setTopic(topic: string): Promise; } +export class DirectoryChannel extends Channel {} + export class StageInstance extends Base { private constructor(client: Client, data: RawStageInstanceData, channel: StageChannel); public id: Snowflake;