/* eslint-disable jsdoc/check-param-names */ import { makeURLSearchParams, type REST, type RawFile, type RequestData } from '@discordjs/rest'; import { Routes } from 'discord-api-types/v10'; import type { RESTPatchAPIGuildVoiceStateCurrentMemberJSONBody, RESTPatchAPIGuildVoiceStateCurrentMemberResult, GuildMFALevel, GuildWidgetStyle, RESTGetAPIAuditLogQuery, RESTGetAPIAuditLogResult, RESTGetAPIAutoModerationRuleResult, RESTGetAPIAutoModerationRulesResult, RESTGetAPIGuildBansResult, RESTGetAPIGuildChannelsResult, RESTGetAPIGuildEmojiResult, RESTGetAPIGuildEmojisResult, RESTGetAPIGuildIntegrationsResult, RESTGetAPIGuildInvitesResult, RESTGetAPIGuildMemberResult, RESTGetAPIGuildMembersResult, RESTGetAPIGuildMembersQuery, RESTGetAPIGuildMembersSearchResult, RESTGetAPIGuildPreviewResult, RESTGetAPIGuildPruneCountResult, RESTGetAPIGuildResult, RESTGetAPIGuildRolesResult, RESTGetAPIGuildScheduledEventQuery, RESTGetAPIGuildScheduledEventResult, RESTGetAPIGuildScheduledEventsQuery, RESTGetAPIGuildScheduledEventsResult, RESTGetAPIGuildScheduledEventUsersQuery, RESTGetAPIGuildScheduledEventUsersResult, RESTGetAPIGuildStickerResult, RESTGetAPIGuildStickersResult, RESTGetAPIGuildTemplatesResult, RESTGetAPIGuildThreadsResult, RESTGetAPIGuildVanityUrlResult, RESTGetAPIGuildVoiceRegionsResult, RESTGetAPIGuildPruneCountQuery, RESTPostAPIGuildStickerFormDataBody, RESTPostAPIGuildStickerResult, RESTGetAPIGuildMembersSearchQuery, RESTGetAPIGuildWebhooksResult, RESTGetAPIGuildWelcomeScreenResult, RESTGetAPIGuildWidgetImageResult, RESTGetAPIGuildWidgetJSONResult, RESTGetAPITemplateResult, RESTPatchAPIAutoModerationRuleJSONBody, RESTPatchAPIGuildChannelPositionsJSONBody, RESTPatchAPIGuildEmojiJSONBody, RESTPatchAPIGuildEmojiResult, RESTPatchAPIGuildJSONBody, RESTPatchAPIGuildMemberJSONBody, RESTPatchAPIGuildMemberResult, RESTPatchAPIGuildResult, RESTPatchAPIGuildRoleJSONBody, RESTPatchAPIGuildRolePositionsJSONBody, RESTPatchAPIGuildRolePositionsResult, RESTPatchAPIGuildRoleResult, RESTPatchAPIGuildScheduledEventJSONBody, RESTPatchAPIGuildScheduledEventResult, RESTPatchAPIGuildStickerJSONBody, RESTPatchAPIGuildStickerResult, RESTPatchAPIGuildTemplateJSONBody, RESTPatchAPIGuildTemplateResult, RESTPatchAPIGuildVoiceStateUserJSONBody, RESTPatchAPIGuildWelcomeScreenJSONBody, RESTPatchAPIGuildWelcomeScreenResult, RESTPatchAPIGuildWidgetSettingsJSONBody, RESTPatchAPIGuildWidgetSettingsResult, RESTPostAPIAutoModerationRuleJSONBody, RESTPostAPIAutoModerationRuleResult, RESTPostAPIGuildChannelJSONBody, RESTPostAPIGuildChannelResult, RESTPostAPIGuildEmojiJSONBody, RESTPostAPIGuildEmojiResult, RESTPostAPIGuildPruneJSONBody, RESTPostAPIGuildRoleJSONBody, RESTPostAPIGuildRoleResult, RESTPostAPIGuildScheduledEventJSONBody, RESTPostAPIGuildScheduledEventResult, RESTPostAPIGuildsJSONBody, RESTPostAPIGuildsMFAResult, RESTPostAPIGuildsResult, RESTPostAPIGuildTemplatesResult, RESTPostAPITemplateCreateGuildJSONBody, RESTPutAPIGuildBanJSONBody, RESTPutAPIGuildTemplateSyncResult, Snowflake, } from 'discord-api-types/v10'; export class GuildsAPI { public constructor(private readonly rest: REST) {} /** * Fetches a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild} * @param guildId - The id of the guild * @param options - The options for fetching the guild */ public async get(guildId: string, { signal }: Pick = {}) { return this.rest.get(Routes.guild(guildId), { signal }) as Promise; } /** * Fetches a guild preview * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-preview} * @param guildId - The id of the guild to fetch the preview from * @param options - The options for fetching the guild preview */ public async getPreview(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildPreview(guildId), { signal, }) as Promise; } /** * Creates a guild * * @see {@link https://discord.com/developers/docs/resources/guild#create-guild} * @param body - The guild to create * @param options - The options for creating the guild */ public async create(body: RESTPostAPIGuildsJSONBody, { signal }: Pick = {}) { return this.rest.post(Routes.guilds(), { body, signal }) as Promise; } /** * Edits a guild * * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild} * @param guildId - The id of the guild to edit * @param body - The new guild data * @param options - The options for editing the guild */ public async edit( guildId: Snowflake, body: RESTPatchAPIGuildJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guild(guildId), { reason, body, signal, }) as Promise; } /** * Deletes a guild * * @see {@link https://discord.com/developers/docs/resources/guild#delete-guild} * @param guildId - The id of the guild to delete * @param options - The options for deleting this guild */ public async delete(guildId: Snowflake, { signal, reason }: Pick = {}) { await this.rest.delete(Routes.guild(guildId), { reason, signal }); } /** * Fetches all the members of a guild * * @see {@link https://discord.com/developers/docs/resources/guild#list-guild-members} * @param guildId - The id of the guild * @param query - The query to use when fetching the guild members * @param options - The options for fetching the guild members */ public async getMembers( guildId: Snowflake, query: RESTGetAPIGuildMembersQuery = {}, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildMembers(guildId), { query: makeURLSearchParams(query), signal, }) as Promise; } /** * Fetches a guild's channels * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-channels} * @param guildId - The id of the guild to fetch the channels from * @param options - The options for fetching the guild channels */ public async getChannels(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildChannels(guildId), { signal, }) as Promise; } /** * Creates a guild channel * * @see {@link https://discord.com/developers/docs/resources/guild#create-guild-channel} * @param guildId - The id of the guild to create the channel in * @param body - The data to create the new channel * @param options - The options for creating the guild channel */ public async createChannel( guildId: Snowflake, body: RESTPostAPIGuildChannelJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.post(Routes.guildChannels(guildId), { reason, body, signal, }) as Promise; } /** * Edits a guild channel's positions * * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-channel-positions} * @param guildId - The id of the guild to edit the channel positions from * @param body - The data to edit the channel positions with * @param options - The options for editing the guild channel positions */ public async setChannelPositions( guildId: Snowflake, body: RESTPatchAPIGuildChannelPositionsJSONBody, { reason, signal }: Pick = {}, ) { await this.rest.patch(Routes.guildChannels(guildId), { reason, body, signal }); } /** * Fetches the active threads in a guild * * @see {@link https://discord.com/developers/docs/resources/guild#list-active-guild-threads} * @param guildId - The id of the guild to fetch the active threads from * @param options - The options for fetching the active threads */ public async getActiveThreads(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildActiveThreads(guildId), { signal }) as Promise; } /** * Fetches a guild member ban * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-bans} * @param guildId - The id of the guild to fetch the ban from * @param options - The options for fetching the guild member ban */ public async getMemberBans(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildBans(guildId), { signal }) as Promise; } /** * Bans a user from a guild * * @see {@link https://discord.com/developers/docs/resources/guild#create-guild-ban} * @param guildId - The id of the guild to ban the member in * @param userId - The id of the user to ban * @param body - The payload for banning the user * @param options - The options for banning the user */ public async banUser( guildId: Snowflake, userId: Snowflake, body: RESTPutAPIGuildBanJSONBody = {}, { reason, signal }: Pick = {}, ) { await this.rest.put(Routes.guildBan(guildId, userId), { reason, body, signal }); } /** * Unbans a user from a guild * * @see {@link https://discord.com/developers/docs/resources/guild#remove-guild-ban} * @param guildId - The id of the guild to unban the member in * @param userId - The id of the user to unban * @param options - The options for unbanning the user */ public async unbanUser( guildId: Snowflake, userId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.delete(Routes.guildBan(guildId, userId), { reason, signal }); } /** * Gets all the roles in a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-roles} * @param guildId - The id of the guild to fetch the roles from * @param options - The options for fetching the guild roles */ public async getRoles(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildRoles(guildId), { signal }) as Promise; } /** * Creates a guild role * * @see {@link https://discord.com/developers/docs/resources/guild#create-guild-role} * @param guildId - The id of the guild to create the role in * @param body - The data to create the role with * @param options - The options for creating the guild role */ public async createRole( guildId: Snowflake, body: RESTPostAPIGuildRoleJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.post(Routes.guildRoles(guildId), { reason, body, signal }) as Promise; } /** * Sets role positions in a guild * * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-role-positions} * @param guildId - The id of the guild to set role positions for * @param body - The data for setting a role position * @param options - The options for setting role positions */ public async setRolePositions( guildId: Snowflake, body: RESTPatchAPIGuildRolePositionsJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildRoles(guildId), { reason, body, signal, }) as Promise; } /** * Edits a guild role * * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-role} * @param guildId - The id of the guild to edit the role in * @param roleId - The id of the role to edit * @param body - data for editing the role * @param options - The options for editing the guild role */ public async editRole( guildId: Snowflake, roleId: Snowflake, body: RESTPatchAPIGuildRoleJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildRole(guildId, roleId), { reason, body, signal, }) as Promise; } /** * Deletes a guild role * * @see {@link https://discord.com/developers/docs/resources/guild#delete-guild-role} * @param guildId - The id of the guild to delete the role in * @param roleId - The id of the role to delete * @param options - The options for deleting the guild role */ public async deleteRole( guildId: Snowflake, roleId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.delete(Routes.guildRole(guildId, roleId), { reason, signal }); } /** * Edits the multi-factor-authentication (MFA) level of a guild * * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-mfa-level} * @param guildId - The id of the guild to edit the MFA level for * @param level - The new MFA level * @param options - The options for editing the MFA level */ public async editMFALevel( guildId: Snowflake, level: GuildMFALevel, { reason, signal }: Pick = {}, ) { return this.rest.post(Routes.guildMFA(guildId), { reason, signal, body: { mfa_level: level }, }) as Promise; } /** * Fetch the number of members that can be pruned from a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-prune-count} * @param guildId - The id of the guild to fetch the number of pruned members from * @param query - The query options for fetching the number of pruned members * @param options - The options for fetching the number of pruned members */ public async getPruneCount( guildId: Snowflake, query: RESTGetAPIGuildPruneCountQuery = {}, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildPrune(guildId), { signal, query: makeURLSearchParams(query), }) as Promise; } /** * Prunes members in a guild * * @see {@link https://discord.com/developers/docs/resources/guild#begin-guild-prune} * @param guildId - The id of the guild to prune members in * @param body - The options for pruning members * @param options - The options for initiating the prune */ public async beginPrune( guildId: Snowflake, body: RESTPostAPIGuildPruneJSONBody = {}, { reason, signal }: Pick = {}, ) { return this.rest.post(Routes.guildPrune(guildId), { body, reason, signal, }) as Promise; } /** * Fetches voice regions for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-voice-regions} * @param guildId - The id of the guild to fetch the voice regions from * @param options - The options for fetching the voice regions */ public async getVoiceRegions(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildVoiceRegions(guildId), { signal }) as Promise; } /** * Fetches the invites for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-invites} * @param guildId - The id of the guild to fetch the invites from * @param options - The options for fetching the invites */ public async getInvites(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildInvites(guildId), { signal }) as Promise; } /** * Fetches the integrations for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-integrations} * @param guildId - The id of the guild to fetch the integrations from * @param options - The options for fetching the integrations */ public async getIntegrations(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildIntegrations(guildId), { signal }) as Promise; } /** * Deletes an integration from a guild * * @see {@link https://discord.com/developers/docs/resources/guild#delete-guild-integration} * @param guildId - The id of the guild to delete the integration from * @param integrationId - The id of the integration to delete * @param options - The options for deleting the integration */ public async deleteIntegration( guildId: Snowflake, integrationId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.delete(Routes.guildIntegration(guildId, integrationId), { reason, signal }); } /** * Fetches the widget settings for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-widget-settings} * @param guildId - The id of the guild to fetch the widget settings from * @param options - The options for fetching the widget settings */ public async getWidgetSettings(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildWidgetSettings(guildId), { signal }) as Promise; } /** * Edits the widget settings for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-widget} * @param guildId - The id of the guild to edit the widget settings from * @param body - The new widget settings data * @param options - The options for editing the widget settings */ public async editWidgetSettings( guildId: Snowflake, body: RESTPatchAPIGuildWidgetSettingsJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildWidgetSettings(guildId), { reason, body, signal, }) as Promise; } /** * Fetches the widget for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-widget} * @param guildId - The id of the guild to fetch the widget from * @param options - The options for fetching the widget */ public async getWidget(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildWidgetJSON(guildId), { signal }) as Promise; } /** * Fetches the vanity url for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-vanity-url} * @param guildId - The id of the guild to fetch the vanity url from * @param options - The options for fetching the vanity url */ public async getVanityURL(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildVanityUrl(guildId), { signal }) as Promise; } /** * Fetches the widget image for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-widget-image} * @param guildId - The id of the guild to fetch the widget image from * @param style - The style of the widget image * @param options - The options for fetching the widget image */ public async getWidgetImage( guildId: Snowflake, style?: GuildWidgetStyle, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildWidgetImage(guildId), { query: makeURLSearchParams({ style }), signal, }) as Promise; } /** * Fetches the welcome screen for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-welcome-screen} * @param guildId - The id of the guild to fetch the welcome screen from * @param options - The options for fetching the welcome screen */ public async getWelcomeScreen(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildWelcomeScreen(guildId), { signal }) as Promise; } /** * Edits the welcome screen for a guild * * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-welcome-screen} * @param guildId - The id of the guild to edit the welcome screen for * @param body - The new welcome screen data * @param options - The options for editing the welcome screen */ public async editWelcomeScreen( guildId: Snowflake, body?: RESTPatchAPIGuildWelcomeScreenJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildWelcomeScreen(guildId), { reason, body, signal, }) as Promise; } /** * Edits a user's voice state in a guild * * @see {@link https://discord.com/developers/docs/resources/guild#modify-user-voice-state} * @param guildId - The id of the guild to edit the current user's voice state in * @param userId - The id of the user to edit the voice state for * @param body - The data for editing the voice state * @param options - The options for editing the voice state */ public async editUserVoiceState( guildId: Snowflake, userId: Snowflake, body: RESTPatchAPIGuildVoiceStateUserJSONBody, { reason, signal }: Pick = {}, ) { await this.rest.patch(Routes.guildVoiceState(guildId, userId), { reason, body, signal }); } /** * Fetches all emojis for a guild * * @see {@link https://discord.com/developers/docs/resources/emoji#list-guild-emojis} * @param guildId - The id of the guild to fetch the emojis from * @param options - The options for fetching the emojis */ public async getEmojis(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildEmojis(guildId), { signal }) as Promise; } /** * Fetches an emoji for a guild * * @see {@link https://discord.com/developers/docs/resources/emoji#get-guild-emoji} * @param guildId - The id of the guild to fetch the emoji from * @param emojiId - The id of the emoji to fetch * @param options - The options for fetching the emoji */ public async getEmoji(guildId: Snowflake, emojiId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildEmoji(guildId, emojiId), { signal }) as Promise; } /** * Creates a new emoji for a guild * * @see {@link https://discord.com/developers/docs/resources/emoji#create-guild-emoji} * @param guildId - The id of the guild to create the emoji from * @param body - The data for creating the emoji * @param options - The options for creating the emoji */ public async createEmoji( guildId: Snowflake, body: RESTPostAPIGuildEmojiJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.post(Routes.guildEmojis(guildId), { reason, body, signal, }) as Promise; } /** * Edits an emoji for a guild * * @see {@link https://discord.com/developers/docs/resources/emoji#modify-guild-emoji} * @param guildId - The id of the guild to edit the emoji from * @param emojiId - The id of the emoji to edit * @param body - The data for editing the emoji * @param options - The options for editing the emoji */ public async editEmoji( guildId: Snowflake, emojiId: Snowflake, body: RESTPatchAPIGuildEmojiJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildEmoji(guildId, emojiId), { reason, body, signal, }) as Promise; } /** * Deletes an emoji for a guild * * @see {@link https://discord.com/developers/docs/resources/emoji#delete-guild-emoji} * @param guildId - The id of the guild to delete the emoji from * @param emojiId - The id of the emoji to delete * @param options - The options for deleting the emoji */ public async deleteEmoji( guildId: Snowflake, emojiId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.delete(Routes.guildEmoji(guildId, emojiId), { reason, signal }); } /** * Fetches all scheduled events for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#list-scheduled-events-for-guild} * @param guildId - The id of the guild to fetch the scheduled events from * @param query - The query options for fetching the scheduled events * @param options - The options for fetching the scheduled events */ public async getScheduledEvents( guildId: Snowflake, query: RESTGetAPIGuildScheduledEventsQuery = {}, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildScheduledEvents(guildId), { query: makeURLSearchParams(query), signal, }) as Promise; } /** * Creates a new scheduled event for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#create-guild-scheduled-event} * @param guildId - The id of the guild to create the scheduled event from * @param body - The data to create the event with * @param options - The options for creating the scheduled event */ public async createScheduledEvent( guildId: Snowflake, body: RESTPostAPIGuildScheduledEventJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.post(Routes.guildScheduledEvents(guildId), { reason, body, signal, }) as Promise; } /** * Fetches a scheduled event for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#get-guild-scheduled-event} * @param guildId - The id of the guild to fetch the scheduled event from * @param eventId - The id of the scheduled event to fetch * @param query - The options for fetching the scheduled event * @param options - The options for fetching the scheduled event */ public async getScheduledEvent( guildId: Snowflake, eventId: Snowflake, query: RESTGetAPIGuildScheduledEventQuery = {}, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildScheduledEvent(guildId, eventId), { query: makeURLSearchParams(query), signal, }) as Promise; } /** * Edits a scheduled event for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#modify-guild-scheduled-event} * @param guildId - The id of the guild to edit the scheduled event from * @param eventId - The id of the scheduled event to edit * @param body - The new event data * @param options - The options for editing the scheduled event */ public async editScheduledEvent( guildId: Snowflake, eventId: Snowflake, body: RESTPatchAPIGuildScheduledEventJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildScheduledEvent(guildId, eventId), { reason, body, signal, }) as Promise; } /** * Deletes a scheduled event for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#delete-guild-scheduled-event} * @param guildId - The id of the guild to delete the scheduled event from * @param eventId - The id of the scheduled event to delete * @param options - The options for deleting the scheduled event */ public async deleteScheduledEvent( guildId: Snowflake, eventId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.delete(Routes.guildScheduledEvent(guildId, eventId), { reason, signal }); } /** * Gets all users that are interested in a scheduled event * * @see {@link https://discord.com/developers/docs/resources/guild-scheduled-event#get-guild-scheduled-event-users} * @param guildId - The id of the guild to fetch the scheduled event users from * @param eventId - The id of the scheduled event to fetch the users for * @param query - The options for fetching the scheduled event users * @param options - The options for fetching the scheduled event users */ public async getScheduledEventUsers( guildId: Snowflake, eventId: Snowflake, query: RESTGetAPIGuildScheduledEventUsersQuery = {}, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildScheduledEventUsers(guildId, eventId), { query: makeURLSearchParams(query), signal, }) as Promise; } /** * Fetches all the templates for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-template#get-guild-templates} * @param guildId - The id of the guild to fetch the templates from * @param options - The options for fetching the templates */ public async getTemplates(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildTemplates(guildId), { signal }) as Promise; } /** * Syncs a template for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-template#sync-guild-template} * @param guildId - The id of the guild to sync the template from * @param templateCode - The code of the template to sync * @param options - The options for syncing the template */ public async syncTemplate(guildId: Snowflake, templateCode: string, { signal }: Pick = {}) { return this.rest.put(Routes.guildTemplate(guildId, templateCode), { signal, }) as Promise; } /** * Edits a template for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-template#modify-guild-template} * @param guildId - The id of the guild to edit the template from * @param templateCode - The code of the template to edit * @param body - The data for editing the template * @param options - The options for editing the template */ public async editTemplate( guildId: Snowflake, templateCode: string, body: RESTPatchAPIGuildTemplateJSONBody, { signal }: Pick = {}, ) { return this.rest.patch(Routes.guildTemplate(guildId, templateCode), { body, signal, }) as Promise; } /** * Deletes a template for a guild * * @see {@link https://discord.com/developers/docs/resources/guild-template#delete-guild-template} * @param guildId - The id of the guild to delete the template from * @param templateCode - The code of the template to delete * @param options - The options for deleting the template */ public async deleteTemplate(guildId: Snowflake, templateCode: string, { signal }: Pick = {}) { await this.rest.delete(Routes.guildTemplate(guildId, templateCode), { signal }); } /** * Fetches all the stickers for a guild * * @see {@link https://discord.com/developers/docs/resources/sticker#list-guild-stickers} * @param guildId - The id of the guild to fetch the stickers from * @param options - The options for fetching the stickers */ public async getStickers(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildStickers(guildId), { signal }) as Promise; } /** * Fetches a sticker for a guild * * @see {@link https://discord.com/developers/docs/resources/sticker#get-guild-sticker} * @param guildId - The id of the guild to fetch the sticker from * @param stickerId - The id of the sticker to fetch * @param options - The options for fetching the sticker */ public async getSticker(guildId: Snowflake, stickerId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildSticker(guildId, stickerId), { signal }) as Promise; } /** * Creates a sticker for a guild * * @see {@link https://discord.com/developers/docs/resources/sticker#create-guild-sticker} * @param guildId - The id of the guild to create the sticker for * @param body - The data for creating the sticker * @param options - The options for creating the sticker */ public async createSticker( guildId: Snowflake, { file, ...body }: Omit & { file: RawFile }, { reason, signal }: Pick = {}, ) { const fileData = { ...file, key: 'file' }; return this.rest.post(Routes.guildStickers(guildId), { appendToFormData: true, body, files: [fileData], reason, signal, }) as Promise; } /** * Edits a sticker for a guild * * @see {@link https://discord.com/developers/docs/resources/sticker#modify-guild-sticker} * @param guildId - The id of the guild to edit the sticker from * @param stickerId - The id of the sticker to edit * @param body - The data for editing the sticker * @param options - The options for editing the sticker */ public async editSticker( guildId: Snowflake, stickerId: Snowflake, body: RESTPatchAPIGuildStickerJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildSticker(guildId, stickerId), { reason, body, signal, }) as Promise; } /** * Deletes a sticker for a guild * * @see {@link https://discord.com/developers/docs/resources/sticker#delete-guild-sticker} * @param guildId - The id of the guild to delete the sticker from * @param stickerId - The id of the sticker to delete * @param options - The options for deleting the sticker */ public async deleteSticker( guildId: Snowflake, stickerId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.delete(Routes.guildSticker(guildId, stickerId), { reason, signal }); } /** * Fetches the audit logs for a guild * * @see {@link https://discord.com/developers/docs/resources/audit-log#get-guild-audit-log} * @param guildId - The id of the guild to fetch the audit logs from * @param query - The query options for fetching the audit logs * @param options - The options for fetching the audit logs */ public async getAuditLogs( guildId: Snowflake, query: RESTGetAPIAuditLogQuery = {}, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildAuditLog(guildId), { query: makeURLSearchParams(query), signal, }) as Promise; } /** * Fetches all auto moderation rules for a guild * * @see {@link https://discord.com/developers/docs/resources/auto-moderation#list-auto-moderation-rules-for-guild} * @param guildId - The id of the guild to fetch the auto moderation rules from * @param options - The options for fetching the auto moderation rules */ public async getAutoModerationRules(guildId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildAutoModerationRules(guildId), { signal, }) as Promise; } /** * Fetches an auto moderation rule for a guild * * @see {@link https://discord.com/developers/docs/resources/auto-moderation#get-auto-moderation-rule} * @param guildId - The id of the guild to fetch the auto moderation rule from * @param ruleId - The id of the auto moderation rule to fetch * @param options - The options for fetching the auto moderation rule */ public async getAutoModerationRule( guildId: Snowflake, ruleId: Snowflake, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildAutoModerationRule(guildId, ruleId), { signal, }) as Promise; } /** * Creates a new auto moderation rule for a guild * * @see {@link https://discord.com/developers/docs/resources/auto-moderation#create-auto-moderation-rule} * @param guildId - The id of the guild to create the auto moderation rule from * @param body - The data for creating the auto moderation rule * @param options - The options for creating the auto moderation rule */ public async createAutoModerationRule( guildId: Snowflake, body: RESTPostAPIAutoModerationRuleJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.post(Routes.guildAutoModerationRules(guildId), { reason, body, signal, }) as Promise; } /** * Edits an auto moderation rule for a guild * * @see {@link https://discord.com/developers/docs/resources/auto-moderation#modify-auto-moderation-rule} * @param guildId - The id of the guild to edit the auto moderation rule from * @param ruleId - The id of the auto moderation rule to edit * @param body - The data for editing the auto moderation rule * @param options - The options for editing the auto moderation rule */ public async editAutoModerationRule( guildId: Snowflake, ruleId: Snowflake, body: RESTPatchAPIAutoModerationRuleJSONBody, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildAutoModerationRule(guildId, ruleId), { reason, body, signal, }) as Promise; } /** * Deletes an auto moderation rule for a guild * * @see {@link https://discord.com/developers/docs/resources/auto-moderation#delete-auto-moderation-rule} * @param guildId - The id of the guild to delete the auto moderation rule from * @param ruleId - The id of the auto moderation rule to delete * @param options - The options for deleting the auto moderation rule */ public async deleteAutoModerationRule( guildId: Snowflake, ruleId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.delete(Routes.guildAutoModerationRule(guildId, ruleId), { reason, signal }); } /** * Fetches a guild member * * @see {@link https://discord.com/developers/docs/resources/guild#get-guild-member} * @param guildId - The id of the guild * @param userId - The id of the user * @param options - The options for fetching the guild member */ public async getMember(guildId: Snowflake, userId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.guildMember(guildId, userId), { signal }) as Promise; } /** * Searches for guild members * * @see {@link https://discord.com/developers/docs/resources/guild#search-guild-members} * @param guildId - The id of the guild to search in * @param query - The query to search for * @param options - The options for searching for guild members */ public async searchForMembers( guildId: Snowflake, query: RESTGetAPIGuildMembersSearchQuery, { signal }: Pick = {}, ) { return this.rest.get(Routes.guildMembersSearch(guildId), { query: makeURLSearchParams(query), signal, }) as Promise; } /** * Edits a guild member * * @see {@link https://discord.com/developers/docs/resources/guild#modify-guild-member} * @param guildId - The id of the guild * @param userId - The id of the user * @param body - The data to use when editing the guild member * @param options - The options for editing the guild member */ public async editMember( guildId: Snowflake, userId: Snowflake, body: RESTPatchAPIGuildMemberJSONBody = {}, { reason, signal }: Pick = {}, ) { return this.rest.patch(Routes.guildMember(guildId, userId), { reason, body, signal, }) as Promise; } /** * Adds a role to a guild member * * @see {@link https://discord.com/developers/docs/resources/guild#add-guild-member-role} * @param guildId - The id of the guild * @param userId - The id of the user * @param roleId - The id of the role * @param options - The options for adding a role to a guild member */ public async addRoleToMember( guildId: Snowflake, userId: Snowflake, roleId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.put(Routes.guildMemberRole(guildId, userId, roleId), { reason, signal }); } /** * Removes a role from a guild member * * @see {@link https://discord.com/developers/docs/resources/guild#remove-guild-member-role} * @param guildId - The id of the guild * @param userId - The id of the user * @param roleId - The id of the role * @param options - The options for removing a role from a guild member */ public async removeRoleFromMember( guildId: Snowflake, userId: Snowflake, roleId: Snowflake, { reason, signal }: Pick = {}, ) { await this.rest.delete(Routes.guildMemberRole(guildId, userId, roleId), { reason, signal }); } /** * Fetches a guild template * * @see {@link https://discord.com/developers/docs/resources/guild-template#get-guild-template} * @param templateCode - The code of the template * @param options - The options for fetching the guild template */ public async getTemplate(templateCode: string, { signal }: Pick = {}) { return this.rest.get(Routes.template(templateCode), { signal }) as Promise; } /** * Creates a new template * * @see {@link https://discord.com/developers/docs/resources/guild-template#create-guild-template} * @param templateCode - The code of the template * @param body - The data to use when creating the template * @param options - The options for creating the template */ public async createTemplate( templateCode: string, body: RESTPostAPITemplateCreateGuildJSONBody, { signal }: Pick = {}, ) { return this.rest.post(Routes.template(templateCode), { body, signal }) as Promise; } /** * Fetches webhooks for a guild * * @see {@link https://discord.com/developers/docs/resources/webhook#get-guild-webhooks} * @param id - The id of the guild */ public async getWebhooks(id: Snowflake) { return this.rest.get(Routes.guildWebhooks(id)) as Promise; } /** * Sets the voice state for the current user * * @see {@link https://discord.com/developers/docs/resources/guild#modify-current-user-voice-state} * @param guildId - The id of the guild * @param body - The options to use when setting the voice state */ public async setVoiceState(guildId: Snowflake, body: RESTPatchAPIGuildVoiceStateCurrentMemberJSONBody = {}) { return this.rest.patch(Routes.guildVoiceState(guildId, '@me'), { body, }) as Promise; } }