diff --git a/packages/biscuit/Routes.ts b/packages/biscuit/Routes.ts index 5a0e632..c87e8a4 100644 --- a/packages/biscuit/Routes.ts +++ b/packages/biscuit/Routes.ts @@ -448,3 +448,8 @@ export function GUILD_WIDGET(guildId: Snowflake, options: GetWidget = { get: 'se return url; } + +/** @link https://discord.com/developers/docs/resources/guild#get-guild-voice-regions */ +export function GUILD_VOICE_REGIONS(guildId: string): string { + return `/guilds/${guildId}/regions`; +} \ No newline at end of file diff --git a/packages/biscuit/structures/guilds.ts b/packages/biscuit/structures/guilds.ts index 6683a62..32c02cf 100644 --- a/packages/biscuit/structures/guilds.ts +++ b/packages/biscuit/structures/guilds.ts @@ -10,6 +10,7 @@ import type { DiscordMemberWithUser, DiscordOverwrite, DiscordRole, + DiscordVoiceRegion, ExplicitContentFilterLevels, GuildNsfwLevel, MakeRequired, @@ -994,6 +995,19 @@ export class Guild extends BaseGuild implements Model { return new Guild(this.session, guild); } + + /** + * fetchVoiceRegions gets the voice regions available for the guild. + * @see {@link DiscordVoiceRegion} + * @returns Promise that resolves to an array of voice regions. + */ + async fetchVoiceRegions(): Promise { + return await this.session.rest.runMethod( + this.session.rest, + 'GET', + Routes.GUILD_VOICE_REGIONS(this.id), + ) + } } export default Guild; diff --git a/packages/cache/guilds.ts b/packages/cache/guilds.ts index 5fa232d..7c8fbf1 100644 --- a/packages/cache/guilds.ts +++ b/packages/cache/guilds.ts @@ -32,7 +32,7 @@ export function guildBootstrapper(cache: SessionCache, guild: DiscordGuild) { const channels = new Collection( cache.session, guild.channels?.map((data) => { - const obj = Object.assign(ChannelFactory.from(cache.session, data), { + const obj = data && Object.assign(ChannelFactory.from(cache.session, data), { messages: new Map(), });