Skip to content

Commit

Permalink
feat(Interactions): add Slash Command Permissions
Browse files Browse the repository at this point in the history
  • Loading branch information
vladfrangu committed Apr 10, 2021
1 parent 5d35f61 commit f517f35
Show file tree
Hide file tree
Showing 6 changed files with 250 additions and 2 deletions.
66 changes: 66 additions & 0 deletions deno/payloads/v8/interactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,32 @@ import type { APIGuildMember, APIPartialChannel, APIRole, APIUser, MessageFlags
* https://discord.com/developers/docs/interactions/slash-commands#applicationcommand
*/
export interface APIApplicationCommand {
/**
* Unique id of the command
*/
id: Snowflake;
/**
* Unique id of the parent application
*/
application_id: Snowflake;
/**
* 1-32 character name matching `^[\w-]{1,32}$`
*/
name: string;
/**
* 1-100 character description
*/
description: string;
/**
* The parameters for the command
*/
options?: APIApplicationCommandOption[];
/**
* Whether the command is enabled by default when the app is added to a guild
*
* If missing, this property should be assumed as `true`
*/
default_permissions?: boolean;
}

interface APIApplicationCommandOptionBase {
Expand Down Expand Up @@ -157,6 +178,51 @@ export enum InteractionType {
ApplicationCommand,
}

/**
* https://discord.com/developers/docs/interactions/slash-commands#guildapplicationcommandpermissions
*/
export interface APIGuildApplicationCommandPermissions {
/**
* The id of the command
*/
id: Snowflake;
/**
* The id of the application the command belongs to
*/
application_id: Snowflake;
/**
* The id of the guild
*/
guild_id: Snowflake;
/**
* The permissions for the command in the guild
*/
permissions: APIApplicationCommandPermission[];
}

/**
* https://discord.com/developers/docs/interactions/slash-commands#applicationcommandpermissions
*/
export interface APIApplicationCommandPermission {
/**
* The id of the role or user
*/
id: Snowflake;
/**
* Role or user
*/
type: ApplicationCommandPermissionType;
/**
* `true` to allow, `false`, to disallow
*/
permission: boolean;
}

export enum ApplicationCommandPermissionType {
ROLE = 1,
USER,
}

/**
* https://discord.com/developers/docs/interactions/slash-commands#interaction-applicationcommandinteractiondata
*/
Expand Down
42 changes: 41 additions & 1 deletion deno/rest/v8/interactions.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import type { APIApplicationCommand, APIInteractionResponse } from '../../payloads/v8/mod.ts';
import type {
APIApplicationCommand,
APIApplicationCommandPermission,
APIGuildApplicationCommandPermissions,
APIInteractionResponse,
} from '../../payloads/v8/mod.ts';

/**
* https://discord.com/developers/docs/interactions/slash-commands#get-global-application-commands
Expand Down Expand Up @@ -85,3 +90,38 @@ export type RESTPostAPIInteractionCallbackFormDataBody =
*/
file: unknown;
});

/**
* https://discord.com/developers/docs/interactions/slash-commands#get-guild-application-command-permissions
*/
export type RESTGetAPIGuildApplicationCommandsPermissionsResult = APIGuildApplicationCommandPermissions[];

/**
* https://discord.com/developers/docs/interactions/slash-commands#get-application-command-permissions
*/
export type RESTGetAPIApplicationCommandPermissionsResult = APIGuildApplicationCommandPermissions;

/**
* https://discord.com/developers/docs/interactions/slash-commands#edit-application-command-permissions
*/
export interface RESTPutAPIApplicationCommandPermissionsJSONBody {
permissions: APIApplicationCommandPermission[];
}

/**
* https://discord.com/developers/docs/interactions/slash-commands#edit-application-command-permissions
*/
export type RESTPutAPIApplicationCommandPermissionsResult = APIGuildApplicationCommandPermissions;

/**
* https://discord.com/developers/docs/interactions/slash-commands#batch-edit-application-command-permissions
*/
export type RESTPutAPIGuildApplicationCommandsPermissionsJSONBody = Pick<
APIGuildApplicationCommandPermissions,
'id' | 'permissions'
>[];

/**
* https://discord.com/developers/docs/interactions/slash-commands#batch-edit-application-command-permissions
*/
export type RESTPutAPIGuildApplicationCommandsPermissionsResult = APIGuildApplicationCommandPermissions[];
18 changes: 18 additions & 0 deletions deno/rest/v8/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,24 @@ export const Routes = {
guildVoiceState(guildID: Snowflake, userID: Snowflake | '@me' = '@me') {
return `/guilds/${guildID}/voice-states/${userID}` as const;
},

/**
* Route for:
* - GET `/applications/{application.id}/guilds/{guild.id}/commands/permissions`
* - PUT `/applications/{application.id}/guilds/{guild.id}/commands/permissions`
*/
guildApplicationCommandsPermissions(applicationID: Snowflake, guildID: Snowflake) {
return `/applications/${applicationID}/guilds/${guildID}/commands/permissions` as const;
},

/**
* Route for:
* - GET `/applications/{application.id}/guilds/{guild.id}/commands/{command.id}/permissions`
* - PUT `/applications/{application.id}/guilds/{guild.id}/commands/{command.id}/permissions`
*/
applicationCommandPermissions(applicationID: Snowflake, guildID: Snowflake, commandID: Snowflake) {
return `/applications/${applicationID}/guilds/${guildID}/commands/${commandID}/permissions` as const;
},
};

