Skip to content

Commit

Permalink
feat(api): add stage instances (#9578)
Browse files Browse the repository at this point in the history
* feat(core): add stage instances

* chore: use one import

* Apply suggestions from code review

Co-authored-by: Aura Román <[email protected]>

* chore: requested changes

Co-authored-by: David Malchin <[email protected]>
Co-authored-by: Jiralite <[email protected]>

* Apply suggestions from code review

Co-authored-by: David Malchin <[email protected]>
Co-authored-by: Jiralite <[email protected]>

---------

Co-authored-by: Aura Román <[email protected]>
Co-authored-by: David Malchin <[email protected]>
Co-authored-by: Jiralite <[email protected]>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
  • Loading branch information
5 people authored May 19, 2023
1 parent 1c4a12c commit 985def3
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
5 changes: 5 additions & 0 deletions packages/core/src/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { InteractionsAPI } from './interactions.js';
import { InvitesAPI } from './invite.js';
import { OAuth2API } from './oauth2.js';
import { RoleConnectionsAPI } from './roleConnections.js';
import { StageInstancesAPI } from './stageInstances.js';
import { StickersAPI } from './sticker.js';
import { ThreadsAPI } from './thread.js';
import { UsersAPI } from './user.js';
Expand All @@ -19,6 +20,7 @@ export * from './interactions.js';
export * from './invite.js';
export * from './oauth2.js';
export * from './roleConnections.js';
export * from './stageInstances.js';
export * from './sticker.js';
export * from './thread.js';
export * from './user.js';
Expand All @@ -40,6 +42,8 @@ export class API {

public readonly roleConnections: RoleConnectionsAPI;

public readonly stageInstances: StageInstancesAPI;

public readonly stickers: StickersAPI;

public readonly threads: ThreadsAPI;
Expand All @@ -57,6 +61,7 @@ export class API {
this.invites = new InvitesAPI(rest);
this.roleConnections = new RoleConnectionsAPI(rest);
this.oauth2 = new OAuth2API(rest);
this.stageInstances = new StageInstancesAPI(rest);
this.stickers = new StickersAPI(rest);
this.threads = new ThreadsAPI(rest);
this.users = new UsersAPI(rest);
Expand Down
76 changes: 76 additions & 0 deletions packages/core/src/api/stageInstances.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/* eslint-disable jsdoc/check-param-names */

import type { RequestData, REST } from '@discordjs/rest';
import {
type Snowflake,
type RESTGetAPIStageInstanceResult,
type RESTPatchAPIStageInstanceJSONBody,
type RESTPatchAPIStageInstanceResult,
type RESTPostAPIStageInstanceJSONBody,
type RESTPostAPIStageInstanceResult,
Routes,
} from 'discord-api-types/v10';

export class StageInstancesAPI {
public constructor(private readonly rest: REST) {}

/**
* Creates a new stage instance
*
* @see {@link https://discord.com/developers/docs/resources/stage-instance#get-stage-instance}
* @param body - The data to use when creating the new stage instance
* @param options - The options for creating the new stage instance
*/
public async create(
body: RESTPostAPIStageInstanceJSONBody,
{ reason, signal }: Pick<RequestData, 'reason' | 'signal'> = {},
) {
return this.rest.post(Routes.stageInstances(), {
body,
reason,
signal,
}) as Promise<RESTPostAPIStageInstanceResult>;
}

/**
* Fetches a stage instance
*
* @see {@link https://discord.com/developers/docs/resources/stage-instance#get-stage-instance}
* @param channelId - The id of the channel
* @param options - The options for fetching the stage instance
*/
public async get(channelId: Snowflake, { signal }: Pick<RequestData, 'signal'> = {}) {
return this.rest.get(Routes.stageInstance(channelId), { signal }) as Promise<RESTGetAPIStageInstanceResult>;
}

/**
* Edits a stage instance
*
* @see {@link https://discord.com/developers/docs/resources/stage-instance#modify-stage-instance}
* @param channelId - The id of the channel
* @param body - The new stage instance data
* @param options - The options for editing the stage instance
*/
public async edit(
channelId: Snowflake,
body: RESTPatchAPIStageInstanceJSONBody,
{ reason, signal }: Pick<RequestData, 'reason' | 'signal'> = {},
) {
return this.rest.patch(Routes.stageInstance(channelId), {
body,
reason,
signal,
}) as Promise<RESTPatchAPIStageInstanceResult>;
}

/**
* Deletes a stage instance
*
* @see {@link https://discord.com/developers/docs/resources/stage-instance#delete-stage-instance}
* @param channelId - The id of the channel
* @param options - The options for deleting the stage instance
*/
public async delete(channelId: Snowflake, { reason, signal }: Pick<RequestData, 'reason' | 'signal'> = {}) {
await this.rest.delete(Routes.stageInstance(channelId), { reason, signal });
}
}

0 comments on commit 985def3

Please sign in to comment.