177 lines
6.2 KiB
TypeScript
177 lines
6.2 KiB
TypeScript
import {
|
|
APIApplicationCommandDMInteraction,
|
|
APIApplicationCommandGuildInteraction,
|
|
APIApplicationCommandInteraction,
|
|
APIButtonComponent,
|
|
APIButtonComponentWithCustomId,
|
|
APIButtonComponentWithURL,
|
|
APIChatInputApplicationCommandInteraction,
|
|
APIContextMenuInteraction,
|
|
APIDMInteraction,
|
|
APIGuildInteraction,
|
|
APIInteraction,
|
|
APIMessageComponentButtonInteraction,
|
|
APIMessageComponentDMInteraction,
|
|
APIMessageComponentGuildInteraction,
|
|
APIMessageComponentInteraction,
|
|
APIMessageComponentSelectMenuInteraction,
|
|
ApplicationCommandType,
|
|
ButtonStyle,
|
|
ComponentType,
|
|
InteractionType,
|
|
} from '../payloads/v9/index';
|
|
|
|
// Interactions
|
|
|
|
/**
|
|
* A type-guard check for DM interactions
|
|
* @param interaction The interaction to check against
|
|
* @returns A boolean that indicates if the interaction was received in a DM channel
|
|
*/
|
|
export function isDMInteraction(interaction: APIInteraction): interaction is APIDMInteraction {
|
|
return Reflect.has(interaction, 'user');
|
|
}
|
|
|
|
/**
|
|
* A type-guard check for guild interactions
|
|
* @param interaction The interaction to check against
|
|
* @returns A boolean that indicates if the interaction was received in a guild
|
|
*/
|
|
export function isGuildInteraction(interaction: APIInteraction): interaction is APIGuildInteraction {
|
|
return Reflect.has(interaction, 'guild_id');
|
|
}
|
|
|
|
// ApplicationCommandInteractions
|
|
|
|
/**
|
|
* A type-guard check for DM application command interactions
|
|
* @param interaction The application command interaction to check against
|
|
* @returns A boolean that indicates if the application command interaction was received in a DM channel
|
|
*/
|
|
export function isApplicationCommandDMInteraction(
|
|
interaction: APIApplicationCommandInteraction,
|
|
): interaction is APIApplicationCommandDMInteraction {
|
|
return isDMInteraction(interaction);
|
|
}
|
|
|
|
/**
|
|
* A type-guard check for guild application command interactions
|
|
* @param interaction The interaction to check against
|
|
* @returns A boolean that indicates if the application command interaction was received in a guild
|
|
*/
|
|
export function isApplicationCommandGuildInteraction(
|
|
interaction: APIApplicationCommandInteraction,
|
|
): interaction is APIApplicationCommandGuildInteraction {
|
|
return isGuildInteraction(interaction);
|
|
}
|
|
|
|
// MessageComponentInteractions
|
|
|
|
/**
|
|
* A type-guard check for DM message component interactions
|
|
* @param interaction The message component interaction to check against
|
|
* @returns A boolean that indicates if the message component interaction was received in a DM channel
|
|
*/
|
|
export function isMessageComponentDMInteraction(
|
|
interaction: APIMessageComponentInteraction,
|
|
): interaction is APIMessageComponentDMInteraction {
|
|
return isDMInteraction(interaction);
|
|
}
|
|
|
|
/**
|
|
* A type-guard check for guild message component interactions
|
|
* @param interaction The interaction to check against
|
|
* @returns A boolean that indicates if the message component interaction was received in a guild
|
|
*/
|
|
export function isMessageComponentGuildInteraction(
|
|
interaction: APIMessageComponentInteraction,
|
|
): interaction is APIMessageComponentGuildInteraction {
|
|
return isGuildInteraction(interaction);
|
|
}
|
|
|
|
// Buttons
|
|
|
|
/**
|
|
* A type-guard check for buttons that have a `url` attached to them.
|
|
* @param component The button to check against
|
|
* @returns A boolean that indicates if the button has a `url` attached to it
|
|
*/
|
|
export function isLinkButton(component: APIButtonComponent): component is APIButtonComponentWithURL {
|
|
return component.style === ButtonStyle.Link;
|
|
}
|
|
|
|
/**
|
|
* A type-guard check for buttons that have a `custom_id` attached to them.
|
|
* @param button The button to check against
|
|
* @returns A boolean that indicates if the button has a `custom_id` attached to it
|
|
*/
|
|
export function isInteractionButton(component: APIButtonComponent): component is APIButtonComponentWithCustomId {
|
|
return component.style !== ButtonStyle.Link;
|
|
}
|
|
|
|
// Message Components
|
|
|
|
/**
|
|
* A type-guard check for message component interactions
|
|
* @param interaction The interaction to check against
|
|
* @returns A boolean that indicates if the interaction is a message component
|
|
*/
|
|
export function isMessageComponentInteraction(
|
|
interaction: APIInteraction,
|
|
): interaction is APIMessageComponentInteraction {
|
|
return interaction.type === InteractionType.MessageComponent;
|
|
}
|
|
|
|
/**
|
|
* A type-guard check for button message component interactions
|
|
* @param interaction The message component interaction to check against
|
|
* @returns A boolean that indicates if the message component is a button
|
|
*/
|
|
export function isMessageComponentButtonInteraction(
|
|
interaction: APIMessageComponentInteraction,
|
|
): interaction is APIMessageComponentButtonInteraction {
|
|
return interaction.data.component_type === ComponentType.Button;
|
|
}
|
|
|
|
/**
|
|
* A type-guard check for select menu message component interactions
|
|
* @param interaction The message component interaction to check against
|
|
* @returns A boolean that indicates if the message component is a select menu
|
|
*/
|
|
export function isMessageComponentSelectMenuInteraction(
|
|
interaction: APIMessageComponentInteraction,
|
|
): interaction is APIMessageComponentSelectMenuInteraction {
|
|
return [
|
|
ComponentType.StringSelect,
|
|
ComponentType.UserSelect,
|
|
ComponentType.RoleSelect,
|
|
ComponentType.MentionableSelect,
|
|
ComponentType.ChannelSelect,
|
|
].includes(interaction.data.component_type);
|
|
}
|
|
|
|
// Application Commands
|
|
|
|
/**
|
|
* A type-guard check for chat input application commands.
|
|
* @param interaction The interaction to check against
|
|
* @returns A boolean that indicates if the interaction is a chat input application command
|
|
*/
|
|
export function isChatInputApplicationCommandInteraction(
|
|
interaction: APIApplicationCommandInteraction,
|
|
): interaction is APIChatInputApplicationCommandInteraction {
|
|
return interaction.data.type === ApplicationCommandType.ChatInput;
|
|
}
|
|
|
|
/**
|
|
* A type-guard check for context menu application commands.
|
|
* @param interaction The interaction to check against
|
|
* @returns A boolean that indicates if the interaction is a context menu application command
|
|
*/
|
|
export function isContextMenuApplicationCommandInteraction(
|
|
interaction: APIApplicationCommandInteraction,
|
|
): interaction is APIContextMenuInteraction {
|
|
return (
|
|
interaction.data.type === ApplicationCommandType.Message || interaction.data.type === ApplicationCommandType.User
|
|
);
|
|
}
|