feat(interactions): add launchActivity method (#10646)

* feat(interactions): add launchActivity method

* chore: suggestion

Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>

* chore: suggestion

Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>

* fix: overload and add tests

* chore: wording

* chore: wording

* chore: spacing

---------

Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
Naiyar
2025-01-24 15:11:18 +06:00
committed by GitHub
parent 3d85d96f08
commit a3fa1a8dcd
2 changed files with 81 additions and 0 deletions

View File

@@ -131,4 +131,19 @@ describe('Interaction with_response overloads.', () => {
}),
);
});
test('Launch activity returns undefined.', () => {
assertType<Promise<undefined>>(api.interactions.launchActivity(SNOWFLAKE, TOKEN, { with_response: false }));
assertType<Promise<undefined>>(api.interactions.launchActivity(SNOWFLAKE, TOKEN));
});
test('Launch activity returns RESTPostAPIInteractionCallbackWithResponseResult.', () =>
assertType<Promise<RESTPostAPIInteractionCallbackWithResponseResult>>(
api.interactions.launchActivity(SNOWFLAKE, TOKEN, { with_response: true }),
));
test('Launch activity returns either RESTPostAPIInteractionCallbackWithResponseResult or undefined.', () =>
assertType<Promise<RESTPostAPIInteractionCallbackWithResponseResult | undefined>>(
api.interactions.launchActivity(SNOWFLAKE, TOKEN, { with_response: boolValue }),
));
});

View File

@@ -525,4 +525,70 @@ export class InteractionsAPI {
return with_response ? response : undefined;
}
/**
* Launches an activity and returns an interaction callback object
*
* @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#create-interaction-response}
* @param interactionId - The id of the interaction
* @param interactionToken - The token of the interaction
* @param body - The callback data for launching the activity
* @param options - The options for launching the activity
*/
public async launchActivity(
interactionId: Snowflake,
interactionToken: string,
body: RESTPostAPIInteractionCallbackQuery & { with_response: true },
options?: Pick<RequestData, 'signal'>,
): Promise<RESTPostAPIInteractionCallbackWithResponseResult>;
/**
* Launches an activity
*
* @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#create-interaction-response}
* @param interactionId - The id of the interaction
* @param interactionToken - The token of the interaction
* @param body - The callback data for launching the activity
* @param options - The options for launching the activity
*/
public async launchActivity(
interactionId: Snowflake,
interactionToken: string,
body?: RESTPostAPIInteractionCallbackQuery & { with_response?: false },
options?: Pick<RequestData, 'signal'>,
): Promise<undefined>;
/**
* Launches an activity
*
* @see {@link https://discord.com/developers/docs/interactions/receiving-and-responding#create-interaction-response}
* @param interactionId - The id of the interaction
* @param interactionToken - The token of the interaction
* @param body - The callback data for launching the activity
* @param options - The options for launching the activity
*/
public async launchActivity(
interactionId: Snowflake,
interactionToken: string,
body?: RESTPostAPIInteractionCallbackQuery,
options?: Pick<RequestData, 'signal'>,
): Promise<RESTPostAPIInteractionCallbackWithResponseResult | undefined>;
public async launchActivity(
interactionId: Snowflake,
interactionToken: string,
{ with_response }: RESTPostAPIInteractionCallbackQuery = {},
{ signal }: Pick<RequestData, 'signal'> = {},
) {
const response = await this.rest.post(Routes.interactionCallback(interactionId, interactionToken), {
query: makeURLSearchParams({ with_response }),
auth: false,
body: {
type: InteractionResponseType.LaunchActivity,
},
signal,
});
return with_response ? response : undefined;
}
}