export const RouteBases = {
Expand Down
66 changes: 66 additions & 0 deletions payloads/v8/interactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,32 @@ import type { APIGuildMember, APIPartialChannel, APIRole, APIUser, MessageFlags
* https://discord.com/developers/docs/interactions/slash-commands#applicationcommand
*/
export interface APIApplicationCommand {
/**
* Unique id of the command
*/
id: Snowflake;
/**
* Unique id of the parent application
*/
application_id: Snowflake;
/**
* 1-32 character name matching `^[\w-]{1,32}$`
*/
name: string;
/**
* 1-100 character description
*/
description: string;
/**
* The parameters for the command
*/
options?: APIApplicationCommandOption[];
/**
* Whether the command is enabled by default when the app is added to a guild
*
* If missing, this property should be assumed as `true`
*/
default_permissions?: boolean;
}

interface APIApplicationCommandOptionBase {
Expand Down Expand Up @@ -157,6 +178,51 @@ export const enum InteractionType {
ApplicationCommand,
}

/**
* https://discord.com/developers/docs/interactions/slash-commands#guildapplicationcommandpermissions
*/
export interface APIGuildApplicationCommandPermissions {
/**
* The id of the command
*/
id: Snowflake;
/**
* The id of the application the command belongs to
*/
application_id: Snowflake;
/**
* The id of the guild
*/
guild_id: Snowflake;
/**
* The permissions for the command in the guild
*/
permissions: APIApplicationCommandPermission[];
}

/**
* https://discord.com/developers/docs/interactions/slash-commands#applicationcommandpermissions
*/
export interface APIApplicationCommandPermission {
/**
* The id of the role or user
*/
id: Snowflake;
/**
* Role or user
*/
type: ApplicationCommandPermissionType;
/**
* `true` to allow, `false`, to disallow
*/
permission: boolean;
}

export const enum ApplicationCommandPermissionType {
ROLE = 1,
USER,
}

/**
* https://discord.com/developers/docs/interactions/slash-commands#interaction-applicationcommandinteractiondata
*/
Expand Down
18 changes: 18 additions & 0 deletions rest/v8/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,24 @@ export const Routes = {
guildVoiceState(guildID: Snowflake, userID: Snowflake | '@me' = '@me') {
return `/guilds/${guildID}/voice-states/${userID}` as const;
},

/**
* Route for:
* - GET `/applications/{application.id}/guilds/{guild.id}/commands/permissions`
* - PUT `/applications/{application.id}/guilds/{guild.id}/commands/permissions`
*/
guildApplicationCommandsPermissions(applicationID: Snowflake, guildID: Snowflake) {
return `/applications/${applicationID}/guilds/${guildID}/commands/permissions` as const;
},

/**
* Route for:
* - GET `/applications/{application.id}/guilds/{guild.id}/commands/{command.id}/permissions`
* - PUT `/applications/{application.id}/guilds/{guild.id}/commands/{command.id}/permissions`
*/
applicationCommandPermissions(applicationID: Snowflake, guildID: Snowflake, commandID: Snowflake) {
return `/applications/${applicationID}/guilds/${guildID}/commands/${commandID}/permissions` as const;
},
};

export const RouteBases = {
Expand Down
42 changes: 41 additions & 1 deletion rest/v8/interactions.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import type { APIApplicationCommand, APIInteractionResponse } from '../../payloads/v8/index';
import type {
APIApplicationCommand,
APIApplicationCommandPermission,
APIGuildApplicationCommandPermissions,
APIInteractionResponse,
} from '../../payloads/v8/index';

/**
* https://discord.com/developers/docs/interactions/slash-commands#get-global-application-commands
Expand Down Expand Up @@ -85,3 +90,38 @@ export type RESTPostAPIInteractionCallbackFormDataBody =
*/
file: unknown;
});

/**
* https://discord.com/developers/docs/interactions/slash-commands#get-guild-application-command-permissions
*/
export type RESTGetAPIGuildApplicationCommandsPermissionsResult = APIGuildApplicationCommandPermissions[];

/**
* https://discord.com/developers/docs/interactions/slash-commands#get-application-command-permissions
*/
export type RESTGetAPIApplicationCommandPermissionsResult = APIGuildApplicationCommandPermissions;

/**
* https://discord.com/developers/docs/interactions/slash-commands#edit-application-command-permissions
*/
export interface RESTPutAPIApplicationCommandPermissionsJSONBody {
permissions: APIApplicationCommandPermission[];
}

/**
* https://discord.com/developers/docs/interactions/slash-commands#edit-application-command-permissions
*/
export type RESTPutAPIApplicationCommandPermissionsResult = APIGuildApplicationCommandPermissions;

/**
* https://discord.com/developers/docs/interactions/slash-commands#batch-edit-application-command-permissions
*/
export type RESTPutAPIGuildApplicationCommandsPermissionsJSONBody = Pick<
APIGuildApplicationCommandPermissions,
'id' | 'permissions'
>[];

/**
* https://discord.com/developers/docs/interactions/slash-commands#batch-edit-application-command-permissions
*/
export type RESTPutAPIGuildApplicationCommandsPermissionsResult = APIGuildApplicationCommandPermissions[];

0 comments on commit f517f35

Please sign in to comment.