mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 16:43:31 +01:00
66 lines
2.0 KiB
TypeScript
66 lines
2.0 KiB
TypeScript
import { s } from '@sapphire/shapeshift';
|
|
import { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';
|
|
import { isValidationEnabled } from '../../util/validation.js';
|
|
import type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';
|
|
|
|
const namePredicate = s
|
|
.string()
|
|
.lengthGreaterThanOrEqual(1)
|
|
.lengthLessThanOrEqual(32)
|
|
// eslint-disable-next-line prefer-named-capture-group
|
|
.regex(/^( *[\p{P}\p{L}\p{N}\p{sc=Devanagari}\p{sc=Thai}]+ *)+$/u)
|
|
.setValidationEnabled(isValidationEnabled);
|
|
const typePredicate = s
|
|
.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])
|
|
.setValidationEnabled(isValidationEnabled);
|
|
const booleanPredicate = s.boolean();
|
|
|
|
export function validateDefaultPermission(value: unknown): asserts value is boolean {
|
|
booleanPredicate.parse(value);
|
|
}
|
|
|
|
export function validateName(name: unknown): asserts name is string {
|
|
namePredicate.parse(name);
|
|
}
|
|
|
|
export function validateType(type: unknown): asserts type is ContextMenuCommandType {
|
|
typePredicate.parse(type);
|
|
}
|
|
|
|
export function validateRequiredParameters(name: string, type: number) {
|
|
// Assert name matches all conditions
|
|
validateName(name);
|
|
|
|
// Assert type is valid
|
|
validateType(type);
|
|
}
|
|
|
|
const dmPermissionPredicate = s.boolean().nullish();
|
|
|
|
export function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {
|
|
dmPermissionPredicate.parse(value);
|
|
}
|
|
|
|
const memberPermissionPredicate = s
|
|
.union([
|
|
s.bigint().transform((value) => value.toString()),
|
|
s
|
|
.number()
|
|
.safeInt()
|
|
.transform((value) => value.toString()),
|
|
s.string().regex(/^\d+$/),
|
|
])
|
|
.nullish();
|
|
|
|
export function validateDefaultMemberPermissions(permissions: unknown) {
|
|
return memberPermissionPredicate.parse(permissions);
|
|
}
|
|
|
|
export const contextsPredicate = s.array(
|
|
s.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),
|
|
);
|
|
|
|
export const integrationTypesPredicate = s.array(
|
|
s.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),
|
|
);
